编写简单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\n");
    
    for_each_process(task){//打印系统中的所有进程信息
        printk("PID:%d \t NAME:%s \t STATE:%ld\n",task->pid,task->comm,task->state);
    }   
    
    return 0;
}

static void my_exit(void){
    printk("exit\n");
}

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表示生成内核模块

整个语句的理解大概可以为: 切换到内核源码目录(因为模块需要用到一些内核头文件),结合自己模块代码生成对应模块

猜你喜欢

转载自www.cnblogs.com/r1ng0/p/9448150.html