![Использование DKMS для автоматического исправления и установки ядра при обновлении](https://rvso.com/image/36012/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20DKMS%20%D0%B4%D0%BB%D1%8F%20%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE%20%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B8%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8%20%D1%8F%D0%B4%D1%80%D0%B0%20%D0%BF%D1%80%D0%B8%20%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B8.png)
У меня есть система, которой нужно пропатчить файл в ядре для правильной работы. Система работает под управлением Ubuntu 14.04.
Патч исправляет файл в формате drivers/hwmon
.
Поэтому после каждого обновления ядра мне нужно скачать исходные коды ядра, применить патч, пересобрать ядро и установить его.
По сути, мой вопрос очень похож наАвтоматически применять исправление модуля и компилировать ядро при обновлении?, где предлагается использовать DKMS. Ссылка на общую документацию DKMS предоставлена, но она не охватывает ситуацию исправления модуля.
Не могли бы вы показать мне, как настроить DKMS для автоматического выполнения исправления? Спасибо!
решение1
Патч модуля на самом деле не меняет способ. По сути, вам нужно поместить все файлы, необходимые для компиляции сборки вашего конкретного модуля ядра вне дерева, в папку, /usr/src/<modulename>-</moduleversion>/
и вам нужно добавить файл конфигурации dkms.conf
в эту папку.
По сути это должно выглядеть так:
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
Для патчей вам следует взглянуть настраница руководства для dkmsссылка на отрывок ниже:
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.
Затем вы хотите зарегистрировать его в dkms, собрать и установить модуль.
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
Я использовал заполнители для имени модуля и версии, но вы должны понять идею. Все это описано встраница руководства для dkms.