Compilación del kernel de Linux: sistema operativo independiente

Compilación del kernel de Linux: sistema operativo independiente

Hola chicos, soy nuevo en la compilación del kernel de Linux, así que tengo una pregunta: al compilar el kernel de Linux, ¿estamos construyendo un sistema operativo totalmente independiente que no dependa de ninguna distribución de Linux?

En caso afirmativo... Bueno, cuando quiero crear el archivo initrd usando el comando initramfs, ¿por qué agrega información sobre mi ejecución de Linux (estoy ejecutando Ubuntu 10.4)?

¿Cómo debo compilar y agregar módulos a mi Linux compilado y dónde debo colocarlos?

Este es un resumen de lo que he estado haciendo:

1.obtener la fuente del kernel (3.4.1) y compilarla usando el comando "hacer todo" (yo uso mi .config de Linux actual)

  1. Instalando grub en mi tarjeta de memoria

  2. Poner el bzImage compilado en el directorio /boot de mi tarjeta de memoria

  3. Usando el comando "initramfs" para crear el archivo initrd y colocarlo también en /boot.

  4. Arrancando mi PC usando la tarjeta de memoria y accediendo al terminal grub>

  5. Usando "root (hd0,0)"; "núcleo /boot/bzImage" ; Comandos "initrd /boot/initrd.img" y luego "boot" para iniciar.

  6. ¡Ingresando a la terminal (initramfs) después de un error que indica que no se pudo encontrar el archivo "/lib/modules/3.4.1/modules.dep"!

Qué estoy haciendo mal ?

Respuesta1

Al compilar el kernel de Linux, ¿estamos construyendo un sistema operativo totalmente independiente que no depende de ninguna distribución de Linux?

No. Linux por sí solo no es un sistema operativo. Es sólo un núcleo. Atierra de usuario, que comprende una colección de bibliotecas del sistema y software básico, es necesario para facilitar su interacción con la computadora. En lo que comúnmente queremos decir cuando nos referimos a "Linux", esto lo proporciona un proyecto separado llamado Proyecto GNU. Técnicamente, deberíamos (y algunos lo hacen) llamarlo "GNU/Linux".

Bueno, cuando quiero crear el archivo initrd usando el comando initramfs, ¿por qué agrega información sobre mi ejecución de Linux (estoy ejecutando Ubuntu 10.4)?

Debido a que su initrd contiene la colección de programas que configuran inicialmente su sistema en el arranque, cargan los controladores y demonios necesarios, buscan y montan las particiones requeridas en sus discos duros, etc. En realidad, está personalizado no solo para su distribución, sino a su instalación, configuración y computadora particulares. Generalmente no es intercambiable con el initrd de nadie más. Es por eso que tiene que ser generado por su sistema.

¿Cómo debo compilar y agregar módulos a mi Linux compilado y dónde debo colocarlos?

Si está compilando su propio kernel, probablemente lo esté haciendo make menuconfigen el directorio fuente del kernel antes de compilar, lo que le permite seleccionar qué funciones se compilarán y si se integrarán en el binario del kernel o estarán disponibles como módulos.

Este es un resumen de lo que he estado haciendo:

Hay varias razones por las que esto no funcionará como usted desea.

obtener la fuente del kernel (3.4.1) y compilarla usando el comando "hacer todo" (yo uso mi .config de Linux actual)

Si está ejecutando Ubuntu 10.04, que es bastante anterior a la rama 3.x del kernel de Linux, y mucho menos a la 3.4. Lo más probable es que no funcione correctamente, al menos no sin una enorme cantidad de trabajo extra. Los archivos de configuración también cambiaron bastante, y estoy francamente sorprendido de que no arroje errores a izquierda y derecha sobre cosas en su archivo de configuración (presumiblemente para Linux 2.6) que no coinciden con cómo se hacen las cosas en 3.4. Además, probablemente quieras descargar el paquete fuente del kernel de Ubuntu y no el código fuente simple del kernel de kernel.org, ya que Ubuntu parchea el kernel para incluir las características necesarias y hacerlo funcionar bien con todo lo demás en el sistema. Finalmente, te faltan varios pasos, que abordaré más adelante.

Poner el bzImage compilado en el directorio /boot de mi tarjeta de memoria

No estoy seguro de cuál es su intención con esto, pero si es tener una instalación de arranque completa de Linux en su tarjeta de memoria, hay algo más que eso: no tiene ningún elemento de usuario en esa memoria. palo, por ejemplo. Lo que esto realmente hará, si se configura correctamente, es (intentar) ejecutar la instalación de Ubuntu en su disco duro con el kernel en su tarjeta de memoria. Creo que esto debería funcionar, pero ¿por qué hacerlo en lugar de simplemente instalar el kernel en su disco duro? Puede instalarlo al lado del existente para poder cambiar libremente entre ellos.

¡Ingresando a la terminal (initramfs) después de un error que indica que no se pudo encontrar el archivo "/lib/modules/3.4.1/modules.dep"!

Esto se remonta a los pasos omitidos que mencioné anteriormente. Necesita make modules_installsu nuevo kernel para colocar sus módulos en /lib/modules.

SIN EMBARGO...

Nada de esto realmente importa, porque idealmente no deberías compilar un kernel de la manera "tradicional", a menos que tengas una necesidad muy específica de hacerlo. Hoy en día, si realmente necesita compilar su propio kernel, la mayoría de las distribuciones tienen una forma de hacerlo que utiliza su versión personalizada del kernel (si corresponde), automatiza el proceso de compilación, instala el kernel como un paquete para que pueda instalarlo y eliminarlo limpiamente. según sea necesario y configura su gestor de arranque para darle la opción de elegir entre núcleos nuevos o antiguos. En Ubuntu debes seguir estas instrucciones:Kernel/compilar - Ubuntu Wiki

Lo que no quiere decir que no se pueda compilar un kernel a la antigua usanza sólo por diversión o con fines educativos. Compilé mi primer kernel de esa manera, pero esto fue antes de que existieran mejores formas de hacerlo. Si es importante para usted que su sistema no esté dañado, use el método recomendado para su distribución, use su fuente y use su administración de paquetes.

Respuesta2

Cuando recompila o compila el kernel de Linux, NO está creando una nueva distribución. Está creando únicamente una versión más nueva o diferente del kernel. El kernel es un archivo único que se carga y luego el gestor de arranque lo ejecuta después de que su PC completa el proceso POST.

Una distribución consta de muchos, muchos otros archivos, incluidas las utilidades estándar de UNIX, generalmente un administrador de paquetes, y otros. Nada de esto se modifica si (re)compilas tu propio kernel.

Ha pasado un tiempo desde que compilé mi propio kernel, pero creo que debes ejecutarlo depmod -adespués del makecomando.

información relacionada