¿Cómo construir un kernel personalizado con localmodconfig que soporte hardware de múltiples máquinas?


9

Al configurar un servidor para ejecutar una sola tarea, como un dispositivo, puede surgir la necesidad de construir un núcleo personalizado. Por ejemplo para ahorrar espacio en disco.

Ubuntu Core 13.10 El sistema de archivos raíz amd64 es una descarga de 38 MB , donde el metapaquete "linux-image-generic" que incluye las dependencias requeridas descargará 79 MB de archivos, y el tamaño de un paquete kernel-image-xyz-generic todavía es de 14 MB .

Para construir un kernel que está despojado de módulos que su hardware no usará, el make localmodconfigcomando es la herramienta adecuada para el trabajo. Sin embargo, su máquina virtual que ejecuta su entorno de compilación y prueba carga módulos diferentes que su hardware de implementación de destino. Y / o después de un tiempo, su hardware de implementación puede convertirse en eol, y se utiliza hardware diferente. Y con la frecuencia en la que se lanzan las actualizaciones del kernel, puede resultar demasiado engorroso construir un kernel personalizado para cada configuración de hardware diferente.

¿Cómo construir rápidamente un kernel de Linux personalizado que se ejecute en algunas cajas de hardware diferentes?

Respuestas:


11

El make localmodconfigcomando sigue siendo la herramienta adecuada para el trabajo. De hecho make localmodconfigcorrescripts/kconfig/streamline_config.pl .

Entrada de archivo

Al leer el streamline_config.plcódigo fuente (perl), hay una característica no documentada my $lsmod_file = $ENV{'LSMOD'};que permite la entrada de archivos para la detección del módulo cargado en lugar de la salida del lsmodcomando.

CD en vivo

Porque localmodconfig usa la salida lsmodpara detectar los módulos cargados. Ejecutamos un Ubuntu Live CD en cada una de las diferentes configuraciones de hardware, abrimos un terminal ( Ctrl+ Alt+ T), ejecutamos lsmody guardamos su salida.

Salida concatenada

Al concatenar los lsmodarchivos de salida mientras se eliminan las líneas de encabezado consecutivas, puede crear rápidamente un archivo de entrada que cubra todos los módulos del núcleo necesarios. Nos gusta revisar la lista de módulos a mano y usar una receta más manual:

  1. $ cd linux-3.11.0/
    o vaya al directorio donde ejecutará su comando make

  2. $ lsmod > lsmod.txt
    crea un archivo de texto con sus módulos cargados

  3. $ nano lsmod.txt
    abrirá el editor de nano texto, por supuesto, puedes usar tu aplicación de editor favorita

  4. Agregue los módulos deseados que aún no están allí, al final de este archivo (vea por ejemplo el final de esta respuesta) y guárdelo cuando esté listo.
    Nota: utilice espacios, no pestañas para que coincidan con las posiciones del tabulador de columna.

  5. $ make LSMOD="lsmod.txt" localmodconfig
    esto le dirá a localmodconfig que use su archivo lsmod.txt como entrada para la detección de módulos cargados

Con respecto a Steven Rostedt, el autor de steamline_config.pl, por sugerir una notación más corta en el paso 5.


Ejemplo de qué agregar y no agregar a lsmod.txt (paso 4):

Debido a que la placa principal Intel D33217CK tiene sensores térmicos Intel que nos gustaría leer, agregamos estas líneas:

x86_pkg_temp_thermal   13810  0
intel_powerclamp       14239  0

Pero no queremos ejecutar máquinas virtuales en este hardware, es por eso que omitimos estas líneas:

kvm_intel             128218  0
kvm                   364766  1 kvm_intel

Tiene un adaptador Ethernet Gibabit de Apple (Broadcom) conectado a su puerto Thunderbolt, por lo que agregamos:

tg3                   152066  0
ptp                    18156  1 tg3
pps_core               18546  1 ptp

Creemos que no necesitamos duplicación de volumen, y por lo tanto no agreguemos:

dm_mirror              21715  0
dm_region_hash         15984  1 dm_mirror
dm_log                 18072  2 dm_region_hash,dm_mirror

Y tampoco necesitamos salida de gráficos (el texto servirá en un servidor sin cabeza), por lo que no incluimos:

i915                  589697  3
i2c_algo_bit           13197  1 i915
drm_kms_helper         46867  1 i915
drm                   242354  4 i915,drm_kms_helper

Para otra máquina necesitamos este controlador de ethernet Realtek adicionalmente:

r8169                  61434  0
mii                    13654  1 r8169
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.