简单的内核模块编译、加载

来源:互联网 发布:小米手机网络重置 编辑:程序博客网 时间:2024/06/06 01:15

写一个比较简单的内核模块(打印出“hello world”),实现内核模块的编译/装载与卸载,代码如下:

hello.c

#include "linux/init.h"#include "linux/kernel.h"#include "linux/module.h"  //3个头文件包含了内核提供的所有内核模块的头文件static int __init hello_init(void) {        printk(KERN_ALERT "Hello world!\n");        return 0;}static void __exit hello_exit(void) {        printk(KERN_ALERT "Goodbye!\n");}module_init(hello_init);  //告诉内核当内核模块第一次运行时哪个函数将被执行module_exit(hello_exit); //内核模块被卸载时被执行的函数MODULE_LICENSE("GPL");  //开源licenseMODULE_DESCRIPTION("hello"); //文件描述

Makefile:

obj -m :=hello.o#内核源代码位置,这里是标准情况下链接到正在使用的内核KERNELBUILD :=/lib/modules/$(shell uname -r)/build default:     #编译连接目标    make -C $(KERNELBUILD) M=$(shell pwd) modules    #以下内容不是必须 ,属于执行和清理部分    echo insmod ./hello.ko to turn it on clean:    rm -rf *.o *.ko *.mod.c .*.cmd *.markers *.order *.symvers .tmp_versions

执行:

make //生成内核模块 ko文件

sudo insmod ./hello.ko 

//装在内核模块dmesg | tail 

//查看输出信息  

sudo rmmod  hello //卸载内核模块

dmesg | tail //查看输出信息

0 0
原创粉丝点击