内核模块的加载与卸载

2019-04-14 08:52发布

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即可。