![当模块静态编译到内核中时,modinfo 不起作用——解决方法?](https://linux22.com/image/47861/%E5%BD%93%E6%A8%A1%E5%9D%97%E9%9D%99%E6%80%81%E7%BC%96%E8%AF%91%E5%88%B0%E5%86%85%E6%A0%B8%E4%B8%AD%E6%97%B6%EF%BC%8Cmodinfo%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%E2%80%94%E2%80%94%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95%EF%BC%9F.png)
modinfo
在调整模块参数时(至少发现哪些选项可用)是相当有用的工具,例如:
$ modinfo dummy
filename: /lib/modules/2.6.32-openvz-042stab102.9-amd64/kernel/drivers/net/dummy.ko
alias: rtnl-link-dummy
license: GPL
srcversion: B2C3F349E2A5175104E1B3E
depends:
vermagic: 2.6.32-openvz-042stab102.9-amd64 SMP mod_unload modversions
parm: numdummies:Number of dummy pseudo devices (int)
但是,毫不奇怪,它仅在模块未静态编译到内核中时才有效。如果您已编译模块并且无法访问网络,有什么解决方法可以获取此信息或类似信息?
答案1
modinfo 中的大部分或全部信息要么只是琐事(作者、许可证),要么不适用于内置模块(魔法、依赖项、文件名等)。
唯一具有任何可想象的实用价值的是“parm”,但同样,它不能以相同的方式应用于内置函数,因为您不加载它们。无论如何,绝大多数模块都没有这个。可以从用户空间直接调整的内核设施通常在/sys
.
你似乎在问什么(“无法访问网络”——即,你不能用谷歌搜索它)是关于文档。内核不“动态地”反刍这个的原因是因为它不是动态的,它是静态的,并且它已经存在。源代码树带有一个Documentation
目录,对于特定的许可证、作者等,这些静态信息也位于源代码树中。您可以下载并存储其本地离线副本。
例如,一些内置模块的参数可以在启动时在内核命令行上设置。这些都列在Documentation/kernel-parameters.txt
(注意文档树是在线复制的,所以你可以看到这里)。
我意识到这并不完全是您所希望的,但您真正所希望的并不是很有用。同样,大多数信息都是微不足道的(与软件的使用无关);即使模块在未编译时所给出的名称本质上也是无关紧要的。如果编译为可加载模块,提供对 HFS 文件系统访问的设施会被调用吗hfs
?事实上有不与此相关或有意义的信息。通过类比,您所要求的有点像希望能够查询正在运行的应用程序以找出各种内部函数调用的名称和签名 - 就与此相关的某些内容可能相关或有意义而言,它应有机地纳入其中文档。