内核模块

  • modules.order文件

    内核编译完成之后会在内核根目录下生成modules.order文件,记录了各个ko文件的路径。

  • modules.builtin文件

    modules.builtin文件记录了原来可以编译成模块的配置,现在编译进了内核。专门给外部用户态工具(如 modprobedepmod)看的一份“已内置模块花名册”。它保证了即使你把驱动编进内核,用户态的热插拔和加载机制依然能“假装”找到了这个模块,从而顺畅执行后续流程。

  • ko文件生成和复制流程

    • 内核配置文件将一个配置设置成模块

    • 在驱动文件对应的目录生成ko文件

      比如:

      /kernel/drivers/media/i2c/gc2145.c
      /kernel/drivers/media/i2c/gc2145.ko
      

      如果配置文件的配置是y,那么生成的就是.o文件用于链接

    • sysdrv/Makefile中ko文件复制

      /sysdrv/out
      	↓
      /output/out/sysdrv_out/kernel_drv_ko
      	↓
      /output/out/oem/usr/ko
      	↓
      /oem/usr/ko/     ← 最终部署位置
      
    • insmod_ko.sh脚本

      `drv_ko/insmod_ko.sh`
      	↓
      `drv_ko/out/`
      	↓
      `output/out/sysdrv_out/kernel_drv_ko/`
      	↓
      `oem/usr/ko/` 
      	↓
      板子 `/oem/usr/ko/insmod_ko.sh`
      

      执行时机:

      开机 → S20linkmount (挂载 oem 到 /oem)
           → S21appinit → RkLunch.sh
               → cd /oem/usr/ko && sh insmod_ko.sh