Usando DKMS, para parchar e instalar automáticamente el kernel en la actualización

Usando DKMS, para parchar e instalar automáticamente el kernel en la actualización

Tengo un sistema que necesita parchear un archivo en el kernel para que funcione correctamente. El sistema ejecuta Ubuntu 14.04.

El parche parchea un archivo en formato drivers/hwmon.

Entonces, después de cada actualización del kernel necesito descargar las fuentes del kernel, aplicar el parche, reconstruir el kernel e instalarlo.

Básicamente, mi pregunta es muy similar a¿Aplicar automáticamente el parche del módulo y compilar el kernel cuando se actualice?, donde se sugiere utilizar DKMS. Se proporciona un enlace a los documentos generales de DKMS, pero no cubre la situación de parchear un módulo.

¿Podría mostrarme cómo configurar DKMS para realizar la aplicación de parches automáticamente? ¡Gracias!

Respuesta1

Parchar un módulo realmente no cambia la forma. Lo que básicamente necesita es colocar todos los archivos que necesita para compilar una compilación fuera del árbol de su módulo de kernel particular en una carpeta /usr/src/<modulename>-</moduleversion>/y agregar un archivo de configuración dkms.confa esa carpeta.

Básicamente debería verse así:

MAKE="make -C $kernel_source_dir M=\$(pwd)"
PACKAGE_NAME=hwmon
PACKAGE_VERSION=1.2.3.4
BUILT_MODULE_NAME[0]="hwmon"
DEST_MODULE_LOCATION[0]="/kernel/extra"
AUTOINSTALL=yes

Para parches, deberías echar un vistazo apágina de manual para dkmsvinculado a continuación, como un extracto:

   PATCH[#]=
          Use  the  PATCH directive array to specify patches which should be applied to
          your source before a build occurs.  All patches are expected  to  be  in  -p1
          format  and  are  applied  with the patch -p1 command.  Each directive should
          specify the filename of the patch to apply, and all patches must  be  located
          in  the  patches  subdirectory  of  your  source  directory  ( /usr/src/<mod‐
          ule>-<module-version>/patches/ ).  If any patch fails  to  apply,  the  build
          will  be  halted  and  the rejections can be inspected in /var/lib/dkms/<mod‐
          ule>/<module-version>/build/.  If a PATCH should only be  applied  condition‐
          ally,  the  PATCH_MATCH[#]  array should be used, and a corresponding regular
          expression should be placed in PATCH_MATCH[#] which will alert dkms  to  only
          use that PATCH[#] if the regular expression matches the kernel which the mod‐
          ule is currently being built for.

   PATCH_MATCH[#]=
          See the above description for PATCH[#] directives. If you only want  a  patch
          applied  in  certain  scenarios,  the PATCH_MATCH array should be utilized by
          giving a regular expression which matches the kernels you intend  the  corre‐
          sponding PATCH[#] to be applied to before building that module.

Entonces desea registrarlo con dkms, compilar e instalar el módulo.

dkms add     -m hwmon -v 1.2.3.4
dkms build   -m hwmon -v 1.2.3.4
dkms install -m hwmon -v 1.2.3.4

He usado marcadores de posición para el nombre y la versión del módulo, pero ya deberías hacerte una idea. Todo esto está cubierto en elpágina de manual para dkms.

información relacionada