Вопрос или проблема
Я хотел скомпилировать этот репозиторий 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
. Проблемы, с которыми вы столкнулись, говорят о нескольких аспектов, которые требуют внимания:
-
Различия в версиях компиляторов: Вы используете GNU Compiler Collection (GCC) версию 13.3.0 на Ubuntu 24.04.1 LTS, однако в сообщении об ошибке говорится, что ядро было собрано такой же версией. Это предупреждение может быть вызвано различиями в настройках среды компиляции или другими мелкими изменениями в конфигурации.
-
Инициализация указателей: Ошибка указывает на несовместимость типов в коде в файле
tuxedo_nb05_kbd_backlight.c
на 120-й строке. Это говорит о том, что функцияtuxedo_nb05_kbd_backlight_remove
объявлена с неверной сигнатурой. Для отладки важно убедиться, что сигнатуры всех функций совпадают с определениями в документации API ядра. -
Отсутствие файла 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) {
...
}
Применение: Как избежать и исправлять подобные ошибки
- Правильная настройка окружения: Убедитесь, что все инструменты (headers, compilers) обновлены и соответствуют используемой версии ядра. Поскольку вы используете Ubuntu, попробуйте следующее:
sudo apt update
sudo apt upgrade
-
Корректировка кода: Используйте редактор кода для поиска и исправления несовпадений типов, особенно в местах, где должно быть возвращаемое значение void.
-
Диагностика проблем с помощью дополнительных инструментариев: Используйте
dmesg
иjournalctl
для отладки и поиска дополнительных сообщений, которые могут указывать на наличие проблем. -
Проверка наличия System.map: Если он отсутствует, попробуйте сгенерировать его:
sudo cp /usr/src/linux-headers-$(uname -r)/System.map /boot/System.map-$(uname -r)
-
Создание Issue в репозитории: Если уверены, что проблема наклонная и касается всех пользователей, создайте запрос на исправление (issue) в репозитории. Это позволит разработчикам узнать о проблеме и, возможно, предложить исправления.
Следуя предложенным шагам и принимая во внимание опыт других пользователей, вы сможете успешно скомпилировать и установить драйверы. Не забывайте всегда читать сопроводительную документацию, которая может содержать важные подсказки и инструкции.