Linux内核是个很庞大的东西,要全部了解清楚是很难的,所以我们所做的内核上的开发也是为驱动做一些基本的准备。
其中Linux的系统的构成、内核的构成还有内核的目录结构在这里就不去做过多的解释,有兴趣的可以自己查找相关的资料。
一、内核模块的特点
a) 不会被编译进内核之中,这样的话可以尽可能的控制Linux内核的大小。
b) 在内核运行期间,可以动态的进行加载或卸载。
二、相关函数的介绍
a) module_init宏表示在加载模块的时候,自动调用这个宏所指示的函数。
b) module_exit宏表示在卸载模块的时候,自动调用这个宏所指示的函数。
例如:
代码中:
module_init(funa);
module_exit(funb);
当加载该模块时,自动调用funa函数,同理当卸载该模块时,自动调用funb函数。
三、模块的相关命令
a) 加载模块:insmod modprobe
b) 卸载模块:rmmod
c) 查看模块:lsmod
insmod和modprobe的区别:
当a模块与b模块有依赖关系时,假设安装b模块需先安装a模块。
如果用insmod命令那么需要先insmod a.ko 然后再insmod b.ko。
如果用modprobe命令那么直接可以modprobeb.ko。
其中/lib/modules/“内核版本号”/modules.dep中记录了模块之间的依赖关系。
rmmod命令:只需要调用模块名即可,比如安装的时候是inmod a.ko 安装完毕后该模块存在于内核中的名字为a,那么卸载该模块只需要rmmod a即可。