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

本文介绍了如何在Android系统中进行模块化编译驱动程序。首先在kernel/drivers下创建自定义目录并编写驱动程序及Makefile。接着,修改上层driver目录的Makefile以包含新模块。通过make bootimage编译,并将生成的ko文件推送到设备。加载和卸载模块使用insmod和rmmod。注意避免直接修改Kconfig,而是遵循预配置的msm8909w_defconfig。遇到fastboot版本过旧或编译问题时,需更新fastboot或按步骤清理并重新配置编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值