很多时候,我们要在系统启动的时候在init.rc
中指定开机insmod某个ko文件,因此,需要将ko文件添加到system.img中。此处以Android下打包bcmdhd.ko
到system/lib/modules/
为例。
编译生成 bcmdhd.ko
通过Kernel_SrcDir/drivers/net/wireless/bcmdhd/
目录编译生成的 bcmdhd.ko
会保存在如下的两个路径:
Android_SrcDir/device/ProjectName/common/kernel-mod/lib/modules/4.1.15/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko
Kernel_SrcDir/drivers/net/wireless/bcmdhd/bcmdhd.ko
修改xxx.mk文件
在Android_SrcDir/device/ProjectName/common/kernel-mod/xxx.mk
添加以下4宏:
指定编译存放在哪个路径
1 | MY_KERNEL_MOD_INSTALL_PATH := $(TARGET_OUT)/usr/lib/modules |
指定ko的文件来源路径
1 | MY_KERNEL_WIFI_BCMDHD_PATH := lib/modules/4.1.15/kernel/ |
bcmdhd.ko
最终就会编译进system.img中去,即该ko会放到system/usr/lib/modules/
目录中去。
经过测试,这样修改编译还是会提示找不到 bcmdhd.ko
,需要将该ko先拷贝到lib/modules/4.1.15/kernel/drivers/net/wireless/bcmdhd/
目录下,然后重新编译就会自动拷贝打包。
上述的调用关系流程为:
1 | Android_SrcDir/device/ProjectName/common/kernel-mod/xxx.mk |
这部分的内容参照:http://blog.csdn.net/jscese/article/details/39209341
修改init.rc文件
一般init.rc会放在Android_SrcDir/device/ProjectName/SubProjectName/
目录下。
添加配置文件的存放路径
在bcmdhd.ko
使用过程中需要用到fw_bcmdhd.bin
和nvram.txt
等固件或配置文件,所以需要将其他们拷贝到指定路径,然后insmod bcmdhd.ko
可以从该位置获取到这些文件的信息。
将fw_bcmdhd.bin
和nvram.txt
等固件或配置文件拷贝到Android_SrcDir/device/ProjectName/SubProjectName/firmware_path
路径下,其中 firmware_path/
目录可以自己创建。
在 Android_SrcDir/device/ProjectName/SubProjectName/BoardConfig.mk
文件中的PRODUCT_COPY_FILES
宏下添加要拷贝到的路径,比如:
1 | PRODUCT_COPY_FILES += \ |