我已经编写了一个简单的可加载内核模块。在/ 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 /
但是我想知道为什么文件包含在构建时发出警告。
答案 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