linux内核中模块间相互依赖的自动连接程序:modprobe外部程序和request_module()函数的分析

60 篇文章 12 订阅
36 篇文章 1 订阅

以下内容总结自《understanding the linux kernel》

在Linux系统中一个包括但不限于驱动模块,可能需要一个或者多个其他的模块,这些模块又可能需要其他的模块。为了内核能够自动链接模块,内核需要创建一个内核线程来执行modprobe程序,该线程要考虑由于模块依赖所引起的所有可能因素。

modprobe外部程序和insmod类似,链接在命令行中指定的一个模块。然而,modprobe还可以递归的链接命令行中模块所使用所有模块。实际上,modprobe只是检查模块的依赖关系,每个模块的实际链接工作是通过创建一个进程并执行insmod命令来实现的。

modprobe外部程序的原理:在系统启动时会自动执行一个depmod的外部命令,该程序查找为正在运行的内核所编译的所有模块,这些编译的模块一般存放在/lib/modules的目录下。然后depmod这个程序就可以把所有的模块之间的依赖关系写进一个名为modules.dep文件中。这样modprobe外部程序就可以读取modules.dep文件的信息内容并将其和/proc/modules文件产生的链接模块链表进行比较。

有的时候,内核可以通过调用request_module()函数来试图自动链接一个模块。这个函数将需要链接的模块名作为参数,并电泳kernel_thread()来创建一个新的内核线程并等待,直到这个内核线程结束为止。而此内核线程又接收待链接的模块名作为参数,并调用exeve()系统调用函数来执行modprobe外部程序,并向modprobe外部程序传递参数名。modprobe程序链接所请求的模块以及这个模块所依赖的其它模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值