He leído muchos tutoriales sobre cómo construir núcleos personalizados y arrancar Ubuntu usando esos núcleos, y seguí con éxito las guías y los núcleos personalizados arrancados, pero no entiendo qué hace cada uno de los comandos en las guías y qué está sucediendo realmente con cada comando
El procedimiento descrito en el sitio de Ubuntu hace un montón de trabajo con fakeroot
, dpkg
, make-kpkg
, algunos initramfs, y otras cosas horribles que las obras, sino que simplemente no ayuda a entender lo que está pasando.
- ¿Cuál es la salida de
make
un directorio de kernel de Linux? - ¿Crea una "imagen del núcleo comprimido"?
- ¿Cuál es el nombre del archivo de "imagen comprimida del núcleo" y dónde está ubicado?
- ¿Qué
make modules
hacer? - ¿Debe
make modules
hacerse antes o despuésmake
? - ¿No
make
construye mis módulos automáticamente? - ¿Cuál es el proceso (en inglés, no solo la lista de comandos) de agregar núcleos recién creados a la lista de núcleos de arranque?
- ¿Qué
make install
hacer? - ¿Lo
make install
agregaré a mi lista de núcleos de arranque para que no tenga que hacer nada más? - ¿Hay un equivalente
make modules_install
?
ubuntu
linux-kernel
make
AnkurVj
fuente
fuente
Respuestas:
Desde la parte superior...
make
compila y vincula la imagen del núcleo. Este es un archivo único llamadovmlinuz
.make modules
compila archivos individuales para cada pregunta que respondióM
durante la configuración del kernel. El código objeto está vinculado a su núcleo recién construido. (Para las preguntas respondidasY
, estas ya son parte devmlinuz
, y para las preguntas respondidasN
se omiten).make install
instala tu kernel integrado en/vmlinuz
.make modules_install
instala los módulos del kernel en/lib/modules
o/lib/modules/<version>
.En cuanto a agregarlo a la lista de núcleos disponibles, el gestor de arranque se encarga de eso. Es diferente para cada gestor de arranque, pero
grub
es el más común en x86 y amd64, así que lo describiré. En realidad es bastante simple. Grub busca y/
, para cualquier cosa que parezca que podría ser un núcleo en funcionamiento, lo agrega. Y sí, esta es una descripción demasiado simplificada./boot
/lib/modules
Esas "cosas horribles" adicionales en la documentación de Ubuntu son cosas adicionales para crear un
deb
paquete. Cuando lo hace por más que usted, es mucho mejor empaquetarlo. Cambiarás a tiempo.La construcción del kernel y los módulos se mantiene separada porque para las personas que lo necesitan (es decir, los desarrolladores del kernel) a menudo solo realizan cambios en un módulo. Pueden aplicar sus cambios, reconstruir e instalar solo los módulos. Esto ahorra mucho tiempo cuando tiene que hacerse 20 veces al día. Nunca se actualizará para tener un solo
make everything
comando. En su lugar, ejecutamake && make modules && make install && make modules_install
como la documentación dice hacer . El proceso de compilación favorece a los desarrolladores del kernel, no a ti. Y así es como debe ser.En realidad, casi no hay razón para que nadie, excepto los desarrolladores del núcleo o los empaquetadores de distribución, compilen un núcleo. En casi cualquier circunstancia, la característica del núcleo que desea ya se ha creado para usted y está disponible en uno de los núcleos preempaquetados. Hay excepciones, pero son extremadamente raras en estos días.
No es que te esté desanimando de construir tu propio núcleo, en realidad te animo a que lo hagas. Creo que construir su núcleo desde cero es una práctica invaluable para aprender cómo funciona todo allí. En parte, porque quizás algún día serás la excepción que necesita. Pero también le enseña mucho sobre el proceso de kernel y arranque en general. Serás una mejor persona por haberlo hecho.
fuente
/vmlinuz
un directorio en la carpeta raíz? cuando haga una instalación, ¿se creará este directorio y se colocará un nuevo núcleo allí? ¿make modules_install
Reemplazará mis módulos instalados actualmente? Supongamos que coloco mi vmlinux en el directorio / boot, ¿necesito hacer algo más (como editar archivos de configuración de grub y hacer grub-update o algo después?)make bzimage
es lo que hace eso./vmlinuz
es un archivo binario, no un directorio. He estado haciendo solo kernels empaquetados durante los últimos 5 años, por lo que no recuerdo exactamente el comportamiento demodules_install
un kernel instalado directamente. Grub encontrará tu kernel/boot
sin ayuda. Sí, siempre debe ejecutargrub-update
después de instalar un nuevo núcleo.make bzimage
lugar demake
? ¿Necesito hacer unamake clean
ymake bzimage
otra vez? Por/vmlinuz
qué se refiere el archivo se creará en el directorio raíz o en el directorio de origen del núcleo de Linux?/
es una ruta absoluta, así que sí, es un archivo en la raíz.Y
se compilan en (es decir, son parte de vmlinuz). Los módulos respondidosM
se compilan como módulos cargables. Los módulos respondidosN
no se compilan.make modules_install
solo se aplica a los respondidosM
.