这几天我一直想知道它到底是如何工作的。我们可以使用 sysctl 设置内核运行时参数,echo boolen 1> /proc/sys/module/exactParameter
但/sys/modules/module/parameters/parameter
我们也可以设置值。
模块的参数/proc/sys/
仅与硬编译到内核相关吗?或者还有可加载内核模块的参数?
LKM 加载到运行内核后在/sys/modules/module/paraeter/params
.这是否意味着编译到内核中的模块没有参数?
两个目录有什么区别。
答案1
除了两者都是内核接口并且名称重合这一事实之外,两者之间/proc/sys
几乎没有什么关系。/sys
/proc/sys
是一个接口系统控制,它们是内核配置参数。读取或修改/proc/sys/foo/bar
相当于获取或设置sysctl foo.bar
。 Sysctl值是按语义类别组织的,它们与内核的结构没有内在联系。许多 sysctl 值是每个 Linux 系统上都存在的设置,无论编译的驱动程序或功能如何;有些与可选功能(例如某些网络协议)有关,但与特定的硬件设备无关。
/sys/module
顾名思义,它是内核模块的接口。每个目录对应一个内核模块。您可以foo
通过写入来读取(有时还可以修改)模块的参数/sys/module/foo/parameters/*
。
加载到内核中的组件从内核命令行读取其参数。这些参数无法在运行时设置(至少不能通过自动生成的接口,例如/sys/module
:组件可以为此公开自定义接口)。
答案2
论文《sysfs 文件系统帕特里克·莫切尔 (Patrick Mochel) 所著的“将让您更好地了解其目的和历史,/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
.