第三篇 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,搞定了

你可能感兴趣的:(Android,Driver)