模块打包方式和加载时机

 

打包:

模块无论是编译进内核还是不编译进内核,一般都是打包在firmware文件里。当然可以后面手动通过usbnet等方式把没编译进内核的模块手动放到内核里,但主要是调试这么用,产品里很少这么用。

对于编译进内核的模块,是编译进vmlinux.bin里的。对于没有编译进内核的模块,是一个单独的.ko文件。

模块的加载:

对于编译进内核的模块:

在kernel启动过程中函数start_kernel里,调用rest_init,在rest_init里创建kernel_init内核线程,

在内核线程kernel_init里,do_pre_smp_initcalls()负责调用early_initcall的函数,do_basic_setup()负责调用所有从pure_initcall到late_initcall_sync的所有函数。

大部分模块加载都是在do_basic_setup函数加载的。

对于没有编译进内核的模块,是kernel启动之后使用insmod加载的。

一种是在rcS等脚本里添加命令,启动之后马上加载;

一种是在需要的时候在代码里加载。

你可能感兴趣的:(脚本,REST,basic,产品)