Tengo un sistema Linux integrado, mínimo y totalmente personalizado (vainilla, 3.3.8, i486, Vortex86dx) que arranca desde una imagen initramfs. No se utilizan scripts de distribución estándar, solo un único archivo rcS que realiza la inicialización.
Tengo un disco Flash IDE con dos particiones en /dev/hda1 y /dev/hda2.
Como se trata de una distribución integrada mínima para un sistema fijo, tiene un directorio estático /dev que contiene /dev/hda1 y /dev/hda2, y no hay UDEV.
En el momento en que init llama a rcS, la entrada /dev/hda1 ya no está presente. No se han ejecutado otros scripts, aplicaciones de usuario o demonios en este momento. /dev/hda1aparecehaber sido eliminado por el kernel (?)
No tengo el mismo problema si inicio mi objetivo a través de un sistema de archivo raíz NFS durante mi proceso de desarrollo.
Utilizo Buildroot para crear el directorio /dev a través del archivo device_table_dev.txt. p.ej
# IDE Devices
/dev/hda b 640 0 0 3 0 0 0 -
/dev/hda b 640 0 0 3 1 1 1 4
Inspeccioné rootfs.tar.gz desde la salida/imágenes de Buildroot. El directorio /dev contiene /dev/hda1:
brw-r----- 1 root root 3, 0 Jul 2 13:44 hda
brw-r----- 1 root root 3, 1 Jul 2 13:44 hda1
brw-r----- 1 root root 3, 2 Jul 2 13:44 hda2
brw-r----- 1 root root 3, 3 Jul 2 13:44 hda3
brw-r----- 1 root root 3, 4 Jul 2 13:44 hda4
La lista de mi directorio posterior al arranque (realizada desde rcS, en la parte superior del script) en el destino se ve así:
brw-r----- 1 root root 3, 0 Jul 2 12:44 hda
brw-r----- 1 root root 3, 2 Jul 2 12:44 hda2
brw-r----- 1 root root 3, 3 Jul 2 12:44 hda3
brw-r----- 1 root root 3, 4 Jul 2 12:44 hda4
Falta /dev/hda1. /dev/hda2 es una partición en el mismo disco pero todavía está allí. Extraño.
Si ejecuto la utilidad Busybox "mdev -s", restaura/dev/hda1 en el destino y funciona normalmente. por ejemplo puedo montarlo
¿Alguien ha visto este comportamiento antes?
¿El kernel elimina entradas de /dev?
Respuesta1
El udev
subsistema crea y monta un tmpfs
sistema de archivos en /dev
el momento del arranque. El contenido lo completa el kernel a medida que se detectan los dispositivos. Dado que tmpfs
reside en la memoria virtual, no es persistente, por lo que los cambios no sobreviven después de los reinicios. Incluso si ya tiene uno /dev
, al montar el nuevo sistema de archivos se oculta el directorio y parece que se han eliminado todos los especiales de su dispositivo. No lo han hecho, pero el resultado final es el mismo: las ofertas especiales no están donde esperas.
Sospecho que encontrará que sus entradas hda
y hdaX
han sido reemplazadas por entradas sda
y sdaX
. Alternativamente, consulte /proc/devices
y /proc/partitions
para obtener el nombre udev
asignado a la unidad.
A veces, una solución rápida y sucia fdisk -l /dev/[sh]d[a-z]
puede ayudar (funciona mejor si tiene menos de 26 discos de cada tipo).
Por cierto, el esquema de nombres utilizado por udev
está estandarizado y su estática /dev
podría ser peor que seguir las convenciones. Si udev
cree que es así /dev/sda
, adelante. Podrías escapar de posibles rarezas y malentendidos en el futuro.