专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
嵌入式
Linux 基本module结构与hello.ko的编写
2019-07-13 00:11
发布
生成海报
站内文章
/
嵌入式Linux
12197
0
1105
data/attach/1907/lk19fg3t8orxistflmsg4qedgcluzuil.jpg
平台:ubuntu 15.04
最近在学习嵌入式Linux,这里是简单的module编写,作为我自己的学习记录,以便将来查看,也作为后来者参考。
Linux module基本结构如下图所示:
hello.c编写:
#include
#include
int static hello_init( void ) //模块加载函数
{
printk(KERN_WARNING"hello word ");
return 0 ;
}
int static hello_exit( void ) //模块卸载函数
{
printk(KERN_INFO"goodbye!! ");
return 0 ;
}
module_init(hello_init); //申明模块加载函数
module_exit(hello_exit); //申明模块卸载函数
MODULE_LICENSE("GPL"); //模块遵循协议
MODULE_AUTHOR("bmonky<1129584094@qq.com>"); //模块作者
MODULE_DESCRIPTION("a simple module "); //模块简单描述
相应Makefile的编写:(
注意Makefile的第一个字母必须大写
)
obj-m := hello.o
KDIR:= /lib/modules/3.19.0-15-generic/build #指明编译这个模块所依赖的内核源代码的路径
all:
make -C $(KDIR) M=$(PWD) modules # -C表示利用(KDIR)路径中的源代码进行编译
#M=(PWD)指明当前模块代码在哪里
#modules 进行编译模块这样一个动作
编译:(
注意必须在root模式下编译
)
如果Makefile的第一个字母不是大写,编译module就会出错,如下图所示:
将生成的hello.ko加载到内核中:
# insmod hello.ko
显示加载后模块打印的信息(ubuntu下是这样),
# dmesg | tail -1
将hello卸载从内核中卸载:
# rmmod hello
显示卸载过程中打印的信息:
# dmesg | tail -1
内核信息打印级别:
在
中定义了8种记录级别。按照优
先级递减的顺序分别是:
KERN_EMERG
“<0>”
用于紧急消息,常常是那些崩溃前的消息。
KERN_ALERT
“<1>”
需要立刻行动的消息。
KERN_CRIT
“<2>”
严重情况。
KERN_ERR
“<3>”
错误情况。
• KERN_WARNING
有问题的警告 “<4>”
• KERN_NOTICE
正常情况,但是仍然值得注意 “<5>”
• KERN_INFO
信息型消息 “<6>”
• KERN_DEBUG
用作调试消息 “<7>”
默认打印信息级别为KERN_WARNING。
Ta的文章
更多
>>
Linux 基本module结构与hello.ko的编写
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮