Не удается скомпилировать драйверы Clevo.

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

Я хотел скомпилировать этот репозиторий https://gitlab.com/evorster/clevo-drivers, но по какой-то причине, когда я пытаюсь запустить make, это не удается, и то же самое происходит, когда я запускаю make install. Кажется, что файл System.map отсутствует, но я читал, что этот файл вообще не обязателен для компиляции.

Ошибка с > make:

make -C /lib/modules/6.11.0-17-generic/build M=/home/sofia/Downloads/clevo-drivers-v4.3.2 modules
make[1]: Entering directory '/usr/src/linux-headers-6.11.0-17-generic'
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-13 (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
  You are using:           gcc-13 (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
  CC [M]  /home/sofia/Downloads/clevo-drivers-v4.3.2/src/tuxedo_nb05/tuxedo_nb05_kbd_backlight.o
/home/sofia/Downloads/clevo-drivers-v4.3.2/src/tuxedo_nb05/tuxedo_nb05_kbd_backlight.c:120:19: error: initialization of ‘void (*)(struct platform_device *)’ from incompatible pointer type ‘int (*)(struct platform_device *)’ [-Werror=incompatible-pointer-types]
  120 |         .remove = tuxedo_nb05_kbd_backlight_remove
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/sofia/Downloads/clevo-drivers-v4.3.2/src/tuxedo_nb05/tuxedo_nb05_kbd_backlight.c:120:19: note: (near initialization for ‘tuxedo_nb05_kbd_backlight_driver.<anonymous>.remove’)
cc1: some warnings being treated as errors
make[5]: *** [scripts/Makefile.build:244: /home/sofia/Downloads/clevo-drivers-v4.3.2/src/tuxedo_nb05/tuxedo_nb05_kbd_backlight.o] Error 1
make[4]: *** [scripts/Makefile.build:485: /home/sofia/Downloads/clevo-drivers-v4.3.2/src/tuxedo_nb05] Error 2
make[3]: *** [scripts/Makefile.build:485: /home/sofia/Downloads/clevo-drivers-v4.3.2/src] Error 2
make[2]: *** [/usr/src/linux-headers-6.11.0-17-generic/Makefile:1931: /home/sofia/Downloads/clevo-drivers-v4.3.2] Error 2
make[1]: *** [Makefile:224: __sub-make] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-6.11.0-17-generic'
make: *** [Makefile:29: all] Error 2

Ошибка с > make install

make -C /lib/modules/6.11.0-17-generic/build M=/home/sofia/Downloads/clevo-drivers-v4.3.2 modules_install
make[1]: Entering directory '/usr/src/linux-headers-6.11.0-17-generic'
  DEPMOD  /lib/modules/6.11.0-17-generic
Warning: modules_install: missing 'System.map' file. Skipping depmod.
make[1]: Leaving directory '/usr/src/linux-headers-6.11.0-17-generic'

Кто-нибудь может мне помочь? Я использую Ubuntu 24.04.2 LTS. Заранее большое спасибо.

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

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

Теория: Процесс компиляции и связанные с ним ошибки

Компиляция драйверов для Linux включает в себя несколько шагов: подготовка исходных кодов, настройка среды компиляции и выполнение самой компиляции с помощью make. Проблемы, с которыми вы столкнулись, говорят о нескольких аспектов, которые требуют внимания:

  1. Различия в версиях компиляторов: Вы используете GNU Compiler Collection (GCC) версию 13.3.0 на Ubuntu 24.04.1 LTS, однако в сообщении об ошибке говорится, что ядро было собрано такой же версией. Это предупреждение может быть вызвано различиями в настройках среды компиляции или другими мелкими изменениями в конфигурации.

  2. Инициализация указателей: Ошибка указывает на несовместимость типов в коде в файле tuxedo_nb05_kbd_backlight.c на 120-й строке. Это говорит о том, что функция tuxedo_nb05_kbd_backlight_remove объявлена с неверной сигнатурой. Для отладки важно убедиться, что сигнатуры всех функций совпадают с определениями в документации API ядра.

  3. Отсутствие файла System.map: Этот файл помогает отображать адреса функций ядра в символьные имена и обычно не обязателен для компиляции модулей, но без него могут быть проблемы на этапе установки модулей, так как depmod не может корректно осуществлять свои функции.

Пример: Демонстрация кода и типовых ошибок

Код, в который возникла ошибка, может выглядеть следующим образом:

struct platform_driver tuxedo_nb05_kbd_backlight_driver = {
    ...
    .remove = tuxedo_nb05_kbd_backlight_remove,
    ...
};

Ошибка, которая указана, происходит из-за несоответствия типа remove с требуемым void (*)(struct platform_device *). Вместо этого указывается int (*)(struct platform_device *).

Исправление:

Для решения данной проблемы необходимо скорректировать сигнатуру функции, например:

static void tuxedo_nb05_kbd_backlight_remove(struct platform_device *pdev) {
    ...
}

Применение: Как избежать и исправлять подобные ошибки

  1. Правильная настройка окружения: Убедитесь, что все инструменты (headers, compilers) обновлены и соответствуют используемой версии ядра. Поскольку вы используете Ubuntu, попробуйте следующее:
sudo apt update
sudo apt upgrade
  1. Корректировка кода: Используйте редактор кода для поиска и исправления несовпадений типов, особенно в местах, где должно быть возвращаемое значение void.

  2. Диагностика проблем с помощью дополнительных инструментариев: Используйте dmesg и journalctl для отладки и поиска дополнительных сообщений, которые могут указывать на наличие проблем.

  3. Проверка наличия System.map: Если он отсутствует, попробуйте сгенерировать его:

    sudo cp /usr/src/linux-headers-$(uname -r)/System.map /boot/System.map-$(uname -r)
  4. Создание Issue в репозитории: Если уверены, что проблема наклонная и касается всех пользователей, создайте запрос на исправление (issue) в репозитории. Это позволит разработчикам узнать о проблеме и, возможно, предложить исправления.

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

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

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