编写Linux内核模块

Linux系统为应用程序提供了功能强大且容易扩展的API, 但在某些情况下, 与硬件交互或进行需要访问系统中特权信息的操作时, 就需要一个内核模块。 Linux内核模块是一段编译后的二进制代码, 直接插入Linux内核中。 在Ring 0上运行。 

1. 安装开发环境 (Ubuntu为例)

sudo apt-get install build-essential linux-headers-`uname -r`

2. 入门模块

mkdir -p 〜/src/lkm_example
cd 〜/src/lkm_example

启动您喜欢的编辑器(在我的例子中是vim),并创建具有以下内容的文件 lkm_example.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("abin");
MODULE_DESCRIPTION("A simple example Linux module.");
MODULE_VERSION("0.01");

static int __init lkm_example_init(void) {
 printk(KERN_INFO "Hello, World!\n");
 return 0;
}
static void __exit lkm_example_exit(void) {
 printk(KERN_INFO "Goodbye, World!\n");
}

module_init(lkm_example_init);
module_exit(lkm_example_exit);

修改Makefile

obj-m += lkm_example.o
all:
 make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
 make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
test:
 sudo dmesg -C
 sudo insmod lkm_example.ko
 sudo rmmod lkm_example.ko
 dmesg

 

posted @ 2023-07-27 16:22  球球小世界  阅读(66)  评论(0编辑  收藏  举报