实践2.2 内核模块编译

实践2.2 内核模块编译

1.模块代码的编写

模块构造函数:

module_init()
即执行insmod或modprobe指令加载内核模块时会调用的初始化函数。

模块析构函数:

module_exit()
即执行rmmod指令卸载模块时调用的函数。

模块许可声明:

MODULE_LICENSE()
告诉内核该程序使用的许可证,不然在加载时它会提示该模块污染内核。一般会写GPL。

头文件:

<linux/module.h>,必须包含此文件;
<linux/kernel.h>,包含常用的内核函数;
<linux/init.h>,包含宏_init和_exit,允许释放内核占用的内存。

编写代码:

//test_sche.c
#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");
static char *name="YJX";

static int __init name_init(void)
{
printk("Hello World!\n");
printk("Hello %s!\n",name);
return 0;
}

static void __exit name_exit(void)
{
printk(KERN_INFO"Name module exit\n");
}

module_init(name_init);
module_exit(name_exit);

module_param(name,charp,S_IRUGO);

MODULE_AUTHOR("YJX");
MODULE_VERSION("v1.0);
MODULE_DESCRIPTION(“A simple module for testing pirntk and module params:");

编译模块-Makefile

//Makefile
obj-m := test_sche.o
PWD := $(shell pwd)
KDIR := /lib/modules/3.2.0-29-generic-pae/build

all:
make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean

第一行:自己写的.c的文件名+”.o”。
第三行的KDIR后面要写自己的内核版本对应的内核源码包地址.

如何查看?
uname -r
enter description here

解释一下make命令:
make -C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile
M=$(PWD) 表明返回到当前目录继续执行当前的Makefile。

make结果:
enter description here

make执行之后会出现很多文件:
enter description here

加载模块

sudo insmod test_sche.ko

测试模块

dmesg

卸载模块

sudo rmmod test_sche.ko

测试结果:

1.加载后:
enter description here
2.卸载后:
enter description here


读取进程链表:

代码:

include <linux/kernel.h>

include <linux/module.h>

include <linux/init.h>

include <linux/sched.h>

static struct task_struct *pcurrent;

static int __init print_init(void)
{
pirntk(KERN_INFO"print current task info\n");
printk("pid\ttgid\tprio\tstate\n");
for_each_process(pcurrent){
printk("%d\t",purrent->pid);
printk("%d\t",purrent->tgid);
printk("%d\t",purrent->prio);
printk("%ld\n",purrent->state);
}
return 0;
}

static void __exit print_exit(void)
{
printk(KERN_INFO "Finished\n");
}

module_init(print_init);
module_exit(print_exit);
编译运行加载后,测试结果为:
enter description here

posted @ 2016-05-27 11:38  20135202闫佳歆  阅读(239)  评论(0)    收藏  举报