Linux内核如何创建sysfs?

5
我已开始研究Linux内核代码,为我的操作系统课程做准备。其中我对sys文件系统(sysfs)很感兴趣。我想知道sysfs是如何创建的,以及哪些Linux内核代码文件生成了这个文件系统?
我已在我的系统上安装了Linux内核,并开始通过代码进行调试。
我参考了这份文档来理解sysfs文件系统: [sysfs] : https://www.kernel.org/doc/Documentation/filesystems/sysfs.txt 但是这份文档只解释了目录结构、目录创建以及读写属性等内容。我更感兴趣的是内核在引导时如何创建这些目录。 我了解到以下方法负责在sysfs中创建目录。
   int sysfs_create_file(struct kobject *kobj, struct attribute *attr);

这个函数接受kboject结构和属性,并利用它们在sysfs中创建目录。
我了解到,在启动时,内核检测内存并在sys/devices/system/memory下创建目录。作为我的家庭作业的一部分,我计划更改此目录结构。所以,请您指出负责创建这些特定内存目录的文件和方法?
2个回答

5

您不应直接使用那种类型的函数。除非您正在触及内核核心,否则也应避免使用kobject

通常,sysfs属性与device结构相关联。因此,当您注册设备时,sysfs属性会被创建。

请查看device.h中的device结构,第689行。在结构末尾,您会发现以下字段:

const struct attribute_group **groups;

在调用 device_register() 之前,您需要创建自己的属性,将它们插入到属性组中,并将您的组分配给您的设备。

如果您跟踪 device_register() 函数,您就会看到它是如何创建关联的 sysfs 属性的。


4

sysfs的代码位于fs/sysfs/。内核将在sysfs_init函数中创建一个sysfs,并通过sysfs_mount函数挂载它。

您可能会发现Patrick Mochel的论文The sysfs Filesystem有用,因为它介绍了sysfs的工作原理和内核中sysfs的代码组织。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接