#linux #linux-kernel #compilation #kernel-module
#linux #linux-ядро #Сборник #kernel-module
Вопрос:
Я использую Fedora 14 64 бит.
Я клонировал дерево исходных текстов ядра из git://git.kernel.org/pub /scm/linux /kernel /git / torvalds /linux-2.6.git
Около недели назад я скомпилировал и обновил ядро с 2.6.35 до 2.6.39, все прошло довольно гладко, все, что я делал, было очень прямолинейно:
make menuconfig
make oldconfig
make -j8
make modules_install amp;amp; install
Затем я добавил фиктивный системный вызов (я следил за этим в книге Роберта Лав «Разработка ядра Linux») и попытался скомпилировать снова, ядро скомпилировалось нормально, но когда я выдал:
[root@xps420 Kernel]# make modules
CHK include/linux/version.h
CHK include/generated/utsrelease.h
CALL scripts/checksyscalls.sh
Building modules, stage 2.
MODPOST 4 modules
она создала только 4 модуля, ранее было более 2000 модулей.
Я думал, что проблема была в моем фиктивном системном вызове, я отменил все изменения и попробовал снова, с тем же результатом.
Опять же, шаги, которые я предпринял, были:
make menuconfig
make oldconfig
make -j8
make modules ----> suspicious
Я не уверен, что является причиной этого.
РЕДАКТИРОВАТЬ: Немного больше информации, я запускаю make clean
перед перекомпиляцией, но все равно было создано только 4 модуля. В какой-то момент я сделал make modules_install
и проверил /lib/modules/[ver]
, туда были скопированы только эти 4 модуля. Я должен был остановиться на этом, но я пошел дальше и запустил make install
в любом случае, он установил ядро, но не смог загрузиться с ним.
РЕДАКТИРОВАТЬ: я только что загрузил стабильный выпуск (2.6.39.1) с kernel.org после выполнения описанных выше шагов произошло то же самое. Это странно. Возможно, что-то в моей системе испортило это : (Надеюсь, кто-то сталкивался с этим и пролил некоторый свет.
Комментарии:
1. Чтобы люди знали, что вы нашли решение, внесите свою третью правку, вставьте ее в качестве ответа и установите флажок ‘Принять’.
Ответ №1:
Хорошо, после нескольких чашек кофе и множества поисков в Google я пока не знаю, как это все работает, но, похоже, когда я впервые обновил ядро, .config был основан на конфигурации запущенного ядра и включал все необходимые модули, поэтому все работало нормально? Затем каким-то образом при последующих компиляциях почти все модули не были настроены в .config (за исключением 4 упомянутых выше). Короче говоря, я использовал старый файл .config и запустил menuconfig для внесения дополнительных изменений, похоже, это решает мою проблему. Спасибо!
Ответ №2:
Если вы не выполните «make clean», предыдущие результаты компиляции все еще будут там. Будут восстановлены только модули, затронутые измененным вами кодом.
Комментарии:
1. Извините, я должен был упомянуть, что я действительно делал make clean с тем же результатом.
2. Где вы распаковали только что загруженное ядро?
3. Привет, я открываю свою папку загрузки, это / home / wliao / Downloads / linux-2.6.39.1, но местоположение должно быть неактуальным?
4. Просто хотел убедиться, что вы не отключили ее поверх существующей сборки ядра из-за этой проблемы.
Ответ №3:
Возможно, только эти четыре модуля зависят от файлов, к которым вы прикасались. Если вы хотите подтвердить это, выполните make clean
, а затем попробуйте выполнить сборку снова и посмотрите, не получится ли у вас снова скомпилировать все модули. Конечно, это займет намного больше времени!
Комментарии:
1. Привет, да, я сделал make clean, но это не помогло
Ответ №4:
Попробуйте make V=1 ...
подробный вывод. Или даже V=2
.
Ответ №5:
Я столкнулся с той же проблемой и решил ее, следуя совету wliao.
Описание проблемы:
- Я обновил ядро до 5.0.0 с 3.x.x (встроенное в CentOS7) несколько дней назад;
- Сегодня я собираюсь обновить ее до версии 5.3.0-rc6 ;
- Перед обновлением я выполнил полную очистку с помощью
make distclean
; - После
make
,make modules_install
иmake install
я попытался перезагрузиться с новым ядром; - Но загрузка завершилась неудачно с:
error: /vmlinuz-5.3.0-rc6 has invalid signature.
- После долгого поиска в Google я пришел сюда, слава богу!
Шаги решения:
- Скопируйте существующий конфигурационный файл из /boot
cp -p /boot/config-3.10.0-957.27.2.el7.x86_64 .config
- Настройте дополнительные параметры с помощью
menuconfig
make menuconfig
- Сборка
make -j $(nproc) sudo make modules_install sudo make install
- Покажите свою новую версию ядра
sudo grep ^menuentry /boot/efi/EFI/centos/grub.cfg | cut -d "'" -f2
- Установите загрузочное ядро по умолчанию
sudo grub2-set-default 'CentOS Linux (5.3.0-rc6 ) 7 (Core)'
- Загрузка прошла успешно!