您的位置:首页 > 移动开发 > Android开发

在Android系统中模块化编译驱动程序

2017-11-18 10:36 197 查看
1、向android系统之中添加一个驱动程序,模块化加载(insmod xxx.ko)

首先再kernel/drivers目录下添加自己的目录 hello。

在hello目录写写自己的驱动程序和Makefile文件。编写Makefile时,需要注意:obj-y:把由foo.c 或者 foo.s 文件编译得到foo.o 并连接进内核.obj-m:
则表示该文件作为模块编译。

修改hello上层目录的driver目录下的Makefile文件,把自己编写的hello模块编译进去。

在Android的系统目录下执行make bootimage进行编译(编译前记得source 和 lunch)。

obj-m生成的文件都在\HLOS\out\target\product\msm8909w\system\lib\modules目录下。

可以adb push将生成的hello.ko文件push进设备,也可以将成的内核镜像移植到设备hello.ko文件在系统目录下的/system/bin/lib/modules下。

最后insmod是加载模块,rmmod是卸载模块。
2、编译过程中遇到的坑

无需在自己目录下配置Kconfig,无需进行make menuconfig。我们的系统的配置都是根据需要配好了的,在/HLOS/kernel/arch/arm/configs/msm8909w_defconfig文件中,因为系统有裁剪,若进行make menucofig之后会生成一种全新配置,里面会调用一些抛弃的资源,导致编译不通过。

在编译好之后,烧录进手表的时候,烧录失败,FAILED (remote: data too large),经过排查是由于fastboot 版本太旧,需要更新fastboot。

在由于配置原因编译内核失败,提示没有.config文件的时候。首先在Android目录下make kernelclean清除编译残渣,然后在kernel目录下进行make mrproper清除错误配置,在Android目录下make fs_config编译指定配置,最后make bootimage。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: