title: 嵌入式Linux驱动开发实战
tags: [嵌入式Linux, 驱动开发, IMX6ULL, 知识库索引]
created: 2026-09-16
嵌入式Linux驱动开发实战
基于正点原子IMX6ULL开发板,构建通用化嵌入式Linux知识体系。源码可直接复制,面试题真实场景。
学习路径
裸机编程 → Linux内核基础 → 驱动开发核心 → 总线驱动 → 外设驱动 → 系统移植
↓ ↓ ↓ ↓ ↓ ↓
01模块 02模块 03模块 04模块 05模块 06模块
知识模块
01-ARM架构与裸机编程
通用ARM知识,IMX6ULL实操
- [[01-ARM架构与裸机编程/01-Cortex-A7架构详解]] - 寄存器组、CPSR、工作模式、GIC中断、异常向量表
- [[01-ARM架构与裸机编程/02-ARM汇编基础]] - 指令集、寻址模式、伪指令、LED汇编示例
- [[01-ARM架构与裸机编程/03-时钟与电源管理]] - 7路PLL、时钟树、CCM寄存器、DVFS
- [[01-ARM架构与裸机编程/04-GPIO与中断系统]] - GPIO寄存器组、中断配置、IRQ_Handler
- [[01-ARM架构与裸机编程/05-定时器与看门狗]] - EPIT/GPT寄存器、定时器消抖、WDOG
- [[01-ARM架构与裸机编程/06-UART串口通信]] - UART寄存器位域、波特率公式、printf重定向
- [[01-ARM架构与裸机编程/07-BSP工程管理与封装]] - 目录结构、通用Makefile、链接脚本
- [[01-ARM架构与裸机编程/08-裸机实验总结]] - 10个裸机实验整合(LED→UART→LCD→I2C/SPI)
- [[01-ARM架构与裸机编程/面试-ARM架构与裸机]] - 30道真实面试题
02-嵌入式Linux内核基础
内核原理,跨平台通用
- [[02-嵌入式Linux内核基础/01-内核编译与配置]] - Kconfig语法、顶层Makefile、vmlinux生成链
- [[02-嵌入式Linux内核基础/02-内核模块编程]] - module_init/exit、printk、模块参数、符号导出
- [[02-嵌入式Linux内核基础/03-系统调用与VFS]] - sys_call_table、super_block/inode/dentry/file
- [[02-嵌入式Linux内核基础/04-进程调度与中断管理]] - task_struct、CFS调度、fork/COW、GIC-400
- [[02-嵌入式Linux内核基础/05-内存管理]] - 两级页表与TLB、伙伴系统、slab/slub、vmalloc/ioremap、DMA/CMA
- [[02-嵌入式Linux内核基础/06-设备模型与Kobject]] - kobject/kset/ktype、sysfs、总线-设备-驱动模型
- [[02-嵌入式Linux内核基础/面试-Linux内核基础]] - 30道真实面试题
03-Linux驱动开发核心
驱动理论 + IMX6ULL实践
- [[03-Linux驱动开发核心/01-字符设备驱动基础]] - file_operations、cdev、设备号、完整实验
- [[03-Linux驱动开发核心/02-设备树语法与实战]] - DTS语法、compatible、of_* API
- [[03-Linux驱动开发核心/03-pinctrl与gpio子系统]] - 引脚复用、宏展开、电气属性、gpiod API
- [[03-Linux驱动开发核心/04-并发同步与原子操作]] - 竞态分析、自旋锁、信号量、互斥体
- [[03-Linux驱动开发核心/05-中断下半部处理]] - softirq、tasklet、workqueue、线程化中断
- [[03-Linux驱动开发核心/06-阻塞IO与poll机制]] - 等待队列、select/poll、异步通知
- [[03-Linux驱动开发核心/07-platform总线模型]] - 总线匹配、of_match_table、probe流程
- [[03-Linux驱动开发核心/08-misc与input子系统]] - miscdevice、input_dev、事件上报
- [[03-Linux驱动开发核心/面试-Linux驱动开发]] - 35道真实面试题
04-Linux总线与接口驱动
通用总线知识
- [[04-Linux总线与接口驱动/01-I2C驱动开发]] - I2C协议、i2c_adapter/client/driver、AP3216C驱动
- [[04-Linux总线与接口驱动/02-SPI驱动开发]] - SPI四模式、spi_master/device/driver、ICM20608驱动
- [[04-Linux总线与接口驱动/03-USB驱动开发]] - USB设备架构、HCD、URB、鼠标/Gadget驱动
- [[04-Linux总线与接口驱动/04-CAN驱动开发]] - CAN帧与仲裁、SocketCAN、FlexCAN驱动
- [[04-Linux总线与接口驱动/05-RS232与485通信]] - tty/uart框架、uart_port/ops、RS485方向控制
- [[04-Linux总线与接口驱动/面试-总线接口驱动]] - 30道真实面试题
05-Linux外设驱动实战
具体外设,跨平台可迁移
- [[05-Linux外设驱动实战/01-LED与蜂鸣器驱动]] - GPIO子系统、设备树节点、完整源码
- [[05-Linux外设驱动实战/02-按键驱动]] - GPIO输入、消抖方案、中断、INPUT子系统
- [[05-Linux外设驱动实战/03-LCD驱动]] - RGB时序、framebuffer、fb_info、mxsfb驱动
- [[05-Linux外设驱动实战/04-触摸屏驱动]] - 电容触控、MT Protocol、FT5x06驱动、校准
- [[05-Linux外设驱动实战/05-音频驱动]] - I2S/SAI、WM8960 Codec、ALSA三层驱动模型
- [[05-Linux外设驱动实战/06-RTC与PWM驱动]] - SNVS-RTC驱动、PWM子系统、pwm_chip/ops
- [[05-Linux外设驱动实战/07-ADC与IIO驱动]] - vf610 ADC驱动、IIO子系统、缓冲区、trigger
- [[05-Linux外设驱动实战/08-块设备驱动]] - gendisk、request_queue、bio、请求处理
- [[05-Linux外设驱动实战/面试-外设驱动实战]] - 30道真实面试题
06-系统移植与启动
U-Boot + 内核 + 根FS,通用方法
- [[06-系统移植与启动/01-U-Boot命令与使用]] - 命令全集、环境变量、TFTP/NFS启动
- [[06-系统移植与启动/02-U-Boot启动流程]] - 源码结构、Makefile、SPL、重定位、main_loop
- [[06-系统移植与启动/03-Linux内核裁剪与编译]] - 配置系统、裁剪策略、顶层Makefile、dtc
- [[06-系统移植与启动/04-根文件系统构建]] - BusyBox配置编译、目录结构、/etc配置
- [[06-系统移植与启动/05-系统烧写与量产]] - SD/串口/USB烧写、MfgTool/UUU、量产方案
- [[06-系统移植与启动/面试-系统移植]] - 30道真实面试题
跨平台资源
| 知识领域 |
本项目 |
已有资源 |
| ARM裸机开发 |
01模块 |
[[STM32学习笔记/01-STM32概述与开发环境搭建]] |
| RTOS任务调度 |
- |
[[FreeRTOS学习笔记/02-任务调度与状态管理]] |
| 中断管理 |
01模块、02模块 |
[[FreeRTOS学习笔记/07-中断管理与临界段]] |
| GPIO操作 |
01模块、03模块 |
[[STM32学习笔记/02-GPIO寄存器详解与三步进化法]] |
| I2C/SPI通信 |
04模块 |
[[STM32学习笔记/07-I2C通信与EEPROM 24C02]] |
| 电路基础 |
- |
[[数电模电笔记/模电/01-半导体基础与PN结]] |
| PCB设计 |
- |
[[PCB学习笔记/01-PCB认识与EDA工具选择]] |
使用说明
作为复习资料
- 按模块阅读,每个模块有完整的知识点组织
- 面试题可用于自测
作为面试资料
- 每个模块末尾有"面试真题"文档
- 包含真实场景问题和参考答案
作为查询资料
作为迁移指南
- 每个主题有"跨平台对比"表格
- IMX6ULL vs STM32 vs RK3568
创建时间: 2026-09-16
基于资料: 正点原子I.MX6ULL阿尔法开发板教程V2.0.1