Перекомпилирую свое кастомное ядро, и мой .config каждый раз сбрасывается на старый.

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

Я пытаюсь перекомпилировать свое ядро. Я внес небольшое изменение в drivers/media/usb/uvc/uvc_driver.c и добавил pr_info(), чтобы увидеть в dmesg, работает ли оно. Я также изменил файл .config на CONFIG_USB_VIDEO_CLASS=y. Но каждый раз, когда я перекомпилирую ядро с помощью make all, мои изменения в .config сбрасываются на прежние. Что мне делать? Я просто хочу, чтобы этот модуль работал, могу ли я сделать что-то другое, чтобы скомпилировать только этот модуль? И как мне остановить сброс .config каждый раз, когда я компилирую?

Сделайте это правильно

  1. Скачайте стандартное ядро с: The Linux Kernel Archive
  2. Распакуйте архив за пределами местоположения ядра вашей дистрибуции. Другими словами: НЕ тестируйте ваш патч на ядре вашей дистрибуции
  3. Прочитайте Включение вашего кода в ядро
  4. Запустите make в каталоге из Шага 2, который не должен быть связан символической ссылкой с чем-либо связанным с дистрибуцией.

Что, по моему мнению, не так

  1. Автор темы запускает make в расположении ядра дистрибуции, которое указывает на стандартный файл .config, поддерживаемый дистрибуцией.
  2. Для получения более конкретных инструкций нам нужно знать, какую дистрибуцию использует автор темы, так как каждая дистрибуция имеет свои процедуры для сборки пользовательских ядер.

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

Если вы являетесь ИТ-специалистом и пытаетесь перекомпилировать пользовательское ядро Linux, но сталкиваетесь с проблемой, когда файл .config возвращается к прежним настройкам после каждой компиляции, важно понимать природу этой проблемы и правильно настроить процесс. Ниже я изложу подробные шаги и объяснения, которые помогут решить данную проблему.

Теоретическая часть

Когда вы модифицируете файл конфигурации ядра .config, система может сбрасывать ваши настройки из-за выполнения команды make all в некорректной директории или пересоздания .config на основе конфигурации, сохраненной дистрибутивом. Ядро Linux обладает системой конфигурации, которая должна быть корректно настроена, чтобы можно было применить изменения. Несоответствие директории или использование распределённой конфигурации может автоматически перезаписывать ваши пользовательские настройки.

Пример проблемы

Рассмотрим ваш пример. Вы изменили файл drivers/media/usb/uvc/uvc_driver.c, добавив строку с pr_info() для вывода отладочной информации в dmesg, и изменили опцию в .config, установив CONFIG_USB_VIDEO_CLASS=y. Однако при каждом запуске make all ваши изменения в файле .config теряются.

Применение решения

Шаги для решения проблемы:

  1. Скачайте стандартное ядро:
    Начните с загрузки стандартного ядра с сайта The Linux Kernel Archive. Это гарантирует, что вы работаете с чистой версией ядра, без дополнительных изменений от вашего дистрибутива.

  2. Извлечение архива ядра:
    Распакуйте архив ядра в отдельной директории, не связанной с дистрибутивным ядром Linux. Это поможет избежать случайного изменения дистрибутивных файлов и поддержит чистоту экспериментов.

  3. Настройка окружения:
    Перейдите в каталог с извлечёнными файлами ядра. Убедитесь, что в этой директории нет символических ссылок на системные файлы дистрибутива или на глобальные файлы конфигурации. Это критически важно для обеспечения того, что ваши изменения не будут перезаписаны системными файловыми структурами.

  4. Измените ваш файл .config:
    Используйте конфигурационные утилиты, такие как make menuconfig или make xconfig, чтобы внести изменения в конфигурацию ядра. После этого убедитесь, что сохраняете изменения локально и что они корректно отображаются в файле .config.

  5. Соберите только нужный модуль:
    Если вам необходимо перезагрузить только один изменённый модуль (например, uvc), вы можете использовать целевые команды компиляции только для этого модуля. Выполните:

    make M=drivers/media/usb/uvc/

    Это скомпилирует только те файлы, которые относятся к изменённому модулю, не затрагивая другие части ядра. Такое действие существенно сэкономит ваше время.

  6. Проверка и установка модуля:
    После компиляции модулей убедитесь, что загружены актуальные версии модулей с использованием modprobe или напрямую через insmod с указанием полного пути к модулю.

  7. Использование правильного ядра:
    Убедитесь, что после загрузки новой конфигурации вы используете именно тот экземпляр ядра, который компилировали. Это важно для отладки и контроля изменений. Используйте команды uname -r и lsmod, чтобы удостовериться в правильной версии ядра и загруженных модулях.

Возможные ошибки и их решения

  • Системные прерывания или потеря связи с терминалом могут привести к повторным настройкам конфигурации. Убедитесь, что у вас есть устойчивое соединение и доступ на запись в каталог с ядром.

  • Кеширование конфигурации: Очистите все предыдущие сборочные артефакты, выполнив make clean или make mrproper перед началом внесения изменений и компиляцией.

Следование указанным рекомендациям поможет избежать большинства распространённых проблем при компиляции пользовательского ядра Linux и настройке конфигурации. Применение данных шагов в постоянной практике позволит вам достичь успешного управления процессом сборки и развертывания изменений в рабочей среде.

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

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