Ошибка повторной компиляции ядра Ubuntu Jammy HWE 6.8.0-45

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

В данный момент я пытаюсь собрать пользовательское ядро HWE для Ubuntu Jammy (22.04), версия 6.8.0-45, следуя процедуре, аналогичной упомянутой здесь. Я применяю некоторые патчи к драйверу iwlwifi.

Вот мой пошаговый процесс:

  1. git clone git://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/jammy && cd jammy
  2. git checkout Ubuntu-hwe-6.8-6.8.0-45.45_22.04.1
  3. git switch -c my_branch/6.8.0-45_iwl_patch
  4. Применить изменения к файлу drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
  5. git add . && git commit -m "My commit message"
  6. cp /boot/config-$(uname -r) .config
  7. sed -i 's/CONFIG_LOCALVERSION=""/CONFIG_LOCALVERSION="-ricciolino"/g' .config
  8. make oldconfig
  9. fakeroot debian/rules clean
  10. fakeroot debian/rules binary-headers binary-generic

Все работает нормально до шага 10, где я сталкиваюсь со следующей ошибкой во время процесса сборки:

(my_branch/6.8.0-45_iwl_patch)> fakeroot debian/rules binary-headers binary-generic
Debug: /opt/my-kernel/jammy/debian/stamps/stamp-prepare-indep
dh_prep -i
[ -d /opt/my-kernel/jammy/debian/stamps/ ] || mkdir /opt/my-kernel/jammy/debian/stamps/; touch /opt/my-kernel/jammy/debian/stamps/stamp-prepare-indep
Debug: /opt/my-kernel/jammy/debian/stamps/stamp-install-headers
dh_testdir
install -d /opt/my-kernel/jammy/debian/linux-hwe-6.8-headers-6.8.0-45/usr/src/linux-hwe-6.8-headers-6.8.0-45
find . -path './debian' -prune -o -path './debian.hwe-6.8' -prune \
  -o -path './include/*' -prune \
  -o -path './scripts/*' -prune -o -type f \
  \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Kbuild*' -o \
     -name '*.sh' -o -name '*.pl' -o -name '*.lds' \) \
  -print | cpio -pd --preserve-modification-time /opt/my-kernel/jammy/debian/linux-hwe-6.8-headers-6.8.0-45/usr/src/linux-hwe-6.8-headers-6.8.0-45
27658 blocks
cp -a scripts include /opt/my-kernel/jammy/debian/linux-hwe-6.8-headers-6.8.0-45/usr/src/linux-hwe-6.8-headers-6.8.0-45
(find arch -name include -type d -print | \
        xargs -n1 -i: find : -type f) | \
        cpio -pd --preserve-modification-time /opt/my-kernel/jammy/debian/linux-hwe-6.8-headers-6.8.0-45/usr/src/linux-hwe-6.8-headers-6.8.0-45
xargs: warning: options --max-args and --replace/-I/-i are mutually exclusive, ignoring previous --max-args value
cpio: /opt/my-kernel/jammy/debian/linux-hwe-6.8-headers-6.8.0-45/usr/src/linux-hwe-6.8-headers-6.8.0-45/arch/powerpc/include/uapi/asm/Kbuild not created: newer or same age version exists
...
<больше строк cpio>
...
cpio: /opt/my-kernel/jammy/debian/linux-hwe-6.8-headers-6.8.0-45/usr/src/linux-hwe-6.8-headers-6.8.0-45/arch/x86/include/asm/Kbuild not created: newer or same age version exists
28358 blocks
# Не включая артефакты .o и .cmd в заголовки
find /opt/my-kernel/jammy/debian/linux-hwe-6.8-headers-6.8.0-45/usr/src/linux-hwe-6.8-headers-6.8.0-45 -name \*.o -or -name \*.cmd -exec rm -f {} \;
[ -d /opt/my-kernel/jammy/debian/stamps/ ] || mkdir /opt/my-kernel/jammy/debian/stamps/; touch /opt/my-kernel/jammy/debian/stamps/stamp-install-headers
Debug: binary-headers
dh_installchangelogs -plinux-hwe-6.8-headers-6.8.0-45
dh_installdocs -plinux-hwe-6.8-headers-6.8.0-45
dh_compress -plinux-hwe-6.8-headers-6.8.0-45
dh_fixperms -plinux-hwe-6.8-headers-6.8.0-45
dh_installdeb -plinux-hwe-6.8-headers-6.8.0-45
flock -w 60 /opt/my-kernel/jammy/debian/.LOCK dh_gencontrol -plinux-hwe-6.8-headers-6.8.0-45
dh_md5sums -plinux-hwe-6.8-headers-6.8.0-45
dh_builddeb -plinux-hwe-6.8-headers-6.8.0-45
dpkg-deb: building package 'linux-hwe-6.8-headers-6.8.0-45' in '../linux-hwe-6.8-headers-6.8.0-45_6.8.0-45.45~22.04.1_all.deb'.
x86_64-linux-gnu-gcc-12 debian/scripts/fix-filenames.c -o debian/scripts/fix-filenames
Debug: /opt/my-kernel/jammy/debian/stamps/stamp-prepare-tree-generic
install -d /opt/my-kernel/jammy/debian/build/build-generic
touch /opt/my-kernel/jammy/debian/build/build-generic/ubuntu-build
python3 debian/scripts/misc/annotations --export --arch amd64 --flavour generic > /opt/my-kernel/jammy/debian/build/build-generic/.config
sed -i 's/.*CONFIG_VERSION_SIGNATURE.*/CONFIG_VERSION_SIGNATURE="Ubuntu 6.8.0-45.45~22.04.1-generic 6.8.12"/' /opt/my-kernel/jammy/debian/build/build-generic/.config
find /opt/my-kernel/jammy/debian/build/build-generic -name "*.ko" | xargs rm -f
make ARCH=x86 CROSS_COMPILE=x86_64-linux-gnu- HOSTCC=x86_64-linux-gnu-gcc-12 CC=x86_64-linux-gnu-gcc-12 BINDGEN=bindgen-0.65 KERNELRELEASE=6.8.0-45-generic CONFIG_DEBUG_SECTION_MISMATCH=y KBUILD_BUILD_VERSION="45~22.04.1" CFLAGS_MODULE="-DPKG_ABI=45" PYTHON=python3 O=/opt/my-kernel/jammy/debian/build/build-generic -j24 rustavailable || true
make[1]: Entering directory '/opt/my-kernel/jammy'
make[2]: Entering directory '/opt/my-kernel/jammy/debian/build/build-generic'
***
*** Генератор привязок Rust 'bindgen-0.65' не найден.
***
***
*** Пожалуйста, проверьте Documentation/rust/quick-start.rst для получения подробной информации
*** о том, как настроить поддержку Rust.
***
make[3]: *** [/opt/my-kernel/jammy/Makefile:1718: rustavailable] Ошибка 1
make[2]: *** [/opt/my-kernel/jammy/Makefile:240: __sub-make] Ошибка 2
make[2]: Leaving directory '/opt/my-kernel/jammy/debian/build/build-generic'
make[1]: *** [Makefile:240: __sub-make] Ошибка 2
make[1]: Leaving directory '/opt/my-kernel/jammy'
make ARCH=x86 CROSS_COMPILE=x86_64-linux-gnu- HOSTCC=x86_64-linux-gnu-gcc-12 CC=x86_64-linux-gnu-gcc-12 BINDGEN=bindgen-0.65 KERNELRELEASE=6.8.0-45-generic CONFIG_DEBUG_SECTION_MISMATCH=y KBUILD_BUILD_VERSION="45~22.04.1" CFLAGS_MODULE="-DPKG_ABI=45" PYTHON=python3 O=/opt/my-kernel/jammy/debian/build/build-generic -j24 olddefconfig
make[1]: Entering directory '/opt/my-kernel/jammy'
make[2]: Entering directory '/opt/my-kernel/jammy/debian/build/build-generic'
***
*** Дерево исходных файлов не чистое, выполните 'make ARCH=x86 mrproper'
*** в /opt/my-kernel/jammy
***
make[3]: *** [/opt/my-kernel/jammy/Makefile:646: outputmakefile] Ошибка 1
make[2]: *** [/opt/my-kernel/jammy/Makefile:240: __sub-make] Ошибка 2
make[2]: Leaving directory '/opt/my-kernel/jammy/debian/build/build-generic'
make[1]: *** [Makefile:240: __sub-make] Ошибка 2
make[1]: Leaving directory '/opt/my-kernel/jammy'
make: *** [debian/rules.d/2-binary-arch.mk:23: /opt/my-kernel/jammy/debian/stamps/stamp-prepare-tree-generic] Ошибка 2

Что не так?

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

Думаю, я понял, что было не так.

Я только что создал gist на GitHub с обновленными шагами.

Особенно важен шаг fakeroot debian/rules editconfigs перед финальной командой fakeroot для начала сборки.

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

Для успешной компиляции пользовательского ядра HWE Ubuntu Jammy (22.04) версии 6.8.0-45 с вашими занятиями по патчам, важно следовать нескольким критически важным шагам, а также учитывать возможные ошибки на этапе сборки. Основная проблема, с которой вы столкнулись, заключается в отсутствии Rust-библиотек и неполной чистоте исходного дерева.

Шаги для исправления ошибок при сборке:

  1. Установите необходимые зависимости:
    Убедитесь, что все необходимые пакеты установлены. В частности, вам понадобятся rustc, cargo и bindgen. Выполните команды:

    sudo apt update
    sudo apt install rustc cargo
  2. Проверка наличия bindgen:
    Убедитесь, что утилита bindgen установлена. Это можно сделать с помощью следующей команды:

    cargo install bindgen

    Убедитесь, что bindgen находится в вашем PATH.

  3. Очистка исходного дерева:
    Прежде чем продолжить сборку, выполните команду:

    make ARCH=x86 mrproper

    Это обеспечит чистоту дерева исходного кода.

  4. Добавление необходимых шагов в сборку:
    В вашей последовательности сборки важно добавить шаг:

    fakeroot debian/rules editconfigs

    Этот шаг необходим для настройки конфигурации перед компиляцией.

  5. Сборка генерируемых заголовков и модулей:
    После выполнения подготовительных шагов вам нужно заново выполнить команду:

    fakeroot debian/rules binary-headers binary-generic
  6. Проверка конфигурационного файла:
    Убедитесь, что в .config установлены все необходимые параметры. Можете использовать команду make nconfig для интерактивной настройки конфигурации ядра.

Итоговые рекомендации:

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

Используйте вашу Gist-ссылку как справочник для других пользователей, желающих повторить ваши шаги.

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

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