Ссылки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
https://www.kernel.org/ https://debianforum.ru/index.php?topic=12392.0 https://stackoverflow.com/questions/46008624/how-to-fix-fatal-error-openssl-opensslv-h-no-such-file-or-directory-in-redhat https://github.com/ROCm-Developer-Tools/HIP/issues/130 https://stackoverflow.com/questions/61657707/btf-tmp-vmlinux-btf-pahole-pahole-is-not-available https://b14esh.com/nix/source-kernel/kernel.html http://www.kroah.com/lkn/ https://cateee.net/lkddb/web-lkddb/ https://wiki.archlinux.org/title/Kernel_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)/Traditional_compilation_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) http://citforum.ru/operating_systems/linux/lkmpg/ https://wirenboard.com/wiki/How_To_Build_Linux_Kernel |
make[2]: *** Нет правила для сборки цели «debian/certs/benh@debian.org.cert.pem», требуемой для «certs/x509_certificate_list». Останов.
make[1]: *** No rule to make target ‘debian/certs/debian-uefi-certs.pem’, needed by ‘certs/x509_certificate_list’. Stop.
1 |
Попробуй удалить строки с CONFIG_SYSTEM_TRUSTED_KEY и CONFIG_MODULE_SIG_KEY из .config файла. Очень похоже, на вот эту проблему |
BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
1 |
apt install dwarves |
Не обходимые пакеты для сборки:
1 2 3 4 5 6 7 8 9 10 11 12 |
apt install git make gcc linux-libc-dev linux-headers-amd64 pkg-config libncurses-dev flex bison libssl-dev libelf-dev dwarves rsync bc fakeroot build-essential xz-utils libncurses5-dev git - отслеживает и записывает все изменения исходного кода во время разработки fakeroot - упаковочный инструмент, создающий фальшивую корневую среду build-essential - Устанавливает инструменты разработки, такие как C, C++, gcc и g++. ncurses-dev - Библиотека программирования, предоставляющая API для текстовых терминалов xz-utils - обеспечивает быстрое сжатие и распаковку файлов libssl-dev - поддерживает SSL и TSL, которые шифруют данные и делают интернет-соединение безопасным bc (Basic Calculator) - математический язык сценариев, поддерживающий интерактивное выполнение операторов flex (Fast Lexical Analyzer Generator) - генерирует лексические анализаторы, преобразующие символы в токены libelf-dev - выдает общую библиотеку для управления файлами ELF (исполняемые файлы, дампы ядра и объектный код) bison - генератор парсера GNU, который преобразует описание грамматики в программу на языке C. |
Сборка ядра(компиляция):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
0. Переходим в каталог с исходниками: cd /usr/src/ 1. Скачиваем ядро с www.kernel.org: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.17.1.tar.xz 2. Распаковываем: # tar xvf lilnux-X.X.X-rcX.tar.gz tar xvf linux-5.17.1.tar.xz 3. Переходим в каталог ядра: cd /usr/src/linux-5.17.1 4. Достаем настройки установленного ядра !!! make config если конфига нет создаем новый !!! make olddefconfig уведомит программу о том, что вы, как бы, ответили на все задаваемые ею вопросы положительно. !!! make oldnoconfig даст понять команде, что на все вопросы вы дали отрицательные ответы. !!! make oldconfig программа в интерактивной форме задаст вам вопросы !!! make localmodconfig создаст конфигурацию на основе текущей конфигурации и загруженных модулей !!! !!! если не хотим выставлять все галочки в конфигурации нового ядра с нуля, берём готовый config либо из /boot либо из /proc: !!! cp /boot/config-$( uname -r ) .config !!! zcat /proc/config.gz > .config make oldconfig 5. Если что то требуется добавить в ядро выполняем: make menuconfig 6.0 Собираем модули ядра make modules 6.1 Устанавливаем модули ядра в систему make modules_install 6.2 Собираем ядро: #make -j2 V=s - вывод "-j2" будет использовать два ядра, "V=s" подробный вывод сборки make -j2 V=s 7. Устанавливаем ядро в систему make install |
Собираем deb пакет для установки:
1 2 3 4 |
!!! make-kpkg находится на пенсии, официальный путь Debian — make deb-pkg. !!! В официальном руководстве по ядру Debian используется make deb-pkg make deb-pkg |
Удаление ядра:
1 2 3 4 5 6 7 8 9 10 |
0. Удаляем файлы ядра: rm /boot/vmlinuz-5.17.1 rm /boot/vmlinuz-5.17.1 rm /boot/config-5.17.1 rm /boot/initrd.img-5.17.1 rm /boot/System.map-5.17.1 rm -Rf /lib/modules/5.17.1/ 1. А затем необходимо обновить конфигурацию Grub: sudo update-grub2 |
Пере собираем ядро debian
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
0. ставим исходники apt install linux-source-5.16 1. Идем в каталог /usr/src cd /usr/src/ 2. Распаковываем tar xvf linux-source-5.16.tar.xz 3. Входим в каталог cd linux-source-5.16 4. Приносим конфигурацию с текущей системы cp /boot/config-$( uname -r ) .config 5. Готовим пакеты make modules make deb-pkg -j4 |
raspberry pi
1 |
sudo apt install raspberrypi-kernel-headers |
Иногда очень надо поставить конкретное ядро:
1 2 3 4 |
apt search linux-image | grep 5.15 | grep 71 apt search linux-headers | grep 5.15 | grep 71 apt install linux-headers-5.15.0-71-generic linux-image-5.15.0-71-generic |
Пример установки стороннего драйвера
1 2 3 4 5 6 7 8 |
cat README cd install-dir/src/bh2_linux_driver make modules make modules_install install -m 644 -D -t /lib/modules/$(uname -r)/extra bh2/bh2.ko depmod |
Как достать .config из рабочей системы:
1 2 3 4 5 6 7 8 9 |
https://wiki.gentoo.org/wiki/Kernel/IKCONFIG_support https://wiki.gentoo.org/wiki/Kernel/Configuration/ru загружаем модуль config ( часто включено по умолчанию) modprobe configs после этого действия появится фай /proc/config.gz Вот так его можно сохранить zcat /proc/config.gz > .config Просто почитать его можно так: less /proc/config.gz |
Патчи на ядро:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Для применения патча используйте команду patch. Например, для применения патча 0001-arch-arm64-dts-lx2162-add-som-and-solidnet-device-tr.patch выполните следующую команду: patch -p1 < 0001-arch-arm64-dts-lx2162-add-som-and-solidnet-device-tr.patch Параметр -p1 указывает утилите patch пропустить один компонент пути в заголовке патча. Обычно это нужно, чтобы корректно применить патч в нужной директории. Проверьте, что патч применился корректно: Убедитесь, что патч применился без ошибок. Команда patch должна вывести информацию о том, какие файлы были изменены. Если есть конфликты, их нужно будет разрешить вручную. Соберите ядро: После применения патча можно приступить к сборке ядра. Обычно это делается с помощью следующих команд: make menuconfig # Настройка конфигурации ядра make # Сборка ядра make modules_install make install |
Патчи на ядро скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/bin/bash # Переменная с директорией, где находятся патчи PATCH_DIR="./patches" # Перейдите в каталог с исходным кодом ядра cd linux # Применение каждого патча в каталоге for patch in $PATCH_DIR/*.patch; do echo "Применяем патч $patch" patch -p1 < "$patch" if [ $? -ne 0 ]; then echo "Ошибка при применении патча $patch" exit 1 # Иногда патч может быть уже применен и тогда скрипт тоже завершится # Можно закомментировать "exit 1" и смотреть по случаю fi done echo "Все патчи применены успешно" |
Еще один вариант применения патчей
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Перейдем в каталог в котором будем производить сборку: cd /usr/src Патчи на ядро брать тут: git clone https://github.com/SolidRun/lx2160a_build.git Ядро и применять патчи вот так: git clone --depth 1 https://github.com/nxp-qoriq/linux -b LSDK-21.08 Перейдем в скаченный каталог: cd linux Докинем конфиг: cp ../lx2160a_build/configs/linux/lx2k_additions.config arch/arm64/configs/ Выполним слияние конфигов: ./scripts/kconfig/merge_config.sh arch/arm64/configs/defconfig arch/arm64/configs/lsdk.config arch/arm64/configs/lx2k_additions.config Применяем патчи: git am ../lx2160a_build/patches/linux-LSDK-21.08/*.patch |