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 ()):
- Todavía tengo 18 años y sigo estudiando finanzas, pero quiero aprender habilidades que me permitan administrar un fondo de cobertura, ¿qué me aconsejas que aprenda?
- Quiero convertirme en vlogger pero no tengo ningún conocimiento en la realización y edición de videos. ¿Como empiezo?
- Me gustaría jugar con una raya de color DIY en mi cabello; ¿dónde empiezo?
- A mi madre no le gusta que salga con un hombre de otra raza. ¿Puedo decir que ella es racista?
- Soy una lesbiana asiática. Quiero ser quien soy pero tengo miedo de que me discriminen. ¿Debería esconderme?
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…