/ proc / sys与/ sys / modules / mod / parameter


10

我一直想知道最近几天它是如何工作的。我们可以使用sysctl设置内核运行时参数,echo boolen 1> /proc/sys/module/exactParameter/sys/modules/module/parameters/parameter也可以设置值。

是否/proc/sys/仅将与模块相关的参数仅硬编译到内核中?还是可以为可加载内核模块设置参数?

LKM加载到运行的内核中后,会在中显示其参数/sys/modules/module/paraeter/params。这是否意味着编译到内核的模块没有参数?

这两个目录之间有什么区别。

Answers:


5

还有无太大关系/proc/sys/sys其他比一个事实,即两者都是内核接口和名称的巧合。

/proc/syssysctl的接口,sysctl是内核配置参数。读取或修改/proc/sys/foo/bar等同于获取或设置foo.barsysctl。Sysctl值是按语义类别组织的,它们与内核的结构没有内在的联系。许多sysctl值是每个Linux系统上都存在的设置,而与编译哪些驱动程序或功能无关。有些与可选功能(例如某些网络协议)有关,但与特定的硬件设备无关。

/sys/module顾名思义,它是内核模块的接口。每个目录对应一个内核模块。您可以foo通过写入来读取(有时修改)模块的参数/sys/module/foo/parameters/*

内核中加载的组件从内核命令行读取其参数。这些参数不能在运行时设置(至少不能通过自动生成的界面(如/sys/module:组件可以为此公开一个自定义界面))进行设置。


因此,对于编译为内核的模块,我只能通过内核命令行添加参数(例如:/ proc / cmdline)。有没有其他方法可以在运行时更改它们?我明白吗?那么这些内核(配置)参数到底是什么?我认为它们是某些已编译到内核中的模块的可变参数
最早

@ast sysctl参数记录在Documentation/sysctl/*.txtLinux内核文档中。这是一组参数,无论将哪些功能和驱动程序编译到特定内核中,该参数都几乎适用。
吉尔(Gilles)“所以,别再邪恶了”

非常感谢,我试图充分理解这种关系,并花了3天的时间阅读很多东西以寻找答案。
AST

3

Patrick Mochel 的论文“ sysfs文件系统 ”将为您提供/sys比此框更适合的用途和历史的概述。引用摘要:

sysfs是Linux 2.6内核的一项功能,它允许内核代码通过内存文件系统将信息导出到用户进程。文件系统目录层次结构的组织是严格的,并且基于内核数据结构的内部组织。在文件系统中创建的文件是(大多数)ASCII文件,每个文件通常具有一个值。这些功能确保导出的信息准确且易于访问,这使sysfs成为2.6内核最直观和有用的功能之一。

在回答您的特定问题“可加载内核模块是否在中得到表示/sys吗?” 答案是“是的,如果模块的作者提供了界面”。这可以通过显示多少个已加载的模块在其中具有相应的条目来轻松演示。/sys/module

$ lsmod | awk '{print $1}' | sort > /tmp/lsmod
$ cd /sys/module ; ls > /tmp/sysmodule
$ comm -12 /tmp/lsmod /tmp/sysmodule
ahci
arc4
ath
ath9k
ath9k_common
ath9k_hw
bluetooth
bnep
cfg80211
…

这在我的系统上显示73个可加载模块中有73个在中有对应的条目/sys/module


我发现特别是有关/ sys / modules /的信息,总是存在每个LKM和module_param(name,type,perm)会影响目录参数的外观。但是我仍然对sysctl和/ proc / sys有疑问,我们可以在其中设置内核运行时参数。为什么不能使用/ sys / modules?在哪里设置内核编译模块的参数(/ sys / modules /或在/ proc / sys /中)?也许我将内核选项与模块参数混合在一起(我认为它们是相同的),所以使用sysctl我应该设置模块参数或某些内核功能
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.