Linux内核模块的添加
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:Linux内核模块的添加(一)静态加载:把组件都添加进内核文件中,在目录kongfig文件中增加新代码对应的编译选项,在Makefile文件中添加编译条目。
(二)动态加载:下载并安装Linux内核模板:
make modules _install ARCH = arm CROSS _COMPILE
=arm-linux,编写Makefile。
以hello word为例来实现这两种方法:
静态加载:
(1)hello word.c源代码
#include
#include
static int hello_init(void)
{
printk(KERN_INFO " Hello World enter\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO " Hello World exit\n ");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("Barry Song <21cnbao@>"); 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,Makef ile,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 生效。其次,在模块动态加载到内核过程中,常常会出现不成功的时候,通过问老师,知道了是版本的问题,使得模块加载不成功。我会在以后的学习过程中,加强这方面的学习,提高这方面的技能,让自己所学得到运用。