Команда ‘make modules’ не создает все модули

#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.

Описание проблемы:

  1. Я обновил ядро до 5.0.0 с 3.x.x (встроенное в CentOS7) несколько дней назад;
  2. Сегодня я собираюсь обновить ее до версии 5.3.0-rc6 ;
  3. Перед обновлением я выполнил полную очистку с помощью make distclean ;
  4. После make , make modules_install и make install я попытался перезагрузиться с новым ядром;
  5. Но загрузка завершилась неудачно с: error: /vmlinuz-5.3.0-rc6 has invalid signature.
  6. После долгого поиска в Google я пришел сюда, слава богу!

Шаги решения:

  1. Скопируйте существующий конфигурационный файл из /boot
     cp -p /boot/config-3.10.0-957.27.2.el7.x86_64 .config
      
  2. Настройте дополнительные параметры с помощью menuconfig
     make menuconfig
      
  3. Сборка
     make -j $(nproc)
    sudo make modules_install
    sudo make install
      
  4. Покажите свою новую версию ядра
     sudo grep ^menuentry /boot/efi/EFI/centos/grub.cfg | cut -d "'" -f2
      
  5. Установите загрузочное ядро по умолчанию
     sudo grub2-set-default 'CentOS Linux (5.3.0-rc6 ) 7 (Core)'
      
  6. Загрузка прошла успешно!