如果查询太简单,我深表歉意。但我想问一下linux系统模块和linux内核模块之间有区别吗?如果有差异,那么两者都位于哪里。 /lib/module/$(uname -r) 显示内核模块,/sys/module/ 显示系统模块吗
答案1
/lib/module/$(uname -r)
是磁盘上的一个目录。它包含文件,其中大部分 ( *.ko
) 是模块文件:包含内核模块代码的文件。原则上,此目录(及其子目录)中的文件包含可以加载到正在运行的内核中的模块。
/sys/module
是虚拟文件系统上公开内核内部结构的目录。访问该目录中的文件会调用内核中的一个函数,该函数仅查看一些内部内核数据结构,而不会进一步进入磁盘层。中的每个条目/sys/module
对应于正在运行的内核的一个组件,以及加载到内存中并处于活动状态的代码。这包括所有加载的模块,还包括可以作为模块加载但在编译内核时直接构建到内核中的组件。
包含/lib/module/$(uname -r)
与其中的条目不对应的文件/sys/module
是很常见的:它们是计算机中没有的某些硬件(或由内核管理的其他东西)的驱动程序。当组件构建到内核中时,会出现/sys/module
没有相应文件的条目(/lib/module/$(uname -r)
这是如何判断),或者模块是否是从位于其他位置的文件(或现在已删除)手动加载的。
如果您的系统将其根文件系统保存在其他地方(例如通过网络或在 RAM 磁盘中),则很少会在磁盘以外的其他位置上。
答案2
该目录/sys/module/
按名称将系统中的所有模块显示为包含系统所需的各种信息的文件夹。该目录/lib/module/$(uname -r)
包含内核模块文件,根据其功能存储在文件夹层次结构中。
例如,软件看门狗内核模块文件将位于/lib/module/$(uname -r)/kernel/drivers/watchdog/softdog.ko
.另一方面,该模块有自己的“softdog”(模块名称)目录,其中包含/sys/module/
系统在操作/插入该模块时使用的信息,但不是模块本身的文件。
您可以通过名称操作模块modprobe [args] <module-name> [module-params]
.ko
您可以使用 通过文件路径来操作模块insmod [args] <path> [module-params]
。
请注意,操作内核模块需要 root 权限。