Как мне изменить директорию модулей, которую ищет ядро?

Вопрос или проблема

Я новичок в сборке ядра и модулей ядра, поэтому извините, если это плохой вопрос.

У меня установлена Centos 6.8, 2.6.32.642.el6.x86_64. Я пытаюсь изучить драйверы устройств и подобное, и мой справочный текст начинается с сборки ядра. Его инструкции кажутся немного устаревшими, поэтому я также гуглил.

Я пересобрал ядро, внеся небольшое изменение в main.c, после чего переместил полученный bzImage в директорию загрузки:

cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.32-custom.el6.x86_64

Затем я добавил запись в etc/grub.conf, которая идентична уже существующей, но с другим именем ядра.

После этого я перезагрузил систему, и при перезагрузке получил панику ядра, что указывает на то, что он не может найти modules.dep в /lib/modules/2.6.32.

Но всё, что я читал, говорит, что модули должны находиться в /lib/modules/2.6.32-custom.el6.x86_64,

Поэтому я попытался сделать мягкую ссылку с /lib/modules/2.6.32-642.el6.x86_64 на /lib/modules/2.6.32-custom.el6.x86_64:

ln -s /lib/modules/2.6.32-642.el6.x86_64 /lib/modules/2.6.32-642.el6.x86_64

Но, как и ожидалось, это не исправило ошибку, потому что (ядро?) ищет в /lib/modules/2.6.32/ вместо /lib/modules/2.6.32-custom.el6_x86_64.

Мой вопрос: где ДОЛЖНО искать ядро для модулей и/или как я могу это изменить, и/или что заставляет его смотреть туда, где оно смотрит?

Он получает версию из Makefile в корне дерева исходников ядра, объединяя VERSION и EXTRAVERSION вместе (это стандартная часть сборки ядра). Это становится именем поддиректории, используемым для нахождения модулей. RPM Red Hat для ядра создаются с использованием программы rpmbuild, которая помещает правильное значение EXTRAVERSION в этот файл в процессе сборки. Вы можете захотеть собрать ваше кастомное ядро таким образом. В противном случае вам придется редактировать Makefile самостоятельно и применять все патчи вручную.

Ответ или решение

Прежде всего, позвольте поздравить вас с решением заняться весьма увлекательной и познавательной сферой, связанной с ядром и драйверами устройств. Изменение директории модулей, которые ищет ядро, — задача, требующая определенного внимания, и я постараюсь подробно объяснить необходимые действия.

Проблема

Вы правильно указали, что ядро ищет модули в каталоге /lib/modules/<версия_ядра>/, и это поведение определяется конфигурацией ядра, а именно значением параметров VERSION и EXTRAVERSION, которые объединяются для формирования имени подкаталога. В вашем случае, можно заметить, что ядро не может найти файл modules.dep, что указывает на несоответствие в версиях.

Шаги для изменения директории модулей

  1. Изменение Makefile вашего ядра:
    В корне вашего исходного кода ядра, откройте файл Makefile. Найдите строки, которые отвечают за определение VERSION и EXTRAVERSION. Вам необходимо установить EXTRAVERSION на желаемое значение, например:

    EXTRAVERSION = -custom.el6.x86_64

    После этого, при сборке ядра, оно будет создано с правильной версией, и каталог /lib/modules/2.6.32-custom.el6.x86_64 будет создан для модулей.

  2. Сборка и установка нового ядра:
    После изменения Makefile, выполните сборку ядра. Если у вас уже есть скомпилированный bzImage, вам нужно также скомпилировать модули и установить их:

    make modules
    make modules_install

    Команда make modules_install создаст нужный каталог и разместит скомпилированные модули в нем.

  3. Обновление конфигурации загрузчика:
    Убедитесь, что в /etc/grub.conf указано правильное имя вашего нового ядра, например:

    title Custom Kernel
    kernel /vmlinuz-2.6.32-custom.el6.x86_64 ro root=/dev/your_root_partition
    initrd /initrd-2.6.32-custom.el6.x86_64.img

    Не забудьте, что если вы создаете начальный RAM-диск (initrd), его также необходимо пересоздать и указать правильный путь.

  4. Проверка работы:
    После внесения всех изменений и перезагрузки системы, выполнение команды:

    ls /lib/modules/

    Должно отобразить каталог 2.6.32-custom.el6.x86_64, и в случае успеха, ваше ядро должно нормально загрузиться без паники.

Заключение

Изменение директории поиска модулей ядра требует внимательности к деталям и точного понимания процесса сборки ядра. Лучше всего использовать подход сборки через RPM, чтобы избежать возможных ошибок. Однако, изменение исходных файлов также вполне допустимо, если вы прибегаете к ручной сборке.

Если у вас возникнут дополнительные вопросы или проблемы в процессе, не стесняйтесь обращаться за помощью на тематические форумы или сообщества, где опытные разработчики смогут предложить вам еще больше рекомендаций и советов.

Как и в любом обучающем процессе, ошибки — это возможность для роста и понимания, поэтому продолжайте изучать и экспериментировать!

Оцените материал
Добавить комментарий

Капча загружается...