vmlinuz e initrd no se encuentran después de construir el kernel?

9

Después de configurar y construir el kernel usando make, ¿por qué no tengo vmlinuz-<version>-default.imgy initrd-<version>.imgsolo tengo un vmlinuxbinario enorme (~ 150 MB)?

Amumu
fuente
44
¿Olvidaste correr make bzImage? Además, ¿hiciste un núcleo monolítico? ¿Estás ejecutando un SO similar a Debian? Si es así, y no está compilando de forma cruzada, hay formas más fáciles de construir un núcleo.
Alexios
Lo compilé en OpenSUSE (sin embargo, descargué la última fuente de kernel.org). Después make menuconfig, escribí makey dejé que hiciera el trabajo.
Amumu
1
Necesita make bzImagegenerar el núcleo bzImage. Di make helppara ver algunas breves instrucciones. Consulte el Cómo del kernel de Linux para obtener instrucciones detalladas. Si respondió todas las make menuconfigpreguntas con Y (en lugar de M cuando corresponde), ha intentado incluir todos los controladores en el núcleo propiamente dicho. Esta es una muy, muy mala idea y el núcleo no arrancará porque es demasiado grande. La initrdimagen es generada por otras herramientas.
Alexios
Acabo de comprobar la configuración nuevamente. Parece que no he habilitado el soporte del módulo de kernel cargable. Pensé que es por defecto. Intentaré compilar nuevamente y notificaré cuando esté listo.
Amumu
Muchos de los comentarios anteriores me parecen buenas respuestas.
James Youngman

Respuestas:

9

Las imágenes comprimidas están debajo arch/xxx/boot/, donde xxxestá el arco. Por ejemplo, para x86y amd64, tengo una imagen comprimida en /usr/src/linux/arch/x86/boot/bzImage, junto con /usr/src/linux/vmlinux.

Si aún no tiene la imagen, verifique si bzip2está instalada y funcionando (pero supongo que si ese fuera el problema, obtendría un mensaje de error descriptivo, como "bzip2 no encontrado").

Además, la configuración del kernel le permite elegir el método de compresión, por lo que el nombre real del archivo y el algoritmo de compresión pueden diferir si cambia la configuración del kernel.

Como otros ya mencionaron, los initrds no son generados por el proceso de compilación de Linux, sino por otras herramientas. Tenga en cuenta que a menos que, por alguna razón, necesite archivos externos (por ejemplo, necesita módulos o udev para identificar o montar /), no necesita un initrd para arrancar.

njsg
fuente