专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
嵌入式
Linux内核模块添加的两种方法
2019-07-13 08:48
发布
生成海报
站内文章
/
嵌入式Linux
10457
0
1497
Linux
内核模块添加的两种方法
静态加载
:
把组件都添加进内核文件中,在目录
kongfig
文件中增加新代码对应的编译选项,在
Makefile
文件中添加编译条目。
动态加载
:
下载并安装
Linux
内核模板:
make modules _install ARCH = arm CROSS _COMPILE=arm-linux
编写
Makefile
。
以
hello world
为例来实现这两种方法
:
静态加载
:
(
1
)
hello world.c
源代码
#include
#include
static int hello_init(void)
{
printk(KERN_INFO " Hello World enter ");
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO " Hello World exit ");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("A simple Hello World Module");
MODULE_ALIAS("a simplest module");
把所有的组件都翻译进内核文件,即生成
zImage
或
bzImage
(
1
)进入
linux-2.6.32.2-mini2440
内核
(
2
)进入
/drivers
建立
Hello
文件夹,在
Hello
文件夹里面建立
hello.c,Makefile,Kconfig
Makefiel
:
obj-y(CONFIG_HELLO_WORD)
+=hello.o
Kconfig
:
config hello_word
tristate "TEST hello word"
help
usually you have to make
(
3
)在
drivers
里面的
Makefile
添加:
obj-y(CONFIG_HELLO_WORD)
+=Hello/
(
4
)在
drivers
里面的
Kconfig
添加
source"drivers/Hello/Kconfig"
(
5
)输入
make menuconfig
进入内核配置界面
(
6
)然后输入
y
退出并保存
(
7
)生成了
.config
文件为配置的记录
(
8
)在
make bzImage
进行编译内核
(
9
)然后在
arch/arm/boot/
下生成
bzImage
动态加载:
直接编译成
PC
机
X86
的内核模块
(
1
)模块加载函数:
insmod
;模块卸载函数:
rmmod
;查看模块函数:
lsmod
(
2
)模块可选信息:模块参数、模块导出符号、模块作者等信息声明
(
3
)在
/work
里面加入
hello.c
文件和
Makefile
文件
Makefile
的内容为:
ifneq ($(KERNELRELEASE),)
obj-m :=hello.o
####
和要编译的模块的名字一致
else
KDIR:= /lib/modules/3.5.0-17-generic/build
######
以便寻找内核源码目录下的
Mmakefile
all:
make -C $(KDIR) M=$(PWD)modules
######
用
KDIR
目录下的
Makefile
来编译当前目录下的模块
clean:
rm -f *.ko *.o *.mod.o *.mod.c.symvers
endif
(
4
)执行
make
命令
(
5
)、然后查看
hello
文件夹生成
hello.ko
文件
(
6
)执行
insmod hello.ko
进行加载模块:
(
7
)
lsmod
查看模块查看加载模块输出信息
(
8
)删除
rmmod
模块
(
9
)查看删除模块输出信息
(
10
)这样,就完成了对模块的添加和删除。
总结:
通过对
Linux
内核模块的添加和删除实验,我学会了关于内核添加和删除的很多相关知识,首先,把组件编译进内核中,如果建立的一个文件夹,需要使建立的文件夹里的
Kconfig
和
Makefile
生效,需要在上一级目录里修改
Kconfig
和
Makefile
,这样才能使新建立的
Kconfig
和
Makefile
生效。其次,在模块动态加载到内核过程中,常常会出现不成功的时候,通过问老师,知道了是版本的问题,使得模块加载不成功。我会在以后的学习过程中,加强这方面的学习,提高这方面的技能,让自己所学得到运用。
Ta的文章
更多
>>
如何查看Linux版本信息?
0 个评论
PCB反推理念
0 个评论
PCB layout注意事项以及投板几点说明
0 个评论
Linux内核模块添加的两种方法
0 个评论
PIC+DS18B20+LCD设计及程序过程中的问题
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮