1.LINUX内核模块基础
1.1 什么是内核模块?
- Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢?方法1:把所有的组件都编译进内核文件,即:zImage或bzImage,但这样会导致一个问题:占用内存过多。有没有一种机制能让内核文件本身并不包含某组件,而是在该组件需要被使用的时候,动态地添加到正在运行的内核中呢?
- 内核模块具有如下特点:
- 1)模块本身并不被编译进内核文件(zImage或者bzImage);
- 2)可以根据需求,在内核运行期间动态的安装或卸载。
1.2 安装与卸载
- 安装 insmod 例:insmod /home/dnw_usb.ko
- 卸载 rmmod 例:rmmod dnw_usb
- 查看 lsmod 例:lsmod lsmod是列举当存在内存中的所有模块名称,占用大小,有多少个用户正在使用等信息。
2.内核模块设计
2.1 范例代码分析
#include <linux/init.h>
#include <linux/module.h>
static int hello_init()
{
printk(KERN_WARNING"Hello world!\n");
return 0;
}
static void h