linux下的驱动程序安装有模块方式与直接编译进内核。
1.模块方式
linux内核包含的组件很多,把所有的组件都编译进内核文件(zImage或者bzImage)会导致内核过大。使用内核模块可以让内核文件(zImage或者bzImage)本身并不包含某组
件,而是在该组件需要被使用的时候,动态的添加到正在运行的内核。
1.1内核模块的程序结构:
模块加载函数(必需):安装模块时被系统自动调用的函数,通过module_init宏来指定。
模块卸载函数(必需):卸载模块时被系统自动调用的函数,通过module_exit宏来指定。
1.2模块的编译:
通常使用makefile,编译后生成.ko文件。
1.3安装与卸载
加载模块:insmod(insmod *.ko)
卸载模块:rmmod(rmmod *)
查看模块:lsmod
加载模块:modprobe(modprobe *)——可以根据/lib/modules/<$version>/modules.dep文件查看依赖项,并把它们加载到内核。
2.直接编译进内核
2.1修改Kconfig文件
例如加入helloworld模块:
在配置菜单中会出现helloworld选项:
如果选中helloworld,则在.config文件中会出现如下字符串:
2.2修改Makefile文件
obj-$()中的内容要与.config中的字符串对应!