编写简单Linux内核模块
Posted r1ng0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写简单Linux内核模块相关的知识,希望对你有一定的参考价值。
模块代码如下
//main.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/list.h>
static int my_hello(void){
struct task_struct *task = NULL;
printk("Hello
");
for_each_process(task){//打印系统中的所有进程信息
printk("PID:%d NAME:%s STATE:%ld
",task->pid,task->comm,task->state);
}
return 0;
}
static void my_exit(void){
printk("exit
");
}
module_init(my_hello);//指定模块加载时执行的操作( 类似C++中的构造函数)
module_exit(my_exit);//指定模块退出时执行的操作( 类似C++中的析构函数)
MODULE_LICENSE("GPL");
Makefile编写
obj-m+=main.o #指定生成的模块
all:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean
其中:make 中的 -c 选项表示切换到指定目录,这里是切换到当前内核的源码目录下. M 选项表示:要生成模块的代码目录,modules表示生成内核模块
整个语句的理解大概可以为: 切换到内核源码目录(因为模块需要用到一些内核头文件),结合自己模块代码生成对应模块
以上是关于编写简单Linux内核模块的主要内容,如果未能解决你的问题,请参考以下文章