Рубрики
kernel \ source \ пакеты \ исходники

debian 11 / vanile stable kernel / install / ванильное ядро / сборка ядра

Ссылки:

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

kernel / usb / blacklist / make
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.

Попробуй удалить строки с CONFIG_SYSTEM_TRUSTED_KEY и CONFIG_MODULE_SIG_KEY из .config файла. Очень похоже, на вот эту проблему

BTF: .tmp_vmlinux.btf: pahole (pahole) is not available

apt install dwarves

Не обходимые пакеты для сборки:

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.

Сборка ядра(компиляция):

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 пакет для установки:

!!! make-kpkg находится на пенсии, официальный путь Debian — make deb-pkg.
!!! В официальном руководстве по ядру Debian используется make deb-pkg

make deb-pkg

Удаление ядра:

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

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

sudo apt install raspberrypi-kernel-headers

Иногда очень надо поставить конкретное ядро:

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

Пример установки стороннего драйвера

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 из рабочей системы:

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

Патчи на ядро:

Для применения патча используйте команду 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

Патчи на ядро скрипт:


#!/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 "Все патчи применены успешно"


Еще один вариант применения патчей

Перейдем в каталог в котором будем производить сборку:
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