linux 驱动学习 & learn

来源:互联网 发布:js文本框只能输入整数 编辑:程序博客网 时间:2024/05/24 07:08

写一个简单的 linux 内核模块:

#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("GPL");static int __init init_modules(void){    printk("hello world\n");    return 0;}static void __exit exit_modules(void){    printk("goodbye\n");}module_init(init_modules);module_exit(exit_modules);

任何 Linux 内核模块都需要包含: <linux/init.h>#include <linux/module.h> 头文件。

编译该模块的 Makefile 如下(mname 表示模块的名字 “hello”, main.o 是指定源文件为 main.c):

mname := hello$(mname)-objs := main.oobj-m := $(mname).oKERNELDIR := /lib/modules/`uname -r`/build  # 这个目录指向的是 /usr/src/linux-headers-`uname -r`all:        $(MAKE) -C $(KERNELDIR) M=`pwd` modulesclean:        $(MAKE) -C $(KERNELDIR) M=`pwd` clean

编译后加载该模块:

sudo dmesg -C  // 清空内核消息sudo insmod hello.ko  // 如果是系统自带的模块,可用 modprob,其可以处理依赖项dmesg    [25782.154813] hello worldsudo rmmod hellodmesg    [25822.998576] goodbye 
0 0