欢迎来到天天文库
浏览记录
ID:36537922
大小:356.12 KB
页数:12页
时间:2019-05-11
《关于CM源码自动编译内核解析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、关于CM源码自动编译内核源码的解析说明:本文是本人从CyanogenMod官网翻译而来,旨在帮助CM移植的朋友们,更好的学习了解CM源码或Android源码移植到新设备的一些相关知识。目录1把kernel和kernel模块包含在CM源代码中,一起编译进ROM1.1为什么CM要把内核源码和Android源码一起编译?2解决方法概述2.1把内核源码保存在CM源码适当位置中2.1.1官方支持的设备2.1.2使用正在开发中的没有完成的、非官方的、甚至是其它非集成设备2.1.3设备使用其他人共享的内核代码库3配置内核编译的设备4编译在内核源码外面的内核模块5使用预置的内核6一个完整的示例把
2、kernel和kernel模块包含在CM源代码中,一起编译进ROM1为什么CM要把kernel和Android编译在一起?在CM9之前,每个设备代码库依赖于预置的内核,它们和framework分开编译,如果任何时间有一点改动,它都需要设备维护者手动更新编译内核镜像和模块。此外,内核不使用一致的命名方案,而且很多都不是由CyanogenMod的Gerrit服务器管理,我们经常使用编译者编译的内核,而不是Android工具链中的内核。这导致很多不一致,让维护者也很难编译。解决方法概述到了CyanogenMod9,我们嘲笑那些使用预置内核镜像的人,CM9编译系统已经对这进行了修改,它需
3、要内核源代码。把内核源码保存在CM源码适当的位置中最低要求是要内核源代码放在以下目录中:kernel/vendor-name/device-name.官方支持的设备对于那些在CM代码库的主线上的有自己的内核的设备,这可以被CM的完美服务使用。使用下面的语法,在源代码的device目录下创建一个cm.dependencies文件(如果此文件不存在的话):{"repository":"name-of-repository-in-the-CyanogenMod-github","target_path":"kernel//","branc
4、h":"name-of-branch"}它将会自动下载源代码,并保存到对应合适的位置。使用正在开发中的没有完成的、非官方的、甚至是其它非集成设备对于在CM的github中没有内核源码的设备,为了在正确的位置存放源代码,建议使用local_manifest.xml,并保持它和你github中的代码库同步。设备使用其他人共享的内核代码库如果你的设备使用别人共享的kernel,默认的源码路径为:kernel/devicename,若不修改指定源码位置将会发生代码重复的错误,所以我们要使用TARGET_KERNEL_SOURCE来指定当前kernel源码的位置,具体可以在文件BoardC
5、onfig.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这将触发所有内核源码的编译,包括配置文件中指定的内核模块,任何编译
6、的模块都会在最终的镜像文件的/system/lib/modules/目录下生成对应的模块文件。如果你的设备要求uImage格式的镜像,那么应该在BoardConfig.mk文件中做如下配置:BOARD_USES_UBOOT:=true编译不在内核源码目录中的内核模块如果你的设备需要不在内核源码目录中的模块,这也可以通过配置让它自动编译,CM代码库直接支持一些硬件(德州仪器的TIWLAN适配器,博通的BCM适配器),但如果你的设备不是这种情况,建议你把模块源码添加到你的设备代码库,或者添加到内核源码的一个单独的目录中。为了编译这些模块,变量TARGET_KERNEL_MODULES
7、将被使用,使TARGET_KERNEL_MODULES的值为能编译和安装的模块的maketarget,定义这样一个target是设备厂商设计者的责任,唯一的限制是,它必须遵守makefile的编写规则,下面我们以TIWLAN为例来说明:TIWLAN_MODULES:make-Chardware/ti/wlan/wl1283/platforms/os/linux/KERNEL_DIR=$(KERNEL_OUT)ARCH="arm"CROSS_COMPILE="arm-eabi-"T
此文档下载收益归作者所有