Вопрос или проблема
Я пытаюсь скомпилировать vmlinuz-5.4.288, чтобы установить его в каталог /boot и сделать доступным как один из дополнительных вариантов загрузки, чтобы я мог установить некоторые графические драйверы, которые недоступны с более новыми версиями ядра.
Я пытаюсь следовать ответу, данному в:
Скачайте и извлеките исходный код ядра, которое вы хотите собрать
Я скачал архив linux-5.4.288.tar.xz и затем извлек его в специальный каталог, используя:
xz -cd linux-5.4.288.tar.xz | tar xvf -
Я могу извлечь архив, сначала создав каталог в той же папке:
mkdir linux-5.4.288
После перехода в каталог linux-5.4.288, когда я пытаюсь
sudo apt-get install libqt4-dev pkg-config
Но затем я сталкиваюсь с ошибкой компиляции:
E: Unable to locate package libqt4-dev
Я следую статье “E: Unable to locate package libqt4-dev” при попытке установить torch (Ubuntu 22.04), в которой ответ рекомендует мне сделать, и я пытаюсь:
$sudo add-apt-repository ppa:ubuntuhandbook1/ppa
Это приводит к следующим ошибкам:
stephen@stephen-All-Series:~$ sudo add-apt-repository ppa:ubuntuhandbook1/ppa
[sudo] пароль для stephen:
Репозиторий: 'Типы: deb
URI: https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu/
Suites: oracular
Компоненты: main
'
Описание:
Пакеты Qt4-x11, которые больше не поддерживаются официально! Используйте на свой страх и риск!
Больше информации: https://launchpad.net/~ubuntuhandbook1/+archive/ubuntu/ppa
Добавление репозитория.
Нажмите [ENTER] для продолжения или Ctrl-c для отмены.
Найдена существующая запись deb в /etc/apt/sources.list.d/ubuntuhandbook1-ubuntu-ppa-oracular.sources
Сбой:1 http://security.ubuntu.com/ubuntu oracular-security InRelease
Сбой:2 http://archive.ubuntu.com/ubuntu oracular InRelease
Сбой:3 http://archive.ubuntu.com/ubuntu oracular-updates InRelease
Сбой:4 http://archive.ubuntu.com/ubuntu oracular-backports InRelease
Сбой:5 https://ppa.launchpadcontent.net/graphics-drivers/ppa/ubuntu oracular InRelease
Игнор:6 https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular InRelease
Ошибка:7 https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular Release
404 Не найдено [IP: 185.125.190.80 443]
Чтение списков пакетов... Готово
E: Репозиторий 'https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular Release' не содержит файл Release.
N: Обновление из такого репозитория невозможно, и отключено по умолчанию.
N: См. apt-secure(8) manpage для создания репозитория и пользовательских деталей конфигурации.
stephen@stephen-All-Series:~$
Я игнорирую эти сообщения об ошибках, следуя статье, и затем пытаюсь:
$sudo apt-get update
Это приводит к следующему:
stephen@stephen-All-Series:~$ sudo apt-get update
Сбой:1 http://archive.ubuntu.com/ubuntu oracular InRelease
Сбой:2 http://security.ubuntu.com/ubuntu oracular-security InRelease
Сбой:3 http://archive.ubuntu.com/ubuntu oracular-updates InRelease
Сбой:4 http://archive.ubuntu.com/ubuntu oracular-backports InRelease
Сбой:5 https://ppa.launchpadcontent.net/graphics-drivers/ppa/ubuntu oracular InRelease
Игнор:6 https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular InRelease
Ошибка:7 https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular Release
404 Не найдено [IP: 185.125.190.80 443]
Чтение списков пакетов... Готово
E: Репозиторий 'https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular Release' не содержит файл Release.
N: Обновление из такого репозитория невозможно, и отключено по умолчанию.
N: См. apt-secure(8) manpage для создания репозитория и пользовательских деталей конфигурации.
stephen@stephen-All-Series:~$
Статья Что я могу сделать, если репозиторий/PPA не содержит файл Release? кажется релевантной, но я не понимаю, как применить её в этом случае.
и затем я пытаюсь:
$sudo apt-get install qt4-dev-tools libqt4-dev libqtcore4 libqtgui4
Однако это приводит к некоторым сообщениям об ошибках:
stephen@stephen-All-Series:~$ sudo apt-get install qt4-dev-tools libqt4-dev libqtcore4 libqtgui4
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
Пакет libqtcore4 недоступен, но упоминается в другом пакете.
Это может означать, что пакет отсутствует, устарел или
доступен только из другого источника
Тем не менее, следующие пакеты заменяют его:
qtchooser:i386 qtchooser
Пакет libqtgui4 недоступен, но упоминается в другом пакете.
Это может означать, что пакет отсутствует, устарел или
доступен только из другого источника
E: Невозможно найти пакет qt4-dev-tools
E: Невозможно найти пакет libqt4-dev
E: Пакет 'libqtcore4' не имеет кандидатов для установки
E: Пакет 'libqtgui4' не имеет кандидатов для установки
stephen@stephen-All-Series:~$
Я продолжаю, игнорируя предыдущие сообщения об ошибках:
stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make oldconfig
Я выбираю все стандартные параметры, нажимая tab возврата снова и снова, пока не перейду в командную строку. Затем я запускаю:
stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make
Компилятор продолжает с объектными .o файлами, но застревает на следующих ошибках:
certs/system_keyring.o
make[1]: *** Нет правила для сборки цели 'debian/canonical-certs.pem', необходимого для 'certs/x509_certificate_list'. Стоп.
make: *** [Makefile:1750: certs] Ошибка 2
Я ищу это сообщение об ошибке и нахожу соответствующую статью:
Компиляция ядра 5.11.11 и более поздних версий
Предлагается, что я запущу следующее:
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288/scripts# ./config --disable SYSTEM_TRUSTED_KEYS
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288/scripts# ./config --disable SYSTEM_REVOCATION_KEYS
Эти шаги выполняются без ошибок. Поэтому я возвращаюсь к make, выдавая команду:
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make
Я получаю те же сообщения об ошибках, поэтому я редактирую файл .config непосредственно в каталоге scripts, снова следуя Компиляция ядра 5.11.11 и более поздних версий, чтобы содержимое файла .config было следующим:
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
Я все еще застреваю на ошибках при make в каталоге linux-5.4.288:
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make
CALL scripts/checksyscalls.sh
CALL scripts/atomic/check-atomics.sh
DESCEND objtool
CHK include/generated/compile.h
CHK kernel/kheaders_data.tar.xz
make[1]: *** Нет правила для сборки цели 'debian/canonical-certs.pem', необходимого для 'certs/x509_certificate_list'. Стоп.
make: *** [Makefile:1750: certs] Ошибка 2
Кроме того, если я продолжу и запущу следующие шаги, у меня останутся только ошибки.
Как я могу скомпилировать linux-5.4 ядро под операционной системой Ubuntu 24.10?
Я все еще застрял на следующих ошибках, и я не знаю, как продолжить:
stephen@stephen-All-Series:~/Documents/Kernel/Version5b/linux-5.4.288$ sudo make
CALL scripts/checksyscalls.sh
CALL scripts/atomic/check-atomics.sh
DESCEND objtool
CHK include/generated/compile.h
CHK kernel/kheaders_data.tar.xz
make[1]: *** Нет правила для сборки цели 'debian/canonical-certs.pem', необходимого для 'certs/x509_certificate_list'. Стоп.
make: *** [Makefile:1750: certs] Ошибка 2
stephen@stephen-All-Series:~/Documents/Kernel/Version5b/linux-5.4.288$ sudo apt-get install qt4-dev-tools libqt4-dev libqtcore4 libqtgui4
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
Пакет libqtcore4 недоступен, но упоминается в другом пакете.
Это может означать, что пакет отсутствует, устарел или
доступен только из другого источника
Тем не менее, следующие пакеты заменяют его:
qtchooser:i386 qtchooser
Пакет libqtgui4 недоступен, но упоминается в другом пакете.
Это может означать, что пакет отсутствует, устарел или
доступен только из другого источника
E: Невозможно найти пакет qt4-dev-tools
E: Невозможно найти пакет libqt4-dev
E: Пакет 'libqtcore4' не имеет кандидатов для установки
E: Пакет 'libqtgui4' не имеет кандидатов для установки
stephen@stephen-All-Series:~/Documents/Kernel/Version5b/linux-5.4.288$
Обновление 8 января 2025 года:
Мне повезло найти эту ссылку Компиляция ядра вызывает ошибку “Нет правила для сборки цели ‘debian/certs/debian-uefi-certs.pem'”. Один из способов посмотреть на сообщение об ошибке
make[1]: *** Нет правила для сборки цели 'debian/canonical-certs.pem', необходимого для 'certs/x509_certificate_list'. Стоп.
был в том, что что-то было неправильно настроено. Мне было трудно найти, где может быть один из конфигурационных файлов. Наконец, у меня появилась идея попробовать проверить файл “.config”, который показывает:
#
# Сертификаты для проверки подписей
#
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_SYSTEM_TRUSTED_KEYRING=y
#SE CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_EXTRA_CERTIFICATE=y
CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096
CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
CONFIG_SYSTEM_REVOCATION_LIST=y
# конец Сертификатов для проверки подписей
Я был настолько уставшим от ошибки компилятора, что, как и выше, я закомментировал эту строку:
#SE CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
Просто для ясности, я поместил архив в папку
~stephen/Documents/Kernel/Version5b
и файл “.config” находился в каталоге, куда архив был распакован в папку linux-5.4.288 (после резервного копирования .config с cp в SEconfig):
root@stephen-All-Series:~# ls ~stephen/Documents/Kernel/Version5b/linux-5.4.288/.config
/home/stephen/Documents/Kernel/Version5b/linux-5.4.288/.config
Я выполнил команду make:
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make -f ./Makefile all
В настоящее время все еще компилируется без ошибок. Надеюсь установить графический драйвер NVIDIA, который можно установить только на ядро 5 при загрузке в дополнительные опции. Но сначала нужно завершить компиляцию, и пока я до этого не дошел, компиляция, слава Богу, еще продолжается.
Просто подчеркну, я не рекомендую этот подход для каких-либо возможных конфиденциальных настроек безопасности. Скорее, я пытаюсь достичь тестовой платформы, где я смогу более эффективно решить или подать отчеты об ошибках драйверов графических карт 24.10 NVIDIA, чтобы получить полную поддержку не только на DVI, но и HDMI и DP порты, которые еще не работают с драйвером Canonical (так как для старых карт драйвер NVIDIA даже не устанавливается с более новыми Ubuntu 24.10), чтобы попытаться разгадать эту загадку для многих графических карт NVIDIA, которые сейчас не имеют полной поддержки.
Обновление: 9 июля 2025 года
Компиляция ядра шла всю ночь, пока не возникла следующая ошибка:
MODINFO modules.builtin.modinfo
BTF: .tmp_vmlinux.btf: pahole (pahole) недоступен
Не удалось создать BTF для vmlinux
Попробуйте отключить CONFIG_DEBUG_INFO_BTF
make: *** [Makefile:1116: vmlinux] Ошибка 1
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288#
Я запустил:
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# nano ./.config
И установил:
#SE CONFIG_DEBUG_INFO_BTF=y установить как n вместо этого
CONFIG_DEBUG_INFO_BTF=n
И я сохранил изменения, и выполнил команду:
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make -f ./Makefile
Компиляция продолжилась, и я все еще жду результата компиляции.
Эта компиляция завершилась успешно, но затем я не мог найти файл ядра. Поэтому я нашел следующие статьи Linux kernel release 6.x http://kernel.org/ и Как быстро собрать усеченное Linux ядро. Я запустил:
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make install
Это дало:
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make install
sh ./arch/x86/boot/install.sh 5.4.288 arch/x86/boot/bzImage \
System.map "/boot"
run-parts: выполняется /etc/kernel/postinst.d/dkms 5.4.288 /boot/vmlinuz-5.4.288
run-parts: выполняется /etc/kernel/postinst.d/initramfs-tools 5.4.288 /boot/vmlinuz-5.4.288
update-initramfs: Создание /boot/initrd.img-5.4.288
W: сжатие zstd (CONFIG_RD_ZSTD) не поддерживается ядром, используется gzip
run-parts: выполняется /etc/kernel/postinst.d/kdump-tools 5.4.288 /boot/vmlinuz-5.4.288
kdump-tools: Создание /var/lib/kdump/initrd.img-5.4.288
W: сжатие zstd (CONFIG_RD_ZSTD) не поддерживается ядром, используется gzip
run-parts: выполняется /etc/kernel/postinst.d/unattended-upgrades 5.4.288 /boot/vmlinuz-5.4.288
run-parts: выполняется /etc/kernel/postinst.d/update-notifier 5.4.288 /boot/vmlinuz-5.4.288
run-parts: выполняется /etc/kernel/postinst.d/xx-update-initrd-links 5.4.288 /boot/vmlinuz-5.4.288
I: /boot/initrd.img.old теперь является символической ссылкой на initrd.img-6.11.0-13-generic
I: /boot/initrd.img теперь является символической ссылкой на initrd.img-5.4.288
run-parts: выполняется /etc/kernel/postinst.d/zz-shim 5.4.288 /boot/vmlinuz-5.4.288
run-parts: выполняется /etc/kernel/postinst.d/zz-update-grub 5.4.288 /boot/vmlinuz-5.4.288
Является источником файла `/etc/default/grub'
Является источником файла `/etc/default/grub.d/kdump-tools.cfg'
Создание файла конфигурации grub ...
Найден linux-образ: /boot/vmlinuz-6.11.0-13-generic
Найден initrd-образ: /boot/initrd.img-6.11.0-13-generic
Найден linux-образ: /boot/vmlinuz-6.11.0-12-generic
Найден initrd-образ: /boot/initrd.img-6.11.0-12-generic
Найден linux-образ: /boot/vmlinuz-5.4.288
Найден initrd-образ: /boot/initrd.img-5.4.288
Найден 64-битный EFI-образ memtest86+: /boot/memtest86+x64.efi
Предупреждение: os-prober не будет выполнен для обнаружения других загрузочных разделов.
Системы на них не будут добавлены в конфигурацию загрузки GRUB.
Проверьте запись документации GRUB_DISABLE_OS_PROBER.
Добавление записи в меню загрузки для настроек UEFI Firmware ...
готово
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288#
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# ls /boot
config-5.4.288 initrd.img initrd.img.old System.map-5.4.288 vmlinuz-6.11.0-12-generic
config-6.11.0-12-generic initrd.img-5.4.288 memtest86+ia32.bin System.map-6.11.0-12-generic vmlinuz-6.11.0-13-generic
config-6.11.0-13-generic initrd.img-6.11.0-12-generic memtest86+ia32.efi System.map-6.11.0-13-generic vmlinuz.old
efi initrd.img-6.11.0-13-generic memtest86+x64.bin vmlinuz
grub initrd.img-6.11.0-8-generic memtest86+x64.efi vmlinuz-5.4.288
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288#
Итак, ядро, по-видимому, установлено правильно. Просто на всякий случай я хочу убедиться, что GRUB обновлён успешно, поэтому я запускаю update-grub следующим образом:
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# update-grub
Является источником файла `/etc/default/grub'
Является источником файла `/etc/default/grub.d/kdump-tools.cfg'
Создание файла конфигурации grub ...
Найден linux-образ: /boot/vmlinuz-6.11.0-13-generic
Найден initrd-образ: /boot/initrd.img-6.11.0-13-generic
Найден linux-образ: /boot/vmlinuz-6.11.0-12-generic
Найден initrd-образ: /boot/initrd.img-6.11.0-12-generic
Найден linux-образ: /boot/vmlinuz-5.4.288
Найден initrd-образ: /boot/initrd.img-5.4.288
Найден 64-битный EFI-образ memtest86+: /boot/memtest86+x64.efi
Предупреждение: os-prober не будет выполнен для обнаружения других загрузочных разделов.
Системы на них не будут добавлены в конфигурацию загрузки GRUB.
Проверьте запись документации GRUB_DISABLE_OS_PROBER.
Добавление записи в меню загрузки для настроек UEFI Firmware ...
готово
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288#
Благодаря Богу, всё пока выглядит многообещающе. Что касается названия статьи, она кажется завершенной. Но я хочу убедиться, что эта версия может использовать драйверы NVIDIA после перезагрузки.
Ответ или решение
Компиляция ядра Linux Ubuntu из архива linux-5.4.288.tar.xz в Ubuntu 24.10 представляет собой довольно сложную задачу, требующую тщательной подготовки и выполнения нескольких шагов. Ниже приведены основные этапы, которые помогут вам с этой задачей.
Шаг 1: Подготовка окружения
-
Установите необходимые пакеты. Для компиляции ядра вам необходимы инструменты для сборки и дополнительные зависимости. Выполните команду:
sudo apt-get update sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev
-
Удалите или обновите репозитории PPA. Ошибки, связанные с PPA (например, "E: Unable to locate package libqt4-dev"), указывают на устаревшие или неправильные источники. Убедитесь, что ваши репозитории актуальны, и удалите устаревшие записи из
/etc/apt/sources.list.d/
.
Шаг 2: Извлечение исходников ядра
- Извлечение архива. Убедитесь, что архив извлечён правильно:
tar -xvf linux-5.4.288.tar.xz cd linux-5.4.288
Шаг 3: Конфигурация ядра
-
Скопируйте текущую конфигурацию ядра. Это можно сделать, используя существующую конфигурацию как основу:
cp /boot/config-$(uname -r) .config
-
Обновите конфигурацию. Примените старую конфигурацию к новому ядру:
make oldconfig
На появляющиеся вопросы отвечайте, основываясь на ваших предпочтениях или выбирайте опции по умолчанию, нажав Enter.
Шаг 4: Компиляция ядра
-
Убедитесь, что отключены доверенные ключи. Редактируйте файл
.config
, если возникают ошибки, связанные сdebian/canonical-certs.pem
:nano .config
Убедитесь, что строки
CONFIG_SYSTEM_TRUSTED_KEYS
иCONFIG_SYSTEM_REVOCATION_KEYS
отсутствуют или равны пустой строке. -
Компилируйте ядро. Компиляция может занять значительное время:
make -j$(nproc)
Шаг 5: Установка ядра
-
Установите ядро. После успешной компиляции установите новое ядро:
sudo make modules_install sudo make install
-
Обновите GRUB. Убедитесь, что новое ядро добавлено в меню загрузчика GRUB:
sudo update-grub
Шаг 6: Перезагрузка и тестирование
Перезагрузите систему и выберите новое ядро в меню GRUB. Проверьте, работают ли новые драйверы NVIDIA, которые недоступны в новых версиях ядра.
SEO Оптимизация
- Ключевые слова: Компиляция ядра Ubuntu, установка ядра Linux, Linux kernel 5.4.288.
- Описание: Рекомендуется использовать описания с упоминанием версии ядра и специфики Ubuntu 24.10 для улучшения обнаруживаемости статьи.
Следуя описанным шагам, вы сможете успешно скомпилировать и установить нужную версию ядра в вашей системе. Удачи!