Linux内核模块的添加

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 生效。其次,在模块动态加载到内核过程中,常常会出现不成功的时候,通过问老师,知道了是版本的问题,使得模块加载不成功。我会在以后的学习过程中,加强这方面的学习,提高这方面的技能,让自己所学得到运用。

相关文档
最新文档