Linux内核模块module的加载详细过程

标签:
内核模块的加载过程moduleinsmodrmmod |
分类: arm_linux |
内核模块的加载:
内核模块的加载会使用到系统的内核源码目录,这里我们可以找到内核源码的目录:
cd /usr/src
ls -l
http://s16/mw690/002ydbfVzy7m1Plxsu3df&690
这里会看到,我们装的Ubuntu里面是有这两个文件夹,可以理解为这两个文件夹是相关的,为了不让用户对源文件代码破坏,这里分成两个文件夹
一个是
第二个是
其中第一个文件夹 linux-headers-3.13.0-24里面主要是存放内核的源代码 如下图所示:
http://s3/mw690/002ydbfVzy7m1Pn7Jo6a2&690
第二个文件夹linux-headers-3.13.0-24-generic里面主要存放配置.config 或者其他的一些配置文件,如下图所示:
http://s5/mw690/002ydbfVzy7m1PmXIIkd4&690
第二个文件夹里面的内容多半是以软连接的形式指向了内核源码文件夹。
当我们需要编译一个内核的时候需要指定到linux-headers-3.13.0-24-generic这个位置
例如我们写了一段hello_module.c的模块内容如下:
#include "linux/init.h"
#include "linux/module.h"
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
}
static void hello_exit(void)
{
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("SOMEBODY");
MODULE_DESCRIPTION("A simple test ");
写了一个Makefile的内容如下:
obj-m :=hello_module.o
使用命令 make -C /usr/src/linux-headers-3.13.0-24-generic M=$(pwd) modules
http://s15/mw690/002ydbfVzy7m1Pn2yo69e&690
将刚刚写的hello_module.c编译一遍,会在当前的目录下生成hello_module.ko的文件。
使用insmod hello_module.ko可以加载模块到内核里面去
使用rmmod hello_module.ko可以卸载模块。
在目录/var/log下面的syslog信息里面可以查看到内核的一些printk
http://s15/mw690/002ydbfVzy7m1Pnm7W6ce&690
至此,完成了一个完整的内核模块加载到内核的过程。