Ubuntu10.0.4下CyanogenMod编译环境的搭建和可刷机文件(3)

专属文件的提取
a) 虽然Android系统是开源的,但有部分Dream的专属文件是不开源的,所以并不包含在源码树中。但如果希望rom能在Dream真机上运行,又需要这些文件,所以需要将这些文件提取出来,在CM中,这个操作比较简单,Steve已经给我们做好脚本了。

b) 首先你要确保安装成功了上述所有软件,然后,将Dream通过usb连接到电脑上。

c) cd到源码的/vendor/htc/dream_sapphire目录,然后执行脚本:

代码:

./extract-files.sh

d) 这个操作会调用adb命令,从你的手机里pull所需要的专属文件到vendor目录。

编译文件的修改
a) 默认的编译过程包含了所有的语言和程序,但其实我们并不需要这些,可以通过编译文件的修改来定义需要输出的语言和软件

b) 打开/vendor/cyanogen/products 目录下的cyanogen.mk文件,里面定义了要输出的软件和语言,对于不需要的软件,可以直接删除。但不建议在这里修改,可以从最后的输出目录里删除不需要的,直接在这里改容易出错

c) 在文件的最后,有一行”PRODUCT_LOCALES”,这里就包含了rom支持的语言类型,默认有几十种,编译出来后,软件会比较大,一般我们只需要保留其中的常用语言即可,笔者选择保留了en_US,zh_CN和zh_TW这三种语言,编译出来的软件就小了很多。

Kernel编译
1. kernel是android的核心,也是最重要的部分,虽然CM源码中自带了编译完成的kernel,但既然是自主编译,那你肯定想改改kernel的信息吧,比如kernel的名字,比如打上BFS补丁、超频补丁等等,那你就需要自己来编译kernel了。

2. 编译kernel也非常简单,首先你需要一个kernel的配置文件,CM提供了现成的,直接去/kernel-msm/arch/arm/configs 目录里找,有个配置文件叫cyanogen_msm_defconfig,这个就是我们需要的配额之文件了(如果是给Nexus编译kernel的话,需要选择cyanogen_mahimahi_defconfig)。将它复制到/kernel-msm 的根目录,然后重命名为 .config

3. 用文本编辑器打开.config,其中有一条参数为CONFIG_LOCALVERSION=”-cyanogenmod”,这里即为kernel编译完成后显示的名字,可以把cyanogenmod改成任意你喜欢的名字。

4. 设置完成后,就可以开始编译了。先cd到/kernel-msm目录,然后执行如下命令

代码:

export ARCH=arm

export CROSS_COMPILE=arm-eabi-

export PATH=$PATH:~/cyanogenmod/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin
 

这些命令定义了编译kernel时所需要用到的环境和设置。注意第三条命令在输入的时候,路径要和自己实际安放源码的路径一致,另外,每次编译kernel前,都需要重新输入这三个命令。

5. 命令输入完后,就可以开始make了:

代码:

make -j3

make就是开始编译的命令,后面的参数-j3表示用于编译的cpu核心数量,一般是cpu核心数量+1,比如双核cpu,就用-j3这个参数。

6. 编译过程根据配置不同而有所不同,笔者笔记本用的T6400是双核2G的,一般编译kernel的时间在10分钟内。编译后的kernel生成在/kernel-msm/arch/arm/boot/目录下,名字叫zImage

CyanogenMod编译
1. 编译完kernel后,就可以开始编译主菜CM了。编译前需要先生成一个buildspec.mk文件,来定义需要编译的rom的基本信息。先cd到源码的根目录,新建一个空文件,名字叫buildspec.mk,并用记事本打开,输入如下信息:

代码:

TARGET_PRODUCT:=cyanogen_dream_sapphire

TARGET_BUILD_VARIANT:=eng

TARGET_BUILD_TYPE:=release

TARGET_PREBUILT_KERNEL:=kernel/arch/arm/boot/zImage
 

a) 第一条命令表示需要编译的rom的选择,我们现在编译的是G1的rom,故选择cyanogen_dream_sapphire;

b) 第二条命令表示编译的rom的种类,有eng和userdebug两个类型可选,我们当然选在eng;

c) 第三个命令表示编译的rom的类型,我们选择release

d) 第四个命令表示基于哪个kernel来编译rom,如果不设这个命令,则会基于自带的kernel来编译,既然我们自己编译了kernel,那当然用我们自己的,故设置了已经编译好的kernel的目录,供make过程调用。

2. buildspec.mk文件建立好后,就可以开始编译rom了,cd到源码根目录,然后使用命令:

代码:

make -j3

开始编译源码,源码的编译过程会比较长,试配置不同,需要的时间也不一样,笔者的T6400编译完整的CM差不多需要2个小时。

3. 编译完成后,我们的成品就在/out/target/product目录中,里面包含了system.img,recovery.img,boot.img和system文件夹等,到这里,有点制作rom经验的朋友就不需要我再多说了吧。可以在fastboot里直接刷system.img,和boot.img;也可以将system文件夹和boot.img打包成zip包,添加更新脚本并签名,通过recovery刷到机器里,至此,我们自己编译的CyanogenMod for HTC Dream就大功告成了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpwdd.html