Android 驱动(17)---如何在linux中添加新的kernel module

如何在linux中添加新的kernel module

该SOP针对客户如何添加一个kernel module,并把生成的.ko打包进system.img的过程。

解决方案

L版本(version>=5.0)支持编译为内核moudle(.ko文件)的config选项默认是关闭的。

因此,如在L版本上编译.ko文件,需先在项目defconfig文件中打开内核配置选项CONFIG_MODULES。

(一)准备module的C文件,如下为一个示例:

(二)把准备好的C 文件放置到alps/kernel的适当路径下,如下的路径为一个示例:

(三)修改源码所在的上一级目录中的Makefile文件,如下示例为./kernel/drivers/ 路径下的Makefile:

(四)在源码所在路径下,创建新的Makefile文件,如下为一个示例:

obj-m 目标中的-m参数表明所添加模块为动态加载模块,即.ko类型。

(五)快速编译所添加的模块

L之前版本参考命令如下:

 
编译完成后,会在./kernel/drivers/testmod/路径下,生成helloworld.ko文件:

如果在./kernel/drivers/testmod/路径下,没有helloworld.ko文件,可能是因为不同的工程设置,编译的.o文件位置不同,可以在alps路径下执行 find ./kernel/out -name xxx.ko。

 L及之后版本:

      (1)可以通过编译kernel或boot.img时生成.ko,参考命令make bootimage ,生成文件将在out 下的KERNEL_OBJ对应driver目录下。

       (2)也可以采用build module的方式,方法请参考FAQ13428,不过在编译时需要加modules 参数。如:

make ARCH=arm64 -j8 O=out drivers/misc/mediatek/eccci/    modules

(六)快速打包所生成的模块

6-1 把生成的.ko文件拷贝到./out/target/product/$(PROJECT)/system/lib/modules

6-2 执行打包命令

L之前版本参考以下命令;

L版本打包system.img的命令为:

make snod 或make systemimage-nodeps.

则helloworld.ko将被打包进system.img

猜你喜欢

转载自blog.csdn.net/zhangbijun1230/article/details/81253871
今日推荐