第三篇 Android kernel 动态编译的环境搭建

【背景】之前在S3C2440开发板上学习驱动的时候,经常使用动态编译,生成模块化的驱动文件KO,然后使用insmod命令动态的把驱动安装到系统中。

现在手中有一个msm8909的板子,也想搭建一个环境实现这样的一个功能,一开始失败了,最后解决了。


【总结】其实这样的环境搭建最核心的内容就是Makefile,换句话说,其实就是要知道这个过程的编译流程。


【1】复现问题:创建一个文件夹demo,内部只有两个文件,demo.c和Makefile


Makefile文件如下:

源码如下:


【2】编译这个驱动文件,直接执行make命令即可生成ko文件


【3】然后把ko安装到系统中


提示安装失败!

【4】查阅资料发现,是因为签名问题:http://www.linuxdiyf.com/linux/17648.html

【5】做实验使用android工程整体编译生成的demo_module.ko可以正常insmod,于是跟踪android整体编译的log发现以下信息:

第一步正常,在源码目录下生成相应的ko文件:msm\android-5.1\out\target\product\L503\obj\KERNEL_OBJ\drivers\char\demo_module.ko

第二部会执行签名动作:

make[1]:正在离开目录 `/work2/msm/android-5.1/kernel'
make -C kernel O=../out/target/product/L503/obj/KERNEL_OBJ INSTALL_MOD_PATH=../../system INSTALL_MOD_STRIP=1 ARCH=arm CROSS_COMPILE=arm-eabi- modules_install
make[1]: 正在进入目录 `/work2/msm/android-5.1/kernel'
  INSTALL arch/arm/mach-msm/dma_test.ko
  INSTALL arch/arm/oprofile/oprofile.ko
  INSTALL block/test-iosched.ko
  INSTALL crypto/ansi_cprng.ko

第三步,会重新生成一个新的demo_module.ko

  INSTALL drivers/char/demo_module.ko
  INSTALL drivers/gud/mcDrvModule.ko
  INSTALL drivers/gud/mcKernelApi.ko

【6】修改【1】中的Makefile文件如下:


再编译这个驱动文件,就回生成新的demo_module.ko


在上图的lib下面还会生成第二个demo_module.ko,path 为 lib\modules\3.10.49-g06cdc33-00225-g5696cef-dirty\extra\demo_module.ko

上图中的标记为1的ko文件,会被签名生成新的ko文件。

【7】使用新生成的ko文件即可成功动态的安装到系统当中



OK,搞定了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值