`

Ubuntu10.0.4下CyanogenMod编译环境的搭建和可刷机文件的编译及打包(For HTC Dream)【转】

阅读更多

http://www.linuxidc.com/Linux/2010-05/26287.htm

 

本文只是叙述Ubuntu下编译环境的搭建和ROM的编译过程,过程中可能会需要一些Ubuntu的常规操作技巧,在本文里就不详细介绍了,Ubuntu的新手可以通过谷歌学习一下,笔者也是新手,刚用没多久,谷歌一下并不难,另外由于源码和编译后生成的文件都比较大,如果想要折腾起来的话,Ubuntu的分区最好能有30G,20G的话一会就用完了,笔者之前也是分了20G,但不一会就空间不足了,故最后格掉分区,重新分了100G给Ubuntu。

 

编译环境的搭建

JDK安装
a) JDK是Ubuntu下使用Android SDK,编译源代码等必备的软件包,首先我们现来装这个

b) 从sun官方网站下载最新版的JDK,一般是个.bin的文件,笔者下载的是jdk-6u20-linux-i586.bin(根据文件不同,命令的也会有所变化,大家在使用的时候要注意,主要是文件名和路径的变化)。

c) 由于JDK运行时会在当前目录下安装,所以在安装前,先把它移动到你想要安装的目录,比如笔者将其安装在/usr/lib/jvm/java目录下,如果你也想安装在相同目录,可以照着我下面的命令来做

代码:

sudo –i

cd /usr/lib

mkdir jvm

cd jvm

mkdir java

cd java

cp “jdk-6u20-linux-i586.bin所在目录“/jdk-6u20-linux-i586.bin /usr/lib/jvm/java

chmod u+x jdk-6u20-linux-i586.bin

jdk-6u20-linux-i586.bin

此时会出现JDK的安装提示说明,按着回车不放,提示说明会持续滚动,www.linuxidc.com直到屏幕提示需要输入Yes/NO,输入YES后,即开始安装,安装完成后提示按回车继续,按完回车后,安装即告成功

d) 与Windows不同,Ubuntu是没有注册表的,故安装完成后,我们需要把我们安装JDK的目录告诉系统,故在刚才的终端里执行如下命令(如果是新开的终端,没有执行过“sudo -i”,则需要在命令前+“sudo”获得权限)

代码:

gedit /etc/environment

此时在会弹出一个文本编辑器,里面显示

代码:

PATH=”……”

其中省略号部分是其默认的路径,这里我们不要动它,我们需要对这个进行一些修改,将我们的JDK安装路径写进去,告诉系统我们的JDK装在哪里,去哪里调用,故做如下修改:

i. 在原有的 PATH=”……” 的省略号里面添加:

代码:

PATH=”……:/usr/lib/jvm/java/jdk1.6.0_20/bin”

ii. 添加两行,输入如下内容:

代码:

CLASSPATH=.:/usr/lib/jvm/java/jdk1.6.0_20/lib

JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_20

最后生成如下形式:

代码:

PATH=”……:/usr/lib/jvm/java/jdk1.6.0_20/bin”

CLASSPATH=.:/usr/lib/jvm/java/jdk1.6.0_20/lib

JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_20

其中,省略号部分是文件原有内容,我们在后面新加了一部分内容和两个新行。修改完成后保存退出。

e) Ubuntu有可能会自带JDK或者安装多个JDK,此时需要将我们安装的这个设置为默认

i. 首先,将我们的JDK安装目录加入到JDK的选择菜单,执行如下代码:

代码:

update-alternatives –install /usr/bin/java java /usr/lib/jvm/java/jdk1.6.0_12/bin/java 300

update-alternatives –install /usr/bin/javac javac /usr/lib/jvm/java/jdk1.6.0_12/bin/javac 300

ii. 其次,通过命令来选择默认的JDK,执行如下代码:

代码:

update-alternatives –config java

iii. 最后,再来检查一下系统当前的JDK版本,输入以下代码查看:

代码:

java -version

f) 至此,JDK即告安装成功。

Android SDK安装
a) 既然是做rom,那肯定需要调试和测试的工具,Android的官方SDK同样提供官方版本,我们直接下载安装即可。

b) 去谷歌的官网下载最新的SDK版本,前几天刚跟新了支持2.2的r6,不过SDK的官方网站在墙后,我们只能FQ过去下载,这点比较无奈。官方提供Windows,Mac OS X,Linux三个版本,毫无疑问,我们需要下载Linux的版本。

c) SDK不需要安装,直接解压就可以使用。建议放在主目录下,方便调用。

d) 为了方便adb命令的使用,我们同样需要将adb命令所在的目录添加到系统环境变量中去,这样,在任何目录下都能直接调用adb,不需要现cd到SDK目录,这样会比较方便,实现方法如下:

代码:

sudo gedit ~/.bashrc

用文本编辑器打开.bashrc文件,然后在最后添加一行:

代码:

export PATH=${PATH}:<你sdk的目录>/tools

这里的需要将你sdk的安装目录添写进去,保存后即可。

e) 把手机连上usb,然后在终端中输入:

代码:

adb devices

会列出所有连接在电脑上的Android设备,如果看到一串数字和字母的序列号的显示的话,即表示SDK安装成功。

 

 

软件安装
a) 配置源,更新源之类的问题就不再说了,直接说我们需要的软件,从同步源码到编译rom我们总计需要用到以下几个软件,有部分软件在我们更新过程中可能已经自动安装了,但这不影响我们工作,我把所有需要用到的程序列了出来:

? git-core

? gnupg

? flex

? bison

 

? gperf

 

? libsdl-dev

? libesd0-dev

? libwxgtk2.6-dev

? build-essential

? zip

? curl

? libncurses5-dev

? zlib1g-dev

? valgrind

? libreadline5-dev

b) 以上这些程序均通过apt-get命令来安装,比如要安装git-core软件,我们通过输入如下命令来实现:

代码:

sudo apt-get install git-core

c) 其它软件的安装过程类似,替换掉最后的软件名称即可。

d) 安装完所有软件后,编译CyanogenMod所需要的所有环境均搭建完成了。

 

源码同步
repo的安装
a) CyanogenMod的源码地址是http://github.com/cyanogen/android,你可以通过网址右上角的Download Source来下载源码。不过我们并不推荐这种方式下载,因为源码的变化较为频繁,每次一旦源码有变化,我们就需要重新下载完整的源码包,既费时又费力,效率也很低,故推荐通过repo同步的方式来做,在同步过程中,仅会同步源码的变化部分,效率较高。

b) Repo的安装

i. repo的安装比较方便,之需要下载一个文件,并设置成可执行权限,并添加到系统环境中去即可,具体命令如下:

代码:

cd ~

mkdir bin

在你的home根目录下创建名为bin的文件夹。

代码:

sudo gedit ~./bashrc

打开你的环境变量配置文件,在最后加一行:

代码:

export PATH=$PATH:~/bin

修改后保存文件退出,关闭终端,重新打开一个终端,输入如下命令验证路径是否成功添加到环境变量中去了:

代码:

echo $PATH

确认完后,开始安装repo,执行如下命令:

代码:

curl http://Android.git.kernel.org/repo > ~/bin/repo
chmod a+x ~/bin/repo

通过curl命令将repo下载到bin中,并将其权限修改为可执行文件,至此repo的安装结束。

Repo的配置和同步
i. 在主目录下新建一个文件夹,作为源码的存放目录

代码:

cd ~

mkdir cyanogenmod

cd cyanogenmod

ii. 在cyanogenmod目录执行repo命令,设定需要同步的源码内容:

代码:

repo init -u git://github.com/cyanogen/Android.git -b eclair

网址即为cyanogenmod的地址,-b表示我们选择需要同步的分支,cyanogenmod有不少分支,比如dount,eclair,以后还会有froyo,我们目前需要编译的是2.1,即eclair,则通过-b eclair来选择2.1的分支。

iii. 在配置过程中,会让你选择名字和邮箱,这个会显示在你最后编译出来的rom的基础信息里,可以选择你喜欢的来写

iv. 配置完成后,就可以开始同步源码了:

代码:

repo sync

同步的过程会比较长,建议在晚上睡觉前开始同步,一般早上起来就能好了。

编译环境的设置
编译环境的建立
a) 同步玩源码后,首先需要建立编译环境,CM的源码把这些命令都写成了脚本,我们只需运行相应的脚本即可,首先,先cd到源码的根目录,然后执行如下命令:

代码:

./build/envsetup.sh

执行后,屏幕上会显示:

代码:

including vendor/cyanogen/vendorsetup.sh

此时,编译环境设置成功。

 

 

 

专属文件的提取
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就大功告成了。

分享到:
评论
3 楼 w11h22j33 2011-03-26  
1.  查看Android源码的各个版本分支,首先下载 android.git.kernel.org/platform/manifest.git ,得到清单文件后执行git branch -a 即可,该命令执行后会查看清单中的packed-refs。
2 楼 w11h22j33 2011-03-26  
$ repo sync -j 10
多线程同步下载
1 楼 w11h22j33 2011-03-26  
Android带给我们的不仅仅是优秀的触控,漂亮的界面,快速的事件处理,让我们爱不释手!最重要的,它是开源的,任何android的爱好者都可以在它许可的权限范围内对android的源码做修改,移植,定制,以满足自己的需求。由此,目前非官方的第三方ROM受到了众多手机玩家以及android开发者的热爱,他们或者厌倦了原有的桌面程序,想换换口味,或者是为了优化手机处理能力,去掉一些厂家自带的应用程序。而本文,将引领大家尝试亲自手动编译android的源代码,并且将它移植到自己心爱的手机上。

      本文以CyanogenMod团队优化过的基于android2.1的源代码讲述如何将它移植到htc legend(g6)手机上。

   个人认为CyanogenMod团队是目前非官方ROM开发中非常优秀的,它们制作的android源代码不仅仅可以移植到htc dream,margic,legend,hero,还可以移植到moto xt701,xt702等手机上,实属不容易。

   成功将android2.1移植到手机上,需经过以下几个步骤:

   一,准备好android2.1源码编译环境以及手机USB调试环境。

   二,将手机上硬件驱动程序以及相关的配置文件通过ADB命令保存好。

   三,针对不同的手机机型,制作相应的vendor配置文件。

   四,编译源码。

   五,通过手机提供的bootloader刷机或者直接以recovery的方式更新ROM。

   在以上五个步骤中,其中最难处理的便是第2个步骤,这个步骤需要熟悉每个手机机型的硬件参数,并且能够在手机上找到相关的驱动程序以及了解他们如何配置。而CyanogenMod团队公布的源码当中,己经将相关的工作做好了,编译源码之前仅仅需要执行相应的shell命令,便可顺利的下载相应的手机驱动程序以及配置文件。

下面是移植步骤,供参考:

   一,首先需要下载CyanogenMod 5.0.8的源码:

   $ mkdir android-cm5

   $ cd android-cm5

   $ repo init -u git://github.com/CyanogenMod/android.git -b eclair

   $ repo sync

  二,下载CyanogenMod需要的一些共同文件,如果想最终版本中不需要这些APK,也可以通过配置/vendor/cyanogen/cyanogen.mk文件将这些需要的APK COPY命令注释掉。

  $ cd vendor/cyanogen/

  $ ./get-rommanager   #下载一个RomManager.apk包,主要是刷ROM用的。我没用过。

  $ ./get-google-files #其它的一些google开发的android apk包,我也没有用过!

  三,下载针对htc legend(g6)的vendor.

  $ cd ../../vendor/htc

  $ git clone git://github.com/aleho/android_vendor_htc_legend.git #下载针对htc legend(g6)手机的vendor,里面包括相关的配置参数,以及从手机上下载驱动程序的SHELL命令。

  $ mv android_vendor_htc_legend/ legend

  $ cd legend

  $ ./extract-files.sh  #确保这个命令执行将你的手机连接好电脑并且开了手机USB调试,adb命令可以连接手机。这个过程主要是下载htc legend(g6)驱动程序以及配置文件。

  四,针对CyanogenMod 5.0.8源码打上htc legend(g6)的补丁包,这个补丁包主要是wifi和触摸屏的,如果不做,触摸屏将无法触摸以及wifi功能无法启动。可参数地址:

   http://forum.xda-developers.com/archive/index.php/t-702776.html

五,好了,根据自己的爱好,定制自己的一些vendor参数。然后make otapackage便可编译recovery方式的htc legend(g6)包。

相关推荐

Global site tag (gtag.js) - Google Analytics