Linux内核如何创buildsysfs?

我已经开始研究我的操作系统课程的Linux内核代码。 在这我对sys文件系统(sysfs)感兴趣。 我有兴趣找出何时以及如何创buildsysfs? linux内核代码中的哪些文件生成这个文件系统?

我在我的系统上安装了linux内核,并已经开始通过代码进行debugging。

我已经提到了这个文件来理解sysfs文件系统:[sysfs]: https : //www.kernel.org/doc/Documentation/filesystems/sysfs.txt

但是这个文档只解释目录结构,目录的创build和读/写属性。 我更感兴趣的是内核如何在启动时创build这些目录。 我明白,以下方法负责在sysfs中创build目录。

int sysfs_create_file(struct kobject *kobj, struct attribute *attr); 

这个函数接受kboject的结构,属性并使用它们在sysfs中创build目录。

我知道,在启动时,内核检测到内存,并在sys / devices / system / memory下创build目录。 我打算改变这个目录结构作为我的作业的一部分。 那么,请你指点一下负责创build这个特定内存目录的文件和方法吗?

你不应该直接使用这种功能。 你也应该避免使用kobject (除非你正在触摸内核核心)。

通常,sysfs属性与device结构关联。 所以,当你注册一个设备时,会创建sysfs属性。

查看device.h 689行的device结构。在结构的末尾,您会看到以下字段

 const struct attribute_group **groups; 

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

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

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

您可能会发现由Patrick Mochel撰写的文章sysfs文件系统很有用,因为它介绍了sysfs如何在内核中工作编码 sysfs的组织