目前我正在学习内核模块编程阅读“https://www.tldp.org/LDP/lkmpg/2.6/lkmpg.pdf”,在那本书中有一章标题为“/proc文件系统”,我已经学习了如何将模块用作设备驱动程序,但我无法理解创建“/proc/file_name”的重要性我知道 /proc 目录中的内核维护有关进程的信息,我需要了解内核模块创建“/proc/file_name”的重要性。
答案1
第 5.1 章的开头谈到了/proc
文件系统:
最初设计是为了允许轻松访问有关进程的信息(因此得名),现在它被内核的每个部分使用,其中有一些有趣的报告,[...]
你不有在文件系统中创建文件/proc
,但如果您想要或需要有一种简单的方法来报告有关模块状态的统计信息或其他信息,/proc
文件系统是一种方法。由于/proc
文件系统的开发方式,它可能有点混乱。/proc
您可能希望为您的模块创建一个子目录,而不是在文件系统的根目录下创建多个内容,例如/proc/driver
,以尽量减少与主内核、其他第三方模块或未来开发发生冲突的机会。
请注意,在撰写该书时,/sys
文件系统也被引入为一个更系统地安排的地方(因此对于集成用户空间工具更友好),用于内核模块可能具有的任何可调设置。不幸的是,原本应该介绍的第 6 章只是TODO: Write a chapter about sysfs
该 PDF 中的占位符。
(历史记录:在/sys
文件系统存在之前,/proc
文件系统被用作运行时可调整设置的地方,通常可识别为可写文件。其中一些可能尚未完全迁移到文件系统/sys
,甚至不会在所有这些都是为了保持向后兼容性。但对于任何现代开发,最好放入任何可调参数/sys
而不是/proc
。)
在现代内核中,还有debugfs
, 可以安装到/sys/kernel/debug
,如果您的内核模块需要某种方式来输出一些调试信息,那么这可能是一个好地方。它可能是输出更详细/敏感的调试信息的好地方,因为它debugfs
是专为系统管理员访问而设计的。它也是完全可选的:在生产系统中,debugfs
除非需要进行深入的故障排除,否则可以简单地将其卸载。
因此,简而言之:如果您的模块需要提供一种在运行时调整某些设置的方法,/sys
那么文件系统是一个好地方。要调试现代内核中的信息,请使用debugfs
.对于非root用户可以看到的统计数据和类似的东西,/proc
可以使用。