Explicación del temido mensaje No init found. por parte del boot.
OK, así que aprece éste precioso y poco intuitivo, mensaje -actualmente localizado en init/main.c y queremos saber que *palabrota_aquí ha ido mal. Algunas razones de alto-nivel en cuanto al error, -listadas en orden de ejecución, aproximádamente, para leer el binario de init son:
Imposible montar el FS raíz -
unable to mount root FS.El binario
initno existe enrootfs-init binary doesn't exist on rootfs.Dispositivo de cónsola roto -
broken console device.El binario existe pero sus dependencias no están disponibles -
binary exists but dependencies not available.El binario no puede ser leído -
binary cannot be loaded.
Detalles de la explicación
Configurar el parámetro de kernel
debug, en el archivo de configuración del cargador de arranqueCONFIG_CMDLINE.Asegurar que el tipo de FS raíz es el correcto. El parámetro de kernel
root=apunte a la partición correcta, los dirivers cómo el de hardware de lamacenamiento (ejem. SCSI o USB) y los sistemas de archivo(ext3, jfs2, etc.) estén construidos (alternativamente cargados como módulos), para poder ser precargardos porinitrd.Posible conflicto en
console= setup–> consola inicial no disponible. Algunas cónsolas en serie no son confiables, debido a problemas en los IRQ en serie. Por ejemplo al faltar una configuración en interrupciones básicas.Dependencias a librerías requeridas, como
/lib/ld-linux.so.2están rotas u omitidas Utilizarreadelf -d <INIT>|grep NECESITADApara encontrar que cuál librería es requerida.Comprobar que el binario de la arquitectura coincide con el hardware. i386 y x86_64, no coinciden o, se intenta cargar x86 sobre hardware ARM. En caso de intentar cargar un archivo no binario -shell script?, debería comprobarse que el script especifica un intérprete en la línea de cabecera shebang ejem.
#!/..., y que funciona, incluidas las dependencias a librerías. Antes de ir montando scripts, es preferible probar binarios como/bin/shy confirmar su ejecución exitosa. Incluso probar añadir código ainit/main.cpara ver los valores de retorno de kernel_execve().
Por favor, adecuar esta explicación en el caso de ocurrir nuevas fallas - después de toda la carga del binario init, resulta un paso CRÍTICO y una transición dificil, la cuál necesita ser lo “dolorosa” posible, después subir el parche a LKML.