<insmod:错误:无法插入模块GSM.ko:模块中的未知符号。 >如何解决?

时间:2019-10-20 18:34:24

标签: c linux-device-driver

我已经编写了一个简单的可加载内核模块。在/ 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

我尝试在文件device.c中添加行MODULE_LICENSE("Dual BSD/GPL");,该行也不会导致警告消息和错误消息,但是在插入模块时,它既不会创建设备文件/dev/gsm0,也不会创建设备文件$dmesg使用与printk()相关的消息来更新register_dev()

我还尝试了在文件GSM.c中写入功能unregister_dev()/dev/gsm0的操作,但未产生任何警告,并在/中创建了设备function set_webhook(){ $adta = file_get_contents("https://api.telegram.org/bottoken/setWebhook?url=". base_url()."index/telegramcallback"); var_dump($adta); } 和类目录。 sys / class /

但是我想知道为什么文件包含在构建时发出警告。

1 个答案:

答案 0 :(得分:0)

主要问题是模块是GSM.ko,是从多个.c文件(GSM.c和device.c)构建的,模块的基本名称与其中一个.c文件的基本名称相同(仅当从单个.c文件构建模块时才允许)。

要解决此问题,您可以将GSM.c重命名为(例如)gsm.c并更改Makefile中的GSM-objs行:

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