linux linux-kernel operating-system kernel sysfs

¿Cómo crea Linux kernel sysfs?



linux-kernel operating-system (2)

Empecé a buscar el código del kernel de Linux para mi curso de SO. En eso estoy interesado en el sistema de archivos sys (sysfs). ¿Me interesa saber cuándo y cómo se crea sysfs? ¿Qué archivos en el código del kernel de Linux generan este sistema de archivos?

He configurado el núcleo de Linux en mi sistema y he comenzado a depurar el código.

Me he referido a este documento para comprender el sistema de archivos sysfs: [sysfs]: https://www.kernel.org/doc/Documentation/filesystems/sysfs.txt

Pero este documento explica solo sobre la estructura del directorio, la creación de directorios y los atributos de lectura / escritura. Estoy más interesado en cómo kernel crea estos directorios durante el arranque. Entendí que el siguiente método es responsable de la creación del directorio en sysfs.

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

Esta función acepta la estructura de kboject, atributos y usando estos crea directorio en sysfs.

Entendí que en el momento del arranque, kernel detecta la memoria y crea los directorios en sys / devices / system / memory. Estoy planeando cambiar esta estructura de directorios como parte de mi tarea. Entonces, ¿podría indicarme los archivos y métodos que son responsables de la creación de estos directorios de memoria específicos?


El código para sysfs reside en fs/sysfs/ . Kernel creará un sysfs en sysfs_init y lo montará mediante la función sysfs_mount .

Puede encontrar útil el documento El sistema de archivos sysfs de Patrick Mochel, ya que presenta cómo funciona sysfs y la organización de código de sysfs en el kernel.


No deberías usar ese tipo de funciones directamente. También debe evitar el uso de kobject (a menos que esté tocando el núcleo del kernel).

Por lo general, el atributo sysfs está asociado a la estructura del device . Entonces, cuando registra un dispositivo, se crean los atributos sysfs.

Eche un vistazo a la estructura del device en device.h línea 689. Al final de la estructura encontrará el siguiente campo

const struct attribute_group **groups;

device_register() crear su propio atributo, insertarlos en un grupo de atributos y asignarlos a su dispositivo antes de invocar device_register()

Si sigue la función device_register() , verá lo que hace para crear el atributo sysfs asociado