📘 嵌入式Linux驱动开发入门宝典
✨ 30章 · 从零到专家
🧩
友好色系
📂 点击卡片跳转章节 → 01.html ~ 30.html
01
嵌入式Linux驱动开发概述
什么是嵌入式Linux驱动
驱动在整个系统中的位置
为什么需要学习驱动开发
学习路线与必备技能
02
开发环境搭建
安装Ubuntu虚拟机
配置交叉编译工具链
搭建TFTP/NFS服务
熟悉基本Linux命令
03
Linux内核源码结构
获取内核源码
内核目录结构分析
Kconfig与Makefile基础
内核配置与编译
04
内核模块基础
什么是内核模块
模块的加载与卸载
模块参数传递
模块依赖与符号导出
05
字符设备驱动基础
主设备号与次设备号
设备文件与inode
file_operations结构体
简单的字符设备驱动示例
06
设备号分配与注销
静态分配设备号
动态分配设备号
设备号的注销
查看已注册设备号
07
file_operations详解
open/release
read/write
llseek
ioctl / mmap等接口实现
08
用户空间与内核空间数据交互
copy_from_user/copy_to_user
put_user/get_user
访问合法性检查
09
并发与竞态控制
并发产生的原因
原子操作
自旋锁
信号量 / 互斥体
10
等待队列与阻塞IO
等待队列原理
阻塞与非阻塞操作
poll/select机制
异步通知
11
设备树基础
什么是设备树
DTS/DTC/DTB的关系
设备树语法
绑定文档
12
设备树实战
在设备树中添加自定义节点
解析设备树节点
获取资源信息
13
platform驱动模型
platform总线
platform_device与platform_driver
匹配机制
驱动编写示例
14
LED驱动实战
GPIO子系统介绍
使用GPIO子系统控制LED
编写完整的LED驱动
15
按键驱动与中断
中断注册与释放
上半部与下半部
tasklet与工作队列
按键消抖处理
16
定时器与内核时间管理
内核定时器
高精度定时器
jiffies与HZ
延时函数
17
内存管理基础
页分配
kmalloc/vmalloc
slab分配器
DMA内存分配
18
I2C子系统
I2C总线协议
I2C核心层
I2C设备驱动编写
用户空间访问I2C
19
SPI子系统
SPI总线协议
SPI核心层
SPI设备驱动编写
SPI与GPIO模拟
20
USB子系统
USB协议基础
USB主机与设备驱动
urb结构体
USB gadget驱动
21
PCI/PCIe子系统
PCI配置空间
PCI驱动框架
DMA传输
MSI中断
22
块设备驱动
块设备与字符设备的区别
请求队列与bio
块设备驱动框架
简单块设备驱动
23
网络设备驱动
网络协议栈概览
sk_buff结构体
net_device结构体
NAPI轮询机制
24
帧缓冲设备驱动
framebuffer原理
fb_info结构体
显存映射
LCD驱动实例
25
输入子系统
输入子系统架构
input_dev注册
事件上报
多点触摸协议
26
音频设备驱动
ALSA架构
声卡注册
PCM操作
DMA音频传输
27
电源管理
系统休眠与唤醒
runtime PM
regulator框架
cpufreq调频
28
调试技术
printk调试
动态调试
ftrace
kgdb / perf性能分析
29
内核内存调试
KASAN
kmemleak
slab调试
内存压力测试
30
驱动开发最佳实践
编码规范
代码审查清单
安全考虑
性能优化 / 社区贡献指南