编写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