您的位置:首页 > 移动开发 > Android开发

android cyanogenMod 内核编译方法

2013-01-23 16:18 183 查看
1、下载内核源码 
mkdir -p ~/android/kernel 
cd ~/android/kernel 
git clone git://github.com/CyanogenMod/cm-kernel.git 
cd cm-kernel 

--当然,也可以直接到https://github.com/CyanogenMod/cm-kernel 上下载tar包,然后解压,这样速度快多了
。-- 

2、获取内核配置文件 
从手机总取得: 
adb pull /proc/config.gz 

cat config.gz | gunzip > .config    
#将gz包里面的内容写到.config中 
#.config 应该位于内核源码根目录 

3、设置变量 
export CCOMPILER=/home/lql/android/system/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- 
即指定编译内核使用的命令等工具 

4、编译内核 
make ARCH=arm CROSS_COMPILE=$CCOMPILER -j5 
-j5 表示采用并行编译  后面的5 = cpu核心数目 + 1 
这样编译速度会快很多 

编译生成的内核位于: 
~/android/kernel/cm-kernel/arch/arm/boot/zImage 
无线驱动模块: 
~/android/kernel/cm-kernel/drivers/net/wireless/bcm4329/bcm4329.ko 

5、重新编译ROM,将上面编译生成的内核和驱动打包进去 

在rom 源码根目录下(~/android/system/)目录下新建文件buildspec.mk文件,内容如下: 
TARGET_PREBUILT_KERNEL:=kernel/arch/arm/boot/zImage 
--- 下面是我的设置----- 
TARGET_PREBUILT_KERNEL:=/home/lql/android/kernel/cm-kernel/arch/arm/boot/zImage 
#指定编译rom所使用的内核 
#编译rom使用的内核一般都是预先编译好的 

注意,因为无线驱动模块是和内核一起编译生成的,所以在编译rom 的时候,也必须使用上面编译生成的无线驱动模块,否则,刷机之后,wifi会报错, 
具体的报错原因主要是驱动的vermagic不正确。 
具体的解决办法: 
可以在编译好zip包之后,将自己编译的bcm4329.ko文件替换zip包里面的 
system/lib/modules/bcm4329.ko 

目前还没找到如何在buildspec.mk文件中指定编译rom使用新 无线驱动模块。 

6、编译rom 
回到rom源码根目录 
$. build/envsetup.sh    
$brunch bravo 

根据机器的配置,编译大概需要半个小时左右。 

补充: 

1、修改默认语言为中文 

修改build\target\product\full_base.mk内容: 

PRODUCT_LOCALES := zh_CN 

2、修改需要编译的语言 

修改build\target\product\languages_full.mk内容: 

PRODUCT_LOCALES := en_US \ 

zh_CN  

即只编译英文和简体中文。 

3、repo撤销本地修改 

repo forall -c git reset --hard HEAD 

有的时候修改本地代码了,再次同步的时候会报错,需要清理代码的时候,可以执行这个命令。 

4、编译相关配置文件: 

verdor\cyanogen\products\cyanogen_bravo.mk 

该文件定义了编译的内核以及编译最终生成的文件名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: