- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于CM源码自动编译内核的解析
关于 CM 源码自动编译内核源码的解析
说明:本文是本人从 CyanogenMod 官网翻译而来,旨在帮助 CM 移植的朋友们,更好的学习了
解 CM 源码或 Android 源码移植到新设备的一些相关知识。
目录
1 把 kernel 和 kernel 模块包含在 CM 源代码中,一起编译进 ROM
1.1 为什么 CM 要把内核源码和 Android 源码一起编译?
2 解决方法概述
2.1 把内核源码保存在 CM 源码适当位置中
2.1.1 官方支持的设备
2.1.2 使用正在开发中的没有完成的、非官方的、甚至是其它非集成设备
2.1.3 设备使用其他人共享的内核代码库
3 配置内核编译的设备
4 编译在内核源码外面的内核模块
5 使用预置的内核
6 一个完整的示例
把 kernel 和 kernel 模块包含在 CM 源代码中,一起编译进 ROM
1 为什么 CM 要把 kernel 和 Android 编译在一起?
在 CM9 之前,每个设备代码库依赖于预置的内核,它们和 framework 分开编译,如果任何
时间有一点改动,它都需要设备维护者手动更新编译内核镜像和模块。此外,内核不使用一
致的命名方案,而且很多都不是由 CyanogenMod 的 Gerrit 服务器管理,我们经常使用编译
者编译的内核,而不是 Android 工具链中的内核。这导致很多不一致,让维护者也很难编译。
解决方法概述
到了 CyanogenMod 9,我们嘲笑那些使用预置内核镜像的人,CM9 编译系统已经对这进行了
修改,它需要内核源代码。
把内核源码保存在 CM 源码适当的位置中
最低要求是要内核源代码放在以下目录中:
kernel/vendor-name/device-name.
官方支持的设备
对于那些在 CM 代码库的主线上的有自己的内核的设备,这可以被 CM 的完美服务使用。使
用下面的语法,在源代码的 device 目录下创建一个 cm.dependencies 文件(如果此文件不
存在的话):
{
repository: name-of-repository-in-the-CyanogenMod-github,
target_path: kernel/vendorname/devicename,
branch: name-of-branch
}
它将会自动下载源代码,并保存到对应合适的位置。
使用正在开发中的没有完成的、非官方的、甚至是其它非集成设备
对于在 CM 的 github 中没有内核源码的设备,为了在正确的位置存放源代码,
建议使用 local_manifest.xml ,并保持它和你 github 中的代码库同步。
设备使用其他人共享的内核代码库
如果你的设备使用别人共享的 kernel,默认的源码路径为:
kernel/devicename ,若不修改指定源码位置将会发生代码重复的错误,所以
我们要使用 TARGET_KERNEL_SOURCE 来指定当前 kernel 源码的位置,具体可以
在文件 BoardConfig.mk 中修改,如下:
TARGET_KERNEL_SOURCE := kernel/vendor-name/unique-shared-source-name
配置内核编译的设备
下载好源码后,配置编译内核的设备就很简单,只需要在文件 BoardConfig.mk
文件中修改 TARGET_KERNEL_CONFIG 变量的值就可以了,把它改为你自己设备对
应的名称(它存在于 arch/arm/configs 中),修改示例:
TARGET_KERNEL_CONFIG := cyanogenmod_mydevice_defconfig
这将触发所有内核源码的编译,包括配置文件中指定的内核模块,
任何编译的模块都会在最终的镜像文件的 /system/lib/modules/ 目录下生成
对应的模块文件。
如果你的设备要求 uImage 格式的镜像,那么应该在 BoardConfig.mk 文件中做
如下配置:
BOARD_USES_UBOOT := true
编译不在内核源码目录中的内核模块
如果你的设备需要不在内核源码目录中的模块,这也可以通过配置让它自动编
译,CM 代码库直接支持一些硬件
文档评论(0)