目录
说明:
第一章 linux设备驱动概述及开发环境构建
图1.1 无操作系统时硬件、 设备驱动和应用软件的关系
图1.4 硬件、 驱动、 操作系统和应用程序的关系
图1.5 Linux设备驱动与整个软硬件系统的关系
第二章 驱动设计的硬件基础
图2.2 冯·诺依曼结构与哈佛结构编辑
图2.3 改进的哈佛结构
图2.4 处理器分类
图2.5 典型的类SRAM接口
图2.6 双端口RAM
图2.8 存储器分类
图2.9 RS-232C串口电路原理
图2.10 I2C总线的开始位和停止位编辑
图2.11 I2C总线的时序
图2.12 SPI主、 从硬件连接图
图2.13 SPI总线的时序
图2.14 USB的物理拓扑结构
图2.15 以太网接口的硬件电路原理编辑
图2.16 基于PCI总线的计算机系统逻辑示意图
图2.17 PCI配置空间编辑
图2.18 SDIO单模块读、 写的典型时序
图2.19 典型的CPLD的单个宏单元结构
图2.20 典型的CPLD整体架构
图2.21 典型的FPGA内部结构
第三章 linux内核及内核编程
图3.2 Linux 2.4和2.6以后的内核在抢占上的区别
图3.3 Linux内核的组成部分与关系
图3.4 Linux进程状态转换
图3.5 Linux进程地址空间
图3.6 Linux内存管理
图3.7 Linux虚拟文件系统
图3.8 Linux网络体系结构
图3.11 ARM上的Linux引导流程
第四章 linux内核模块
第五章 linux文件系统与设备文件
图5.1 文件系统与设备驱动之间的关系
图5.2 应用程序、 VFS与设备驱动
图5.3 Linux设备模型
第六章 字符设备驱动
图6.1 字符设备驱动的结构编辑
第七章 linux设备驱动中的并发控制
图7.1 并发执行单元的顺序执行编辑
图7.2 并发执行单元的交错执行
图7.3 SMP体系结构
图7.4 SMP下多核之间的竞态
图7.5 SMP下核间与核内竞态
图7.8 自旋锁的使用实例 编辑
第八章 linux设备驱动中的阻塞与非阻塞I/O
图8.2 wait_queque_head_t、 wait_queque和task_struct之间的关系
图8.3 多路复用select()
第九章 linux设备驱动中的异步通知与异步I/O
图9.1 阻塞、 结合轮询的非阻塞I/O和异步通知的区别编辑
图9.2 异步通知中设备驱动和异步通知的交互
图9.3 异步I/O的时序
第十章 中断与时钟
图10.1 PIT定时器的工作原理编辑
图10.2 ARM多核处理器里的GIC
图10.3 Linux中断处理机制
图10.5 共享中断的处理
第十一章 内存与I/O访问
图11.1 内存空间和I/O空间
图11.2 内存中的转换表
图11.3 ARM处理器的MMU
图11.4 ARM CPU进行数据访问的流程
图11.5 用户空间与内核空间
图11.6 32位x86系统Linux内核的地址空间
图11.7 32位ARM系统中Linux内核的地址空间
图11.8 DMA、 常规、 高端内存区域分布
图11.9 buddy算法编辑
图11.10 I/O端口的访问流程
图11.11 I/O内存访问流程
图11.12 DMA目的地址与Cache对象没有重叠 编辑
图11.13 DMA目的地址与Cache对象有重叠
图11.14 MMU与IOMMU
第十二章 linux设备驱动的软件架构思想
图12.1 Linux设备和驱动的分离编辑
图12.2 Linux驱动的分层
图12.3 将M∶ N耦合转化为M∶ 1∶ N耦合
图12.4 Linux设备驱动的主机、 外设驱动分离
图12.5 Linux设备驱动的分层
图12.6 Linux内核输入子系统的框架
图12.7 Linux RTC设备驱动的分层
图12.8 Linux帧缓冲设备驱动的程序结构编辑
图12.9 Linux内核中tty的层次结构 编辑
图12.10 tty设备发送、 接收数据流的流程
图12.11 串口核心层
图12.12 tty驱动各层泛化编辑
第十三章 linux块设备驱动
图13.1 调整块设备I/O操作的顺序编辑
图13.2 Linux块设备子系统
图13.3 request_queue、 request、 bio和bio_vec
图13.4 vmem_disk的I/O处理过程
图13.5 Linux MMC子系统编辑
第十四章 网络设备驱动
图14.1 Linux网络设备驱动程序的体系结构编辑
图14.2 sk_buff的head、 data、 tail、 end指针
图14.3 NAPI驱动程序各部分的调用关系
第十五章 Linux I2C核心、 总线与设备驱动
图15.1 Linux的I2C体系结构编辑
图15.2 I2C驱动的各种数据结构的关系
图15.3 master_xfer() 完成的时序
图15.4 i2cdev_read() 和i2cdev_write() 函数对应的时序
图15.5 RepStart模式
第十六章 USB主机、 设备与Gadget驱动
图16.1 Linux USB驱动总体结构编辑
图16.2 USB设备、 配置、 接口和端点
图16.4 URB处理流程
第十七章 I2C、 SPI、 USB驱动架构类比
表17.1 I2C、 SPI、 USB驱动架构的类比编辑
图17.1 I2C主机和外设眼里的Linux世界
第十八章 ARM Linux设备树
图18.1 设备树参考硬件结构图编辑
图18.2 设备树的全景视图
第十九章 Linux电源管理的系统架构和驱动
图19.1 Linux内核电源管理的整体架构编辑
图19.2 CPUFreq、 系统负载、 策略与调频
图19.3 LADDER与MENU的区别编辑
图19.4 Linux CPUIdle子系统的整体架构编辑
图19.6 Regulator树形结构
图19.8 ARM的big.LITTLE架构
图19.9 Linux的待机模式
图19.10 Linux挂起到RAM流程
第二十章 Linux芯片级移植及底层驱动
图20.1 周期节拍的系统节拍中断发生的时序编辑
图20.3 屏蔽中断的3个不同位置
图20.4 SoC中断控制器的典型分布
图20.5 中断级联与映射
图20.6 一个典型的多核Linux启动过程
图20.7 CPU0唤醒其他CPU过程
图20.10 针对PGA封装的SoC的引脚分组
第二十一章 Linux设备驱动的调试
图21.2 DDD运行机理
该文档所有插图均来自宋宝华老师的《linux设备驱动开发详解——-基于最新的linux4.0内核》一书。截图出来仅做平时网页查阅学习。
空
图20.2 NO_HZ的运行节拍