Linux编程之内核模块编程.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:13 大小:5.7MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

Linux编程之内核模块编程.pdf

Linux编程之内核模块编程.pdf

预览

免费试读已结束,剩余 3 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Linux编程之2内核模块编程(LKM)Helight.Xu@XiyouLinuxGroup什么是LKMLKM:就是可加载的内核模块(LoadableKernelModule)。这中模块本来是Linux系统用于扩展他的功能的。使用LKM的优点有:他们可以被动态的加载,而且不需要重新编译内核。由于这些优点,他们常常被特殊的设备(或者文件系统),例如声卡,网卡,romfs等使用。Helight.Xu@XiyouLinuxGroupLKM的基本结构inthello_init(void)/*用于初始化所有的数据,函数名可以自定义*/voidhello_exit(void)/*用于清除数据从而能有一个安全的退出,函数名可自定义*/module_init(hello_init);/*加载模块*/module_exit(hello_exit);/*卸载模块*/Helight.Xu@XiyouLinuxGroupLKM的头文件(include)头文件的位置:/usr/src/linux-2.6.x/include/一个模块所必需的头文件:•#include<linux/init.h>•#include<linux/module.h>其它头文件Helight.Xu@XiyouLinuxGroup最简单的LKM/*hello.c*/#include<linux/init.h>#include<linux/module.h>staticinthello_init(void)/*用于初始化*/{printk(KERN_ALERT"Hello,world\n");return0;}staticvoidhello_exit(void)/*用于清除从而能安全退出*/{printk(KERN_ALERT"Goodbyeworld\n");}MODULE_LICENSE("GPL");module_init(hello_init);/*加载模块*/module_exit(hello_exit);/*卸载模块*/Helight.Xu@XiyouLinuxGroupLKM的编译准备编译的准备工作:1.与此时运行的内核版本一致的内核源代码一套将其解压放置到/usr/src/目录下,下载网站:http://www.kernel.org/pub/linux/kernel/v2.6/2.make工具make在执行时,需要一个命名为Makefile的文件。这个文件告诉make以何种方式编译源代码和链接程序。(2.6下内核模块编译必须是Makefile)Helight.Xu@XiyouLinuxGroupLKM的Makefile文件与编译Makefile文件的位置:与编写的LKMc文件放在同一个目录中。编写:obj-m:=hello.okernel_path=/home/xux/linux-2.6all:make-C$(kernel_path)M=$(PWD)modulesclean:make-C$(kernel_path)M=$(PWD)clean编译:makeHelight.Xu@XiyouLinuxGroupLKM的使用工具http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/insmodhello.koModinfohello.kormmodhellomodprobeHelight.Xu@XiyouLinuxGroup内核模块中的宏(1)#define__init__section(.init.text)__coldnotrace#define__exit__section(.exit.text)__exitused__coldcompiler.h:#define__section(S)__attribute__((__section__(#S)))Helight.Xu@XiyouLinuxGroup内核模块中的宏(2)MODULE_LICENSE(_license)MODULE_AUTHOR(_author)MODULE_DESCRIPTION(_description)MODULE_VERSION(_version)Helight.Xu@XiyouLinuxGroup内核模块中的宏(3)module_param(name,type,perm)Name:变量名Type:byte,short,ushort,int,uint,