Red de conocimiento informático - Material del sitio web - Cómo crear un sistema de archivos Linux

Cómo crear un sistema de archivos Linux

A. ¿Qué es un sistema de archivos?

Un sistema de archivos es una estructura de directorio contenida en un disco (incluidos discos ópticos, disquetes, discos flash y otros dispositivos de almacenamiento) o particiones que un dispositivo de disco de aplicación puede contener; uno o varios sistemas de archivos; si desea acceder a un sistema de archivos, lo primero que debe hacer es montar el sistema de archivos; para poder montar el sistema de archivos, debe especificar un punto de montaje.

El principal sistema de archivos integrado

En Linux, rootfs es esencial. Implementa principalmente el disco RAM de la PC y el montaje directo del HD (disco duro, sistema de archivos raíz). ; embebido generalmente no arranca desde HD, sino desde Flash. La forma más sencilla es cargar rootfs en la RAM de RAMDisk. El método más simple es cargar rootfs en la RAM como un disco RAM, un método un poco más complejo es leer Cramfs directamente desde Flash y un método más complejo es particionar en Flash y construir un sistema de archivos como JFFS2.

RAMDisk comprime los rootfs que crea, los escribe en la memoria flash, lo carga en la RAM en el momento del arranque mediante el gestor de arranque, luego lo descomprime y lo monta en /.

RAMDisk es un método que utiliza espacio de memoria para simular particiones del disco duro. RAMDisk normalmente utiliza un método para comprimir el sistema de archivos del disco para almacenarlo en la memoria flash, luego descomprimirlo en SDRAM y montar el rootfs cuando se inicializa el sistema. En el sistema Linux, hay dos tipos de disco ram. Uno está formateado y cargado y ya es compatible con el kernel de Linux 2.0/2.2. Su desventaja es que el tamaño es fijo y el otro es compatible con el kernel 2.4 y se implementa a través de él. ramfs. No se puede formatear, pero es fácil de usar y su tamaño se puede aumentar o disminuir según el espacio requerido. Actualmente es el disco ram más utilizado en Linux. Actualmente es la tecnología de disco RAM más utilizada en Linux.

initrd es el formato de RAMDisk. Antes del kernel 2.4, esto era image-initrd. Kernel 2.5 introdujo cpio-initrd, que simplifica enormemente el proceso de inicio de Linux y está en línea con la filosofía básica de Linux: Mantenlo simple, estúpido (KISS).

Cramfs es un sistema de archivos muy simple escrito por Linus que tiene buenas capacidades de compresión y se puede ejecutar directamente desde Flash sin cargarlo en la RAM, ahorrando así RAM. Sin embargo, Cramfs es de solo lectura, lo cual es inconveniente para los directorios que deben modificarse en tiempo de ejecución (como /etc, /var, /tmp), por lo que estos directorios generalmente se configuran en un sistema de archivos grabable, como ramfs.

SquashFS es una mejora de Cramfs. Rompe algunas de las limitaciones de Cramfs y ofrece ventajas en el uso de flash y RAM. Sin embargo, según los desarrolladores, puede que no sea tan bueno como Cramfs en términos de rendimiento.

Este también es un método nuevo y se necesitan más pruebas antes de adoptarlo en sistemas integrados

En tercer lugar, cree un directorio que contenga todos los archivos

1. Cree un directorio llamado directorio rootfs y utilícelo. para cargar el sistema de archivos

2. mkdir bin dev etc lib proc sbin tmp usr var

3. >4. Empaquete todos los dispositivos en system/dev y cópielos en dev (el método más económico o use mknod para construir los necesarios usted mismo

crw-rw-rw- 1 root root 5, 1); 2006-02-24 13:12 consola crw-rw-rw- 1 raíz raíz 5, 64 2006-02-24 13:12 cua0 crw-rw-rw- 1 raíz raíz 63.0 2006-02-24 13:12 dk0 crw -rw-rw- 1 raíz raíz 63, 1 2006-02-24 13:12 dk1 drwxr-xr-x 2 raíz raíz 4096 2006-02-24 13:12 flash brw-rw-rw- 1 raíz raíz 3, 0 2006-02-24 13:12 hda crw-rw-rw-1 raíz raíz 36, 10 2006-02-24 13:12 ipsec crw-rw-rw-1 raíz raíz 241, 0 2006-02-24 13:12 ixNpe crw-rw-rw- 1 raíz raíz 1, 2 2006-02-24 13:12 kmem crw-rw-rw- 1 raíz raíz 126, 0 2006-02-24 13:12 ledman lrwxrwxrwx 1 raíz raíz 16 2007- 19-09 14:08 log -gt; /tmp/var/log/log crw-rw-rw- 1 raíz raíz 1, 1 2006-02-24 13:12 mem crw-rw-rw- 1 raíz raíz 90, 0 2006-02-24 13:12 mtd0 brw-rw-rw- 1 raíz raíz 31, 0 2006-02-24 13:12 mtdblock0 brw-rw-rw- 1 raíz raíz 31, 1 2006- 02-24 13: 12 mtdblock1 brw-rw-rw- 1 raíz 31, 2 2006-02-24 13:12 mtdblock2 brw-rw-rw- 1 raíz 31, 3 2006-02-24 13:12 mtdblock3 brw-rw -rw- 1 raíz 31, 4 2006-02-24 13: 12 mtdblock4 brw-rw-rw- 1 raíz 31, 5 2006-02-24 13: 12 mtdblock5 brw-rw-rw- 1 raíz 31, 6 2006- 02-24 13: 12 mtdblock6 crw-rw-rw- 1 raíz 90, 1 2006-02-24 13: 12 mtdr0 crw-rw-rw- 1 raíz 1, 3 2006-02-24 13: 12 nulo

crw-rw-rw- 1 raíz 108, 0 2006-02-24 13:12 ppp crw-r--r-- 1 raíz raíz 5, 2 2006-03-29 15:56 ptmx drwxr-xr-x 2 raíz raíz 4096 2006-03-29 15:56 pts crw-rw-rw- 1 raíz raíz 2, 0 2006-02-24 13:12 ptyp0 brw-rw-rw- 1 raíz raíz 1, 0 2006-02-24 13 :12 ram0 crw-rw-rw- 1 raíz raíz 1, 8 2006-02-24 13:12 aleatorio crw-rw-rw- 1 raíz raíz 5, 0 2006-02-24 13:12 tty crw-rw-rw - 1 raíz raíz 4, 0 2006-02-24 13:12 tty0 crw-rw-rw- 1 raíz raíz 3, 0 2006-02-24 13:12 ttyp0 crw-rw-rw- 1 raíz raíz 4, 64 2006 -02-24 13:12 ttyS0 crw-rw-rw- 1 raíz raíz 1, 9 2006-02-24 13:12 urandom crw-rw-rw- 1 raíz raíz 1, 5 2006-02-24 13:12 cero Ejemplo: mknod console c 5 1 such crw-rw-rw- 1 root root 5, 1 2006-02-24 13:12 console

5. Copie el cuadro ocupado compilado en el directorio /bin. Los comandos, excepto Busybox, son sus enlaces.

ash chgrp clear dd echo fgrep gzip ip ls modprobe mv ping pwd sed stty tar true zcat Busybox chmod cp df egrep grep nombre de host kill mkdir more netstat ping2file rm sh sync tftpumount cat chown fecha dmesg false gunzip ifconfig ln mknod mount pidof ps rmdir sleep sysinfo touch uname

Todos los comandos se pueden agregar a Busybox a través de make menuconfig para aumentar o disminuir el número de comandos

Hay 6. también un enlace a togetherbox en /sbin

halt ifconfig init insmod klogd losetup lsmod mkswap modprobe reboot rmmod route swapoff swapon

[NextPage]

7. , hay un enlace a ocupadobox en /usr/bin

basename dirname env free id logger reset tail tr tty uptime which xargs

awk cut du expr head killall mkfifo so

rt test traceroute uniq wc whoami sí

El enlace anterior es casi el más completo. Varias personas pueden eliminarlo según corresponda, ¡pero el enlace no ocupará demasiado espacio!

8. El mismo /usr/sbin está lleno de archivos ejecutables compilados. No entraré en detalles.

9. Se debe prestar atención al muy importante /lib. /p>

Busque el directorio de destino de su entorno de compilación y utilice la compresión de tira para comprimir los archivos lib requeridos primero (no en el directorio de destino, y el entorno de compilación debe proporcionarlo al mismo tiempo)

Luego agregue los archivos correspondientes de acuerdo con la biblioteca de la aplicación específica, no agregue los no utilizados, la biblioteca ocupa mucho espacio

10 Agregue los archivos de configuración requeridos en /etc, lo más importante. es rcS

#! /sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/sbin/scripts UTC=yes mount -n -t proc proc /proc mount -n -t ramfs ramfs /tmp mount - n -t devpts devpts /dev/pts # Crear directorio var /bin/mkdir -m 0777 /tmp/var /bin/mkdir -m 0777 /var/lock /bin/mkdir -m 0777 /tmp/var /tmp/var /tmp/var /p>

#!m 0777 /var/log /bin/mkdir -m 0777 /var/run /bin/mkdir -m 0777 /var/tmp #/bin/mkdir - m 0777 /tmp/etc #/bin/cp -a /usr/etc//etc #/bin/cp -a /usr/dev//dev/ # Cargar el NPE Módulo Ethernet en el kernel cat /etc/. IxNpeMicrocode.dat gt; /dev/ixNpe insmod /lib/modules/2.6.13.2/intel/ixp400_eth.ko netdev_max_backlog=500 insmod /lib/modules/led.ko insmod /lib/ module/push_button.ko Los siguientes son específicos de la aplicación. El código aún no se ha agregado. Esto es necesario para el inicio del sistema.

De manera similar, esto es lo que sucede dentro del proyecto Lunksys GPL para un objetivo determinado.

Cuarto, generar disco ram

#! /bin/sh MODULE_NAME=ramdisk RAMPATH=`pwd` TMPPATH=${RAMPATH}/tmp SOURCE=${RAMPATH}/....../target if [ ! -d ${TMPPATH} ] entonces mkdir ${TMPPATH } fi if [ `whoami` ! = 'root' ] then { echo "Deberías ejecutar el shell como root. Vuelve a ejecutarlo como root." echo "Abortando 1 } fi # Borra el contenido de la ruta tmp rm". - rf ${TMPPATH}/tmpmnt rm -rf ${TMPPATH}/ramrootfs mkdir ${TMPPATH}/tmpmnt # Borrar el disco RAM antiguo rm -f ${RAMPATH}/$MODULE_NAME # Crear un archivo temporal del tamaño apropiado dd if=/ dev /zero of=${TMPPATH}/ramrootfs bs=1k count=6144 # Crear un sistema de archivos ext2 mke2fs -FF -m 0 -i 2000 ${TMPPATH}/ramrootfs # Montarlo en tmpmnt/ mount -o loop -t ext2 ${TMPPATH}/ramrootfs ${TMPPATH}/tmpmnt # Copia todo lo que hay en el kernel aquí. cd ${TMPPATH}/tmpmnt echo ${SOURCE} cp -av ${SOURCE}/. cd ${TMPPATH}# Desmontar sistema de archivos ext2 umount ${TMPPATH}/tmpmnt cat ${TMPPATH}/ramrootfs gzip -9 gt | ; /${RAMPATH}/ramdisk echo Copiar imagen de ramdisk a ${RAMPATH} Sincronización ¡Aquí hay un script generado automáticamente!

V.mksquashfs -r $(FS1_DIR) $(FS_NAME).1

VI.mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments -noI

Crear sistemas de archivos en /lib y /dev es lo más difícil y más propenso a problemas.