您的位置:首页 > 运维架构 > Linux

How To Build CyanogenMod Android (oneplus/bacon) On Linux

2015-10-30 19:21 661 查看
本文主要是对已经repo sync完所有cm12源码后,对一加手机(oneplus/bacon)Rom的编译工作,

其他版本可以举一反三。

1.Nexus 7 (“grouper”)build参考

下面链接是在linux下编译Nexus 7 (“grouper”)的方法,可以提供相关参考。

http://wiki.cyanogenmod.org/w/Build_for_grouper

2.下载相应device和kernel

repo sync完cm12所有的源码之后,还需要下载device相关文件以及内核源码。

从cm的官方github页面https://github.com/CyanogenMod搜索设备代号,一加的就是oneplus,有两个结果: android_device_oneplus_bacon和 android_kernel_oneplus_msm8974。android_device_qcom_common,点进去把这三个项目git
clone <ssh url>
下来,或直接点击Download ZIP下载后解压。

直接用breakfast bacon就会自动从github上面拉所有需要的东西,这样只需要下载oneplus的device部分。

3.配置device和kernel

把上面的device和kernel下载完之后要放到正确位置,这里有个比较好的规范就是下载的文件名就表明了相应目录

(android代表根目录)。进到源码的根目录。

mkdir -p device/oneplus/bacon

mkdir -p kernel/oneplus/msm8974


[b] mkdir -p/device/qcom/common[/b]

把刚才下载的device和kernel解压并放到上面新建的三个目录里面。

4.配置vendor

方法一: ./extract-files.sh

首先USB连接oneplus手机,确保系统版本跟源码版本一致,然后进到源码 /device/oneplus/bacon/ 这个目录下,执行上面指令。

这个脚本的主要作用是将手机中的驱动so库pull出来,然后新建 /vendor/oneplus/bacon/这个目录,

然后在里面放相应的库文件。

方法二: 上面方法需要手机已装系统,也可以手动去github搜索proprietary_vendor_oneplus下载

进到源码 /vendor/ 目录下,执行 git clone https://github.com/withyou/proprietary_vendor_oneplus.git
下载后把proprietary_vendor_oneplus重命名为oneplus,然后git
branch -av
查看分支,如果不在相应源码分支比如6.0应该checkout到cm-13.0。

配置USB请参考本文:/article/7798115.html

5.编译

source build/envsetup.sh

breakfast bacon

brunch 选择cm-bacon-userdebug回车

整个编译过程根据PC配置不同需要几个小时不等,编译时也可以根据CPU性能加上 j4参数(4代表核心数)
brunch cm-bacon-userdebug j4,如果看到Package Complete: .../out/target/product/bacon/cm-12.1-20151102-UNOFFICIAL-bacon.zip,就说明全部编译完成了。

[b]6.编译[/b]可能会出现问题

1.

make: *** No rule to make target `/out/host/linux-x86/bin/dtbToolCM', needed by ‘/out/target/product/bacon/dt.img'. Stop

解决方法:从cm的官方github页面https://github.com/CyanogenMod搜索
android_device_qcom_common,Download ZIP.

mkdir -p/device/qcom/common

把刚才下载的android_device_qcom_common.zip解压后放到刚才新建目录下。

同理若出现/device/oppo/common/下某文件未找到,同上下载android_device_oppo_common.zip,解压放到相应目录。

2.

system/vold/cryptfs.c: In function 'load_crypto_mapping_table':

system/vold/cryptfs.c:1031:3: error: implicit declaration of function 'is_ice_enabled' [-Werror=implicit-function-declaration]

if (is_ice_enabled())

^

意思是在system/vold/cryptfs.c 中未找到is_ice_enabled方法,而这个方法是在源码根目录/device/qcom/common/cryptfs_hw/下声明定义的,而在CM
github下载的device/qcom/common(即问题1中下载的文件夹)和repo sync 完的代码不同步造成的。

解决办法请下载http://download.csdn.net/download/lechengyuyuan/9237537 ,下载后直接把/device/qcom/common/cryptfs_hw/目录下三个文件替换即可。

3.

/out/target/product/bacon/obj/KERNEL_OBJ/... 停止。

在内核目录不要自己手动用make或make uImage编译内核,它会干扰到编译整个代码树导致报错。如果之前有这么做过,可以通过删除out/target/product/bacon/obj/KERNEL_OBJ整个文件夹,并进到内核(kernel)目录里面make mrproper一下来重新clean掉内核源码目录。同时建议在内核的源码目录在brunch之前就make
mrproper
一下。

原创文章,转载需注明出处/article/7798128.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: