<insmod: ОШИБКА: не удалось вставить модуль GSM.ko: неизвестный символ в модуле. > Как это исправить? - PullRequest
0 голосов
/ 20 октября 2019

Я написал простой загружаемый модуль ядра. Создать файл символьного устройства в / dev / и соответствующий каталог классов. Следующие строки, которые я добавил в проект:

MODULE_DESCRIPTION("GSM driver");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Guruprasad");
MODULE_DESCRIPTION("A simple driver");
MODULE_VERSION("0.1");

При сборке я получил следующее предупреждение

WARNING: modpost: missing MODULE_LICENSE() in /home/.../char_dev_gsm/GSM.o

При вставке я получил следующую ошибку:

insmod: ERROR: could not insert module GSM.ko: Unknown symbol in module

Пожалуйста, помогите мне с этим.

В проекте есть один основной файл (GSM.c) и включаемый файл (device.c и device.h)

Пожалуйста, получите файлы изследующая ссылка. https://github.com/guruprasad-92/Device-Driver

Я пытался добавить строку MODULE_LICENSE("Dual BSD/GPL"); в файл device.c, который также не выводит предупреждающих сообщений и сообщений об ошибках, но при вставке модуля он также не создает файл устройства /dev/gsm0 и не обновляя $dmesg сообщениями, связанными с printk().

Я также попытался записать функции register_dev() и unregister_dev() в файл GSM.c, который не выдал никакого предупреждения, и создал устройство /dev/gsm0 и каталог классов в / sys / class/

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

1 Ответ

0 голосов
/ 21 октября 2019

Основная проблема состоит в том, что модуль GSM.ko построен из нескольких файлов .c (GSM.c и device.c), а базовое имя модуля совпадает с базовым именем одного из файлов .c(что разрешено, только если модуль собран из одного файла .c).

Чтобы исправить это, вы можете переименовать GSM.c в (например) gsm.c и изменить строку GSM-objs вMakefile:

obj-m := GSM.o
GSM-objs = gsm.o device.o
...