Как перекомпилировать один модуль в ядре Ubuntu Jammy HWE

Вопрос или проблема

Я только что перекомпилировал ядро Ubuntu Jammy HWE 6.8.0-45, следуя этим шагам:

# Клонируем репозиторий стандартного ядра Ubuntu
git clone git://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/jammy
cd jammy
git checkout Ubuntu-hwe-6.8-6.8.0-45.45_22.04.1
# Зависимости для сборки
sudo apt build-dep linux linux-image-unsigned-`uname -r`
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev fakeroot libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf llvm dwarves
# Удалить все
fakeroot debian/rules clean && make ARCH=x86 mrproper && git clean -fd && git restore . && git clean -fd && git restore .
# внести пользовательские изменения
code debian.hwe-6.8/changelog # Добавить пользовательскую версию
code include/linux/uts.h # Изменить UTS_SYSNAME
# Обновить конфигурации Debian
chmod a+x debian/rules && chmod a+x debian/scripts/* && chmod a+x debian/scripts/misc/*
fakeroot debian/rules clean
fakeroot debian/rules editconfigs
# Начать сборку
fakeroot debian/rules binary-headers binary-generic

Мне было интересно, как я могу перекомпилировать только модуль ‘iwlwifi.ko‘ без перекомпиляции всего ядра.

Я попытался выполнить стандартную перекомпиляцию из корневой директории исходников ядра, запустив:

make -j$(nproc) M=drivers/net/wireless/intel/iwlwifi modules

Но при попытке вставить его я получаю:

> sudo insmod drivers/net/wireless/intel/iwlwifi/iwlwifi.ko
insmod: ERROR: не удалось вставить модуль drivers/net/wireless/intel/iwlwifi/iwlwifi.ko: Неверные параметры

А dmesg сообщает:

[10754.522405] BPF: [139328] ENUM x509_key_exit 
[10754.522410] BPF: size=4 vlen=34
[10754.522410] BPF:  
[10754.522411] BPF: Неверное имя
[10754.522412] BPF: 
[10754.522413] не удалось проверить модуль [iwlwifi] BTF: -22

Думаю, должен быть способ использовать механизм fakeroot debian/rules для перекомпиляции только одного модуля, не очищая все и не собирая заново все ядро.

Спасибо за поддержку.

Я думаю, я нашел правильную формулу!

cp /boot/config-$(uname -r) .config
make oldconfig scripts prepare modules_prepare
cp /usr/src/linux-headers-$(uname -r)/Module.symvers .
make -j 24 M=drivers/net/wireless/intel/iwlwifi/
sudo insmod drivers/net/wireless/intel/iwlwifi/iwlwifi.ko

Вот и всё 🙂

Ответ или решение

Чтобы перекомпилировать только один модуль ядра, например iwlwifi.ko, в Ubuntu с ядром Jammy HWE, выполните следующие шаги. Предполагается, что у вас уже настроены исходные коды ядра и необходимые зависимости, как вы указали в вопросе.

Шаги для перекомпиляции модуля iwlwifi.ko:

  1. Скопируйте конфигурацию ядра:
    Сначала вам нужно скопировать конфигурацию текущего ядра в файл .config:

    cp /boot/config-$(uname -r) .config
  2. Подготовьте конфигурацию:
    Затем выполните следующие команды для подготовки исходного кода:

    make oldconfig scripts prepare modules_prepare
  3. Скопируйте Module.symvers:
    Этот файл нужен для разрешения зависимостей между модулями. Скопируйте его из заголовков текущего ядра:

    cp /usr/src/linux-headers-$(uname -r)/Module.symvers .
  4. Сборка модуля iwlwifi:
    Теперь выполните команду для сборки конкретного модуля:

    make -j$(nproc) M=drivers/net/wireless/intel/iwlwifi
  5. Загрузка модуля:
    После успешной сборки можно загрузить модуль с командой:

    sudo insmod drivers/net/wireless/intel/iwlwifi/iwlwifi.ko

Что делать в случае ошибок:

Если при загрузке модуля возникают ошибки, такие как "Invalid parameters" или ошибки BPF, убедитесь, что:

  • Вы все еще работаете с исходным кодом и конфигурацией, соответствующими версии ядра, в которой вы пытаетесь собрать модуль.
  • Необходимо провести проверку случаев, когда модули могут конфликтовать или когда версия модуля не совместима с загруженным ядром. Это может происходить, если вы не обновили зависимости или не добавили соответствующие параметры.

Заключение

Перекомпиляция отдельных модулей ядра может быть деликатной задачей, но с правильной подготовкой и командой, это можно сделать эффективно. Убедитесь в том, что вы работаете с актуальной конфигурацией и не забывайте проверять логи ошибок для диагностики возможных проблем.

Оцените материал
Добавить комментарий

Капча загружается...