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 下创建目录。我打算在我的作业中更改这个目录结构。那么,能否请您指出负责创建此特定内存目录的文件和方法?

4

2 回答 2

5

你不应该直接使用那种功能。您还应该避免使用kobject(除非您正在接触内核)。

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

查看device.hdevice第 689 行中的结构。在结构的末尾,您将找到以下字段

const struct attribute_group **groups;

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

如果您遵循该device_register()函数,您将看到它如何创建关联的 sysfs 属性

于 2013-10-23T00:06:35.513 回答
4

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

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

于 2015-07-06T08:05:34.023 回答