linux驱动hello
时间: 2025-01-08 07:04:15 浏览: 2
### Linux 驱动开发 Hello World 示例
#### 1. 基础环境准备
为了编写并测试简单的 `Hello World` 内核模块,开发者需具备已安装好编译工具链以及相应版本的内核头文件的Linux系统。此外,还需掌握基本的C编程技能。
#### 2. 编写简单驱动代码
下面展示了最基础形式下的Linux设备驱动——当该模块被加载至内存时会向控制台发送一条消息;而一旦移除,则发出另一条不同的通知[^3]:
```c
#include <linux/module.h>
#include <linux/kernel.h>
// 定义初始化函数,在插入模块时调用此方法
static int __init hello_init(void) {
printk(KERN_EMERG "hello word!\r\n");
return 0;
}
// 定义清理函数,在删除模块前调用此方法
static void __exit hello_exit(void) {
printk(KERN_EMERG "baibai\r\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("zxj");
MODULE_DESCRIPTION("Output hello when insmod; output baibai when rmmod");
```
这段程序利用了两个宏定义来指定模块的行为:一个是用于注册入口点(`__init`),另一个则是用来标记退出处理逻辑(`__exit`)。每当通过命令行指令`insmod`装载上述创建好的ko文件之后,“hello word!”将会显示于日志之中;反之若是采用`rmmod`卸下它的话则会出现“baibai”。
#### 3. 构建与部署流程说明
构建过程中需要用到Makefile来进行自动化编译工作。对于小型项目而言可以直接在源码同级目录下建立一个简易版Makefile如下所示:
```makefile
obj-m += helloworld.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
rm -rf *.o *.ko *.mod.* .*.cmd *.symvers
```
运行`make all`即可触发整个项目的编译动作,并最终得到目标二进制`.ko`格式的目标文件。随后便可以借助`sudo insmod ./helloworld.ko`实现动态链接库的形式加载自定义模块到当前正在使用的kernel实例里去验证效果了。
阅读全文