编写简单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内核模块的主要内容,如果未能解决你的问题,请参考以下文章

编写Linux内核模块是不是需要编译自己的内核?

linux内核模块中的内存泄漏检测工具

linux内核可加载模块编程简单入门

hello 驱动编写-最简单的驱动程序

hello 驱动编写-最简单的驱动程序

hello 驱动编写-最简单的驱动程序