Quiero crear mi propio sistema de archivos, ¿dónde debería comenzar?

La mejor manera de aprender es hacer una copia de un sistema de archivos existente, ver cómo funciona y cambiar sus nombres de manera consistente, para que pueda compilarse y ejecutarse independientemente del sistema de archivos existente, y luego comenzar a experimentar con las diferentes interfaces ( sumando y restando los punteros de función, por ejemplo).

Primero comience con un sistema de archivos de solo lectura: openprompfs.

Identifique el directorio en el árbol fuente del núcleo: fs y para openpromfs, solo hay un archivo: inode.c.

En segundo lugar, implemente todas las funciones que desea que haga el sistema de archivos a nivel de archivos (aquí solo hay 4 open (), read (), llseek () y close (), y porque no puede “escribir en una rom”, entonces no hay interfaz write ()):

static const struct file_operations openpromfs_prop_ops = {

.open = property_open,

.read = seq_read,

.llseek = seq_lseek,

.release = seq_release,

};

A continuación están todas las operaciones a nivel de directorio:

static const struct file_operations openprom_operations = {

.read = generic_read_dir,

.iterate = openpromfs_readdir,

.llseek = generic_file_llseek,

};

Y luego tienes que implementar la función de búsqueda de inodo:

static const struct inode_operations openprom_inode_operations = {

.lookup = openpromfs_lookup,

};

Y eso es esencialmente todo lo básico que necesita: todos los sistemas de archivos de Linux tienen estos componentes.

De las estructuras anteriores (todos sus campos son punteros de función) podemos usar una pieza común del sistema de archivos: codificación agnóstica (esencialmente ubicada en el directorio fs) para usar en CUALQUIER sistema de archivos:

Y en el directorio fs, los archivos importantes que necesitará comprender / usar (pero no modificar) son:

super.c

namei.c

archivos.c

pipe.c

inode.c

readdir.c

Otros archivos como ioctl.c, select.c son para control de hardware.

Y para seq_file.c es para uso de procfs.

Aquí hay un buen diagrama que ilustra su relación:

Este sistema de archivos de solo lectura es realmente fácil de aprender, ¿por qué? Porque se necesita un bloqueo mínimo. Deberá implementar bloqueos cada vez que varias CPU puedan estar escribiendo en el sistema de archivos al mismo tiempo. Pero cuando es de solo lectura, el acceso / lectura concurrente por múltiples CPU siempre es posible sin preocuparse por la corrupción de datos.

Y este bloqueo puede ser muy complejo, y es la razón por la que la corrupción del sistema de archivos le sucedió a tantos sistemas de archivos del núcleo, incluso después de muchos años de implementación (por ejemplo, ext3, ext4, los dos sistemas de archivos principales de Linux).

Para obtener una lista resumida de los requisitos del sistema de archivos, puede buscar:

¿Cómo funciona un sistema de archivos de computadora?

Requisitos del sistema de archivos de Google:

http://pages.cs.wisc.edu/~thanhd…

http://www.cs.cornell.edu/course…

Por lo que puedo entender, desea construir un pequeño sistema de archivos para comprender la funcionalidad de fs.

Como principiante, sugeriría escribir algunos módulos básicos del núcleo, luego comenzar algunos fundamentos sólidos del sistema de archivos.

Comprenda el diseño del sistema de archivos FAT, luego intente comprender el sistema de archivos ext2, ext3, etc.

Este es un documento muy básico y bueno con respecto a la implementación de un sistema de archivos

http://pages.cs.wisc.edu/~remzi/

Si tiene una buena comprensión de cómo escribir módulos básicos de kernel y cargar / descargar en un kernel de Linux, definitivamente el siguiente enlace lo ayudará.

https://sysplay.in/blog/linux-de

Una vez que haya hecho algunos API básicos de escritura, para fs, elija un sistema de archivos de código abierto, lea el documento técnico y comprenda que comienza a contribuir.

Hackeo feliz del kernel de Linux 🙂

Gracias por A2A. En primer lugar, debe estar abierto a hacer esta pregunta. No veo ninguna razón para ocultar su identidad por tan grandioso pensamiento en su mente.

Puede pasar por el papel dedicado al soporte de sistema de archivos apilable. Creo que el último sistema ubuntu viene con soporte de sistema de archivos apilable. puede usar wrapfs para comenzar a sumergirse en el espacio del sistema de archivos.

Proyecto de código abierto basado en Wrapfs:

Replicador de sistema de archivos

Conjunto de códigos:

NEKTech-Labs / wrapfs-nektech

Kernel de Linux compatible:

NEKTech-Labs / wrapfs-kernel-linux-3.17

Por favor, lea la excelente respuesta de Peter Teoh. Si desea comprender los sistemas de archivos en Windows, es posible que desee aprender esto Dentro del sistema de archivos de Windows NT: Helen Custer: 9781556156601: Amazon.com: Libros (parece ser muy económico) es muy antiguo pero sigue siendo un buen tutorial. Lo leí a fines de los 80 y probablemente todavía lo tenga en algún lado, pero no lo recuerdo lo suficientemente bien como para darle una opinión u opinión. Puede obtener uno por <$ 5, usado (¡incluido el envío!).