Linux驱动开发入门

Linux驱动开发入门

Linux内核驱动开发是一个高级话题,涉及到对操作系统核心部分的深入理解。这个系列的笔记旨在帮助初学者理解Linux驱动开发的基础知识。我们从最基本的部分开始:创建、编译和加载一个简单的内核模块。

什么是内核模块?

内核模块是Linux内核的一部分,可以在系统运行时动态加载和卸载。这使得内核可以在不重启系统的情况下扩展功能。模块被用于各种目的,包括设备驱动程序、文件系统和网络协议等。

第一个内核模块

我们的第一个内核模块非常简单:在加载和卸载时打印消息到内核日志。

main.c

#include <linux/module.h>   // 基础功能
#include <linux/kernel.h>   // 主要数据结构和函数
#include <linux/init.h>     // 模块宏

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple Linux driver for the kernel.");
MODULE_VERSION("0.1");

static int __init hello_start(void) {
    printk(KERN_INFO "Loading hello module...\n");
    printk(KERN_INFO "Hello world\n");
    return 0;
}

static void __exit hello_end(void) {
    printk(KERN_INFO "Goodbye Mr.\n");
}

module_init(hello_start);
module_exit(hello_end);

Makefile

为了编译这个模块,你需要以下 Makefile

obj-m += main.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

编译和加载模块

  1. main.cMakefile 保存在同一目录。
  2. 在该目录下运行 make 命令编译模块。
  3. 使用 sudo insmod main.ko 加载模块。
  4. 使用 sudo rmmod main 卸载模块。
  5. dmesg 查看内核打印的信息。

总结

通过这个简单的例子,我们学习了如何创建、编译和加载一个Linux内核模块。这是Linux内核驱动开发的基础,为更复杂的驱动开发打下了基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ricky_0528

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值