linux 最小内核模块

1.内核模块介绍

linux内核包含的内容很多,在进行内核编译的时候,可以把所有的代码编译进内核,但是这样会引起两个问题:一是内核过大;二是 当需要添加或者删除内核时,需要重新再编译内核。而模块不需要编译到内核,放置到指定目录使用时直接加载模块,不需要使用时直接卸载模块,可以减小内核大小,并可以实现相同的效果。

2.最小linux模块例程

#include <linux/module.h>//与module相关的信息
#include <linux/kernel.h>
#include <linux/init.h>      //与init相关的函数

MODULE_LICENSE("Dul BSD/GPL");
MODULE_AUTHOR("zhangsan");

static int hellodriver_init()
{

    printk(KERN_INFO "Hello_init\n");
    return 0;
}

static void hellodriver_exit()
{

    printk(KERN_INFO "Hello_exit\n");
}
module_init(hellodriver_init);
module_exit(hellodriver_exit);

3.最小模块程序说明

(1)声明
MODULE_LICENSE("Dul BSD/GPL");
//模块的许可说明,这一句代码声明你遵循 GPL 协议,否则模块
在加载的时候,内核会提示被污染的“警报
在 Linux 内核模块领域,可接受的 LICENSE 参数
包括“GPL”、“GPL v2”、"GPL and addtional" 、
"Dual BSD/GPL"、"Dual MPL/GPL" 等,当参数是前面
的几个时,那么就表明你遵循 GPL 协议
MODULE_AUTHOR("zhangsan");
//模块作者说明,非必须
(2)模块入口和出口
module_init(hellodriver_init);
module_exit(hellodriver_exit);
(3)printk打印说明
 printk用于内核消息打印,类似于printf函数
printk函数的优先级 定义于/kernel.h头文件中
#define KERN_EMERG"<0>"/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/
#define KERN_ALERT"<1>"/*报告消息,表示必须立即采取措施*/

#define KERN_CRIT"<2>"/*临界条件,通常涉及严重的硬件或软件操作失败*/

#define KERN_ERR"<3>"/*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/

#define KERN_WARNING"<4>"/*警告条件,对可能出现问题的情况进行警告*/

#define KERN_NOTICE"<5>"/*正常但又重要的条件,用于提醒。
常用于与安全相关的消息*/

#define KERN_INFO"<6>"/*提示信息,如驱动程序启动时,打印硬件信息*/

#define KERN_DEBUG"<7>"/*调试级别的消息*/

4.Makefile文件

obj-m := mini_driver_helloworld.o
//编译生成的中间文件

KDIR :=/home/usr/iTop4412_Kernel_3.0
//内核源码路径  与实际存放的位置对应

PWD       := $(shell pwd)
//当前目录地址
all:
     make -C $(KDIR) M=$(PWD) modules
//执行编译生成模块操作
clean:
    rm -rf *.o
//执行删除操作

5.模块相关操作命令

1)  insmod: 将模块插入内核中,使用方法:#insmod XXX.ko

2)  rmmod: 将模块从内核中删除,使用方法:#rmmod XXX.ko

3)  lsmod: 列表显示所有的内核模块,可以和grep指令结合使用。
使用方法:#lsmod | grep XXX

4)  modprobe: modprobe可载入指定的个别模块,或是载入一组相
依赖的模块。modprobe会根据depmod所产生的依赖关系,决定要载入
哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。
依赖关系是通过读取 /lib/modules/2.6.xx/modules.dep得到的。
而该文件是通过depmod 所建立。

5)  modinfo: 查看模块信息。使用方法:#modinfo XXX.ko

6)  tree –a: 查看当前目录的整个树结构。使用方法:#tree -a