01 |
"生命信号"驱动:创建一个每秒钟自动递增一次的计数器,通过 /proc 或 sysfs 供用户读取。 |
02 |
内核日志过滤器:一个字符设备,用户向其写入字符串,驱动只将包含特定关键词的字符串用 printk 打印出来。 |
03 |
消息槽(Message Slot):实现一个设备,多个进程可以向其写入消息,另一个进程可以读取最后一条消息。学习并发控制。 |
04 |
简易密码存储器:通过 ioctl 设置一个密码,通过 read 操作验证密码是否正确。 |
05 |
信号量模拟器:实现一个字符设备,模拟一个系统信号量,支持 up/down 操作。 |
06 |
内存幻象器 (RAM Disk Lite):在内核分配一页内存,通过 read/write 操作这块内存。 |
07 |
内核命令行计算器:向设备写入 5+3 这样的字符串,读取操作返回 8。 |
08 |
延迟响应设备:当用户写入数据后,驱动启动一个内核定时器,在5秒后才处理数据并发出通知。 |
09 |
驱动参数实验:编写一个驱动,支持在加载时传入参数(如 insmod my_drv.ko debug_level=1)。 |
10 |
设备类展示:自动在 /sys/class/ 下创建一个类,并在其中显示设备信息。 |
11 |
多设备驱动:一个驱动模块同时创建3个相同的字符设备(如 /dev/vdev0, vdev1, vdev2)。 |
12 |
循环缓冲区驱动:实现一个内核空间的循环缓冲区,用户进程可以从中读写数据。 |
13 |
自毁驱动:加载后,在 sysfs 中创建一个文件,向该文件写入特定内容后,驱动自动卸载自己。 |
14 |
时间戳设备:任何 read 操作都返回当前内核时间戳(ktime_get())。 |
15 |
"永不阻塞"测试驱动:实现 read 和 write 方法,但总是返回 -EAGAIN,测试用户态的非阻塞IO。 |
16 |
QEMU虚拟硬件中断:在QEMU中为虚拟PCI设备或平台设备编写一个非常简单的中断处理程序,触发后打印信息。 |
17 |
软件中断(SoftIRQ)实践:自定义一个软中断,并在驱动中触发它。 |
18 |
Tasklet小任务:在中断顶半部调度一个tasklet,在底半部打印信息。 |
19 |
工作队列(Workqueue)处理器:启动一个工作队列,定期打印一条消息。 |
20 |
高精度定时器(hrtimer)闹钟:编写一个驱动,在用户写入一个时间值后,用hrtimer实现精准的定时回调。 |
21 |
按键防抖动(Debouncer)模拟:在定时器中断中模拟按键信号,并实现软件防抖动逻辑。 |
22 |
中断频率限制器:编写一个驱动,限制特定中断产生的最高频率(如每秒最多100次)。 |
23 |
内核线程看守者:创建一个内核线程,它每隔10秒打印一次自己的状态。 |
24 |
页面分配器测试:分配不同阶数(order)的连续物理页,并通过 read 操作查看信息。 |
25 |
SLAB分配器展示:创建自己的SLAB缓存,并从中分配/释放对象。 |
26 |
用户态内存映射(mmap):将驱动中分配的单个页面映射到用户空间。 |
27 |
虚拟DMA模拟:在没有真实DMA硬件的情况下,使用 memcpy 模拟DMA传输的流程(申请缓冲区、启动"传输"、完成中断)。 |
28 |
一致性DMA映射演示:使用 dma_alloc_coherent 分配一段DMA缓冲区,并将其内容导出给用户空间查看。 |
29 |
流式DMA映射演示:使用 dma_map_single 映射一块普通内核缓冲区用于"DMA"。 |
30 |
OOM(内存耗尽)测试器:一个尝试分配大量内存直到触发内核OOM killer的驱动。 |
31 |
虚拟平台设备:在QEMU命令行用 -device 创建一个虚拟设备,并为它编写驱动。 |
32 |
"Hello, Device Tree":编写一个最简单的设备树节点(.dts),并在驱动中读取它的 compatible 属性。 |
33 |
设备树资源获取:从设备树节点中解析并获取虚拟的内存地址和中断号。 |
34 |
Sysfs属性控制:为驱动创建自定义的 sysfs 属性文件,实现读写回调。 |
35 |
平台驱动匹配:编写一个平台驱动,通过 compatible 字符串与QEMU中的虚拟设备匹配。 |
36 |
GPIO模拟器:模拟一个GPIO控制器,允许用户通过 sysfs 或 ioctl 设置"引脚"电平和方向。 |
37 |
时钟(Clock)模拟器:模拟一个时钟源,提供频率设置和使能/禁用操作。 |
38 |
复位(Reset)控制器模拟:模拟一个简单的复位控制器。 |
39 |
LED心跳灯模拟:在驱动中创建一个虚拟LED设备,并实现类似心脏跳动的定时闪烁模式。 |
40 |
虚拟温度传感器:模拟一个温度传感器,其返回值可以通过 sysfs 进行设置。 |
41 |
只读内存块设备:将一段内核内存(如一个静态数组)包装成一个只读的块设备。 |
42 |
可写RAM块设备:实现一个简单的可读写的RAM磁盘驱动。 |
43 |
循环块设备过滤器:包装一个已有的块设备(如 ram0),拦截其 read 请求并打印调试信息。 |
44 |
虚拟网络隧道端点:编写一个极简的虚拟网络设备,将收到的所有数据包原样发回(loopback)。 |
45 |
数据包计数器:一个网络设备驱动,仅用于统计收到的数据包数量和大小。 |
46 |
内核模块依赖:编写两个模块,A依赖B导出的一个符号(函数或变量)。 |
47 |
Notifier Chain观察者:注册一个重启notifier,在系统重启时打印一条消息。 |
48 |
Procfs数据查看器:在 /proc 下创建一个文件,显示驱动内部的一些状态信息。 |
49 |
Debugfs控制器:在 /sys/kernel/debug/ 下创建文件,用于动态改变驱动的调试级别。 |
50 |
"Faulty"驱动(错误注入):编写一个有意的buggy驱动(如写入时内存越界),学习如何使用 KASAN 等工具捕捉它。 |