![Usando DKMS, para parchar e instalar automáticamente el kernel en la actualización](https://rvso.com/image/36012/Usando%20DKMS%2C%20para%20parchar%20e%20instalar%20autom%C3%A1ticamente%20el%20kernel%20en%20la%20actualizaci%C3%B3n.png)
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.conf
a 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.