Cómo crear un sistema de archivos CRAMFS + YAFFS2 Recomendaciones relacionadas
1. Introducción al sistema de archivos
A medida que el precio de las CPU de 32 bits continúa disminuyendo, la capacidad de los dispositivos de almacenamiento en chip. Se está volviendo cada vez más grande. Cada vez más sistemas integrados están comenzando a aplicar varios sistemas operativos integrados. Generalmente en el campo integrado, siempre que se aplique al sistema operativo, inevitablemente se requieren uno o incluso varios sistemas de archivos. El llamado sistema de archivos es en realidad la organización y catalogación de cualquier archivo en un dispositivo de almacenamiento específico. Dichos dispositivos pueden ser varios dispositivos RAM, NAND FLASH, NOR FLASH y otros dispositivos DOC, o varias tarjetas de memoria basadas en NAND FLASH. [1].Actualmente, existen muchos sistemas de archivos disponibles para diferentes dispositivos y aplicaciones, como EXT2, TEMPFS, RAMDISK, CRAMFS, JFFS1/2, YAFFS1/2, XFS, etc. Además de esto, los proveedores ofrecen muchos sistemas de archivos comerciales.
La elección del sistema de archivos depende de las necesidades de la aplicación específica. En términos generales, las primeras consideraciones son la necesidad de confiabilidad, robustez y mejora. Para aplicaciones como el control industrial que no requieren actualizaciones frecuentes de los programas de control, un sistema de archivos de solo lectura como CARAMFS es suficiente. Otro beneficio que aporta es que la tasa de compresión de CRAMFS llega al 50%, lo que nos puede ahorrar un. mucho espacio de almacenamiento. Sin embargo, si se trata de aplicaciones como la recopilación de datos que necesitan guardar datos, es difícil que un sistema de archivos de solo lectura satisfaga las necesidades del sistema de la aplicación. Podemos elegir un sistema de archivos de lectura y escritura como JFFS o YAFFS. Pero en aplicaciones prácticas, debería haber más factores a considerar.
2.1 Selección del sistema de archivos
En la aplicación involucrada en este artículo, no es necesario cambiar el sistema de archivos raíz con frecuencia, pero sí implica cierto acceso a los datos. Teniendo en cuenta que el dispositivo de almacenamiento es NAND FLASH, podemos usar CRAMFS con una tasa de compresión más alta al seleccionar el formato del sistema de archivos raíz y montar el sistema de archivos de lectura y escritura YAFFS2 en el sistema de archivos raíz.
YAFFS2 (Yet Another nandFlash FileSytem2) es un sistema de archivos especialmente diseñado para dispositivos NAND. YAFFS2 es similar al sistema de archivos JFFS/JFFS2, pero a diferencia de YAFFS2, el sistema de archivos JFFSS1/2 fue diseñado originalmente para aplicaciones NOR FLASH. A diferencia de YAFFS2, el sistema de archivos JFFSS1/2 fue diseñado originalmente para aplicaciones NOR FLASH. YAFFS2 adopta una tecnología de suavizado y recuperación de fragmentación mejorada para NAND FLASH, que mejora en gran medida la velocidad de lectura y escritura, extiende la vida útil de los dispositivos de almacenamiento [2] y puede admitir mejor chips NAND FLASH de gran capacidad. En términos de confiabilidad en cortes de energía, YAFFS2 tiene ventajas más obvias [3].
2.2 Establecimiento del sistema de archivos raíz
Después de iniciar el kernel de Linux, saltará a la dirección del sistema de archivos raíz de acuerdo con las instrucciones del parámetro linux_cmd_line para completar la inicialización. y montaje del sistema de archivos. El sistema de archivos raíz se puede crear con la ayuda de varios kits de herramientas de desarrollo o puede crearlo usted mismo. A continuación se explica cómo crear un sistema de archivos raíz básico con la ayuda de un kit de desarrollo. Busybox es un proyecto iniciado por Bruce Perens para ayudar a las distribuciones Debian a crear soportes de disco. Debido a que Busybox es pequeño pero potente, se usa ampliamente en sistemas integrados. Descargue la versión estable de Busybox (www.busybox.net), descomprímala y genere menuconfig directamente en el menú de configuración de Busybox. La interfaz es similar a la del kernel. Seleccione el comando requerido en Applets, luego salga y guarde, ejecute make, make install. Se crea un directorio _install en el directorio Busybox que contiene el conjunto de herramientas de comandos que se configurarán. Copie este directorio a su directorio de trabajo y cámbiele el nombre a rootfs.
Este directorio es un prototipo del sistema de archivos raíz que creará, pero aún no funciona correctamente y necesita más mejoras.
En rootfs/, primero cree los archivos de dispositivo necesarios en /rootfs/dev. Para la creación de dispositivos, puede consultar los estándares de jerarquía del sistema de archivos para determinar qué archivos de dispositivo son necesarios (/fhs/). El siguiente paso es completar tres archivos importantes en el directorio /rootfs/etc: inittab, fstab, init.d/rcS (o rc.d/rc.sysinit, dependiendo de inittab). El ejemplo de referencia es el siguiente:
archivo inittab
#Inicialización del sistema.
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::restart:/sbin/init
::shutdown:/bin/umount -a -r
: :shutdown:/sbin/swapoff -a
archivo Fstab
ninguno /proc valor predeterminado de proc 0 0
tmpfs /temp valor predeterminado de tmfs 0 0
p>fstab especifica el punto de montaje del dispositivo. (Para obtener más información sobre el formato y los detalles del archivo fstab, consulte
/nfs-howto/ ) para probar que el sistema de archivos está funcionando, pero en última instancia aún necesitamos grabar ese sistema de archivos en la placa de destino.
Hay dos formas de aplicar el sistema de archivos YAFFS2, una es la combinación CRAMFS+YAFFS2 y la otra es el formato puro del sistema de archivos YAFFS2. Dado que en mi aplicación, el kernel y el sistema de archivos raíz no necesitan actualizarse con frecuencia, desde la perspectiva de ahorrar espacio de almacenamiento y proteger el sistema de archivos raíz, elegimos un sistema de archivos de solo lectura con una tasa de compresión alta, como CRAMFS, y La aplicación, el espacio de usuario utiliza el formato del sistema de archivos YAFFS2.
Para CRAMFS, puede usar directamente mkcramfs /rootfs ~/root.img para crear una imagen de cramfs, donde /rootfs es el directorio del sistema de archivos raíz creado previamente y ~/root.img especifica el directorio donde la imagen se guarda. Debido a que el sistema de archivos YAFFS2 está diseñado para dispositivos nand, en mi aplicación, el sistema de archivos se inicia en NANDFLASH, por lo que para usar el sistema de archivos YAFFS2, primero debe agregar el controlador del dispositivo NAND [5] al kernel y modificar arch\arm. \mach-s3c2410\devs.c, agregue la partición flash nand. En términos generales, se necesitan tres particiones: gestor de arranque, kernel y raíz, pero algunas agregan una partición de parámetros para guardar los parámetros del kernel y una partición de usuario para actuar como espacio de usuario, pero no se pueden usar.
Descarga el código fuente de YAFFS2 (GPL) en www.aleph.co.uk, descomprímelo y ejecútalo en el directorio YAFFS2
patch-ker.sh~/Linux2.6.14 .2
~/Linux2.6.14.2 es la ruta al kernel, y el kernel del autor es 2.6. Una vez completado el parche, se creará el directorio YAFFS2 en el directorio fs del kernel. entonces el kernel ya es compatible con YAFFS2.
Dispositivo de tecnología de memoria (MTD)->
Dispositivo de tecnología de memoria (MTD)->
Dispositivo de tecnología de memoria (MTD)->
Verifique MTD Partitioning Surpport para asegurarse de que la información de nuestra partición sea válida. De esta forma, nuestra información de partición es válida.
En
Sistema de archivos->
Sistema de archivos varios->, configure YAFFS2 de la siguiente manera:
<> Compatibilidad con el sistema de archivos EFS (solo lectura) ( Experimental )
<*>Compatibilidad con el sistema de archivos YAFFS2
- dispositivo de 512 bytes/página
[*]Permita que Yaffs realice su propio ECC
[*]Utiliza el mismo orden de bytes ecc que nand_ecc de Steven Hill. c
- 2048 bytes (o más)/dispositivo de página
[*]Seleccionar automáticamente el formato yaffs2
[*]Deshabilitar la carga diferida
[*]Desactivar tnodes anchos
[*]Desactivar la comprobación de borrado de fragmentos de depuración
[*]Caché de nombres cortos en RAM
& #8482 lt;Compatible con Jounalling Flash File System (JFFS)
Guarde la configuración, salga y ejecute make. Al final de make, tendrá una imagen del kernel capaz de montar el sistema de archivos yaffs2.
En el archivo fuente del cargador de arranque, la memoria flash nand está dividida en varias particiones, y las particiones en el archivo devs.c mencionado anteriormente también deben coincidir con las particiones del cargador de arranque, porque el cargador de arranque Las direcciones del Se especifican el kernel y el sistema de archivos, y el gestor de arranque final buscará comandos en las direcciones correspondientes. En nuestra aplicación, la memoria flash se divide en gestor de arranque, parámetro, kernel, raíz y usuario. root se utiliza para montar el sistema de archivos raíz CRAMFS y la partición de usuario monta el sistema de archivos YAFFS2.
En el directorio utils del archivo fuente YAFFS2, ejecute make para generar el programa de utilidad mkyaffs2image y ejecute
. /mkyaffs2image (directorio para crear YAFFS2) (imagen de destino)
Genera el sistema de archivos YAFFS2, pero dado que el sistema de archivos raíz está precedido por el formato CRAMFS, YAFFS2 se puede cargar como un módulo, lo cual es más conveniente y flexible . La carga de módulos también se puede definir en el script que se proporciona a continuación.
El último paso es dejar que el kernel cargue el sistema de archivos después del arranque. Hay dos formas de montar un sistema de archivos: manual y automática. En la práctica, por supuesto, querrá que el sistema monte automáticamente el sistema de archivos sin intervención manual. En Debian, el script de inicio es /etc/init.d/rcS y en Rad Hat es /etc/rc.d/rc.sysinit. Estos incluyen montar el sistema de archivos, configurar la hora, abrir la partición de intercambio, obtener el nombre de host, etc. Consulte los archivos Inittab e init.d/rcS proporcionados anteriormente para comprender cómo se ejecuta el proceso Init del sistema. Aquí hay un comentario más detallado que en el archivo rcS anterior.
#! /bin/sh //SHELL proporcionado por ocupadobox
PATH=/sbin:/bin:/usr/sbin:/usr/bin/Establecer ruta del sistema
runlevel=S// runlevel
prevlevel=N
umask 022 //El permiso de acceso predeterminado es 022. /el acceso predeterminado es 022
exportar RUTA nivel de ejecución nivel previo
/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3 /
//cramfs se monta bajo la cuarta partición (es decir, la partición raíz) como sistema de archivos raíz.
/sbin/insmod -f /lib/yaffs2.ko //cargar módulo yaffs2
/sbin/mount -t yaffs2 /dev/mtdblock/4 /usr //yaffs2 como /usr está montado en la quinta partición
/sbin/ mount -t proc none /proc //el comando de montaje lo proporciona Busybox
/sbin/mount -t tmpfs none /root //montar tmpfs en el directorio especificado, igual que a continuación
/sbin/mount -t tmpfs none /tmp
/sbin/mount -t tmpfs none /var
/sbin/mkdir -p /var/lib // Crear directorio
/sbin/mkdir -p /var/run
/sbin/mkdir -p /var /log
/etc/rc .d/init.d/leds start //primero intento con el programa de usuario leds
/sbin/ifconfig lo 127.0.0.1 //Especifique la dirección IP del dispositivo lo como 127.0.0.1
#/sbin/ifconfig eth0 192.168.0.2
/sbin/hostname -F /etc/sysconfig/HOSTNAME //Especifique la ruta al archivo de nombre de host.
Grabe el sistema de archivos en la partición correspondiente de la placa de destino, inícielo y luego ejecútelo. En este punto, la placa de destino puede leer y escribir archivos a través de /usr, y la placa de destino ha completado el soporte para yaffs2.
3. Conclusión
YAFFS2 tiene las ventajas de una protección confiable contra apagado, lectura y escritura eficientes y protección de dispositivos de almacenamiento nand, lo que lo hace cada vez más popular en sistemas integrados. solicitud. En la aplicación de este artículo, YAFFS2 muestra un buen rendimiento en Linux.