Я внес некоторые изменения в серийный драйвер на моем компьютере с Linux. Я пытался скомпилировать модуль и перезагрузить его, но он выдает некоторые ошибки. Вместо этого, если я перекомпилирую все ядро, оно работает нормально.

Можно ли внести изменения в драйвер последовательного порта, скомпилировать только этот модуль и загрузить его?

Спасибо

1 ответ1

0

Как вы упомянули, успешно выполнив «перекомпиляцию всего ядра», вы готовы к работе без повторной перекомпиляции всего ядра. Большинство пользователей не в состоянии сделать модуль только для компиляции только потому, что не все необходимые источники библиотеки заголовков доступны. Полная компиляция ядра означает наличие другого необходимого файла lib.

Теперь, что вам нужно сделать, это выдать:

sudo make prepare 

только после выдачи

sudo make config 

или же

sudo make oldconfig

Позвольте мне дать вам пошаговую команду (грязным способом, к вашему сведению :)

>cd /usr/src/linux-source-X.XX.X

>sudo cp /usr/src/linux-headers-`uname -r`/Module.symvers .
>sudo cp /boot/config-X.xx.x-xx-YYYY .config

Вышеуказанные шаги одинаковы для компиляции полного ядра или модуля только мак. Теперь, если вам нужно создать модуль ТОЛЬКО, пусть ваша команда make «подготовит» себя с необходимым изменением автоматически связанных файлов lib/config для модулей на цели, которые нужно сделать. Попробуйте две команды ниже:

>sudo make -C  /usr/src/linux-headers-`uname -r`/ prepare
>sudo make -C /usr/src/linux-headers-`uname -r`/ M=/usr/src/linux-source-X.xx.X/drivers/directory/of/modules/you/compiling/only prepare modules

Насколько я помню, я добавил переключатель 'M', заставив make скомпилировать модули для директории с исходным указанием, перед тем, как 'подготовить' необходимые файлы lib/header.

Надеюсь, что в этот момент все сделано правильно, и сделайте выход без каких-либо ошибок. Теперь у вас уже есть готовый к установке your_module.ko на пути к модулю вашей системы.

Пытаться:

>sudo make -C /usr/src/linux-headers-`uname -r`/ M=/usr/src/linux-source-X.xx.X/drivers/directory/of/modules/you/compiling/only modules_install 

или же

sudo make -C /usr /src /linux-headers- uname -r / M = /usr /src /linux-source-X.xx.X / drivers / directory / of / modules / вы / компилируете / только устанавливаете

>depmod -a

Надеюсь, ваш модуль теперь готов к

>modeprob your_mod 

команда

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

Удачной компиляции :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .