分享《Essential Linux Device Drivers》中文版高清电子版

新浪微博 @宋宝华Barry 在@微盘 分享了 Prentice.Hall出版社《Essential.Linux.Device.Drivers》中文版高清电子版 "宋宝华_精通LINUX设备驱动开发.pdf" http://t.cn/zYjS7sh

目  录



第1章 引言 1


1.1 演进 1


1.2 gnu copyleft 2


1.3 kernel.org 2


1.4 邮件列表和论坛 3


1.5 linux发行版 3


1.6 查看源代码 4


1.7 编译内核 7


1.8 可加载的模块 8


1.9 整装待发 9


第2章 内核 11


2.1 启动过程 11


2.1.1 bios-provided physical ram map 12


2.1.2 758mb lowmem available 14


2.1.3 kernel command line: ro


root=/dev/hda1 14


2.1.4 calibrating delay...1197.46


.bogomips (lpj=2394935) 15


2.1.5 checking hlt instruction 16


2.1.6 net: registered protocol family 2 17


2.1.7 freeing initrd memory: 387k freed 17


2.1.8 io scheduler anticipatory


registered (default) 18


2.1.9 setting up standard pci resources 18


2.1.10 ext3-fs: mounted filesystem 19


2.1.11 init: version 2.85 booting 19


2.2 内核模式和用户模式 20


2.3 进程上下文和中断上下文 20


2.4 内核定时器 21


2.4.1 hz和jiffies 21


2.4.2 长延时 22


2.4.3 短延时 24


2.4.4 pentium时间戳计数器 24


2.4.5 实时钟 25


2.5 内核中的并发 26


2.5.1 自旋锁和互斥体 26


2.5.2 原子操作 30


2.5.3 读—写锁 31


2.5.4 调试 32


2.6 proc文件系统 32


2.7 内存分配 33


2.8 查看源代码 34


第3章 内核组件 37


3.1 内核线程 37


3.1.1 创建内核线程 37


3.1.2 进程状态和等待队列 41


3.1.3 用户模式辅助程序 42


3.2 辅助接口 43


3.2.1 链表 44


3.2.2 散列链表 49


3.2.3 工作队列 49


3.2.4 通知链 51


3.2.5 完成接口 54


3.2.6 kthread辅助接口 56


3.2.7 错误处理助手 57


3.3 查看源代码 58


第4章 基本概念 61


4.1 设备和驱动程序介绍 61


4.2 中断处理 63


4.2.1 中断上下文 63


4.2.2 分配irq号 64


4.2.3 设备实例:导航杆 65


4.2.4 softirq和tasklet 68


4.3 linux设备模型 71


4.3.1 udev 71


4.3.2 sysfs、kobject和设备类 73


4.3.3 热插拔和冷插拔 76


4.3.4 微码下载 76


4.3.5 模块自动加载 77


4.4 内存屏障 78


4.5 电源管理 79


4.6 查看源代码 79


第5章 字符设备驱动程序 81


5.1 字符设备驱动程序基础 81


5.2 设备实例:系统cmos 82


5.2.1 驱动程序初始化 83


5.2.2 打开与释放 86


5.2.3 数据交换 88


5.2.4 查找 92


5.2.5 控制 94


5.3 检测数据可用性 95


5.3.1 轮询 95


5.3.2 fasync 98


5.4 和并行端口交互 99


5.5 rtc子系统 108


5.6 伪字符驱动程序 109


5.7 混杂驱动程序 110


5.8 字符设备驱动程序注意事项 115


5.9 查看源代码 115


第6章 串行设备驱动程序 118


6.1 层次架构 119


6.2 uart驱动程序 121


6.2.1 设备实例:手机 122


6.2.2 rs-485 132


6.3 tty驱动程序 132


6.4 线路规程 134


6.5 查看源代码 141


第7章 输入设备驱动程序 143


7.1 输入事件驱动程序 144


7.2 输入设备驱动程序 150


7.2.1 serio 150


7.2.2 键盘 150


7.2.3 鼠标 152


7.2.4 触摸控制器 157


7.2.5 加速度传感器 158


7.2.6 输出事件 158


7.3 调试 159


7.4 查看源代码 160


第8章 i2c协议 161


8.1 i2c/smbus是什么 161


8.2 i2c核心 162


8.3 总线事务 164


8.4 设备实例:eeprom 164


8.4.1 初始化 165


8.4.2 探测设备 167


8.4.3 检查适配器的功能 169


8.4.4 访问设备 169


8.4.5 其他函数 170


8.5 设备实例:实时时钟 171


8.6 i2c-dev 174


8.7 使用lm-sensors监控硬件 174


8.8 spi总线 174


8.9 1-wire总线 176


8.10 调试 176


8.11 查看源代码 176


第9章 pcmcia和cf 179


9.1 pcmcia/cf是什么 179


9.2 linux-pcmcia子系统 181


9.3 主机控制器驱动程序 183


9.4 pcmcia核心 183


9.5 驱动程序服务 183


9.6 客户驱动程序 183


9.6.1 数据结构 184


9.6.2 设备实例:pcmcia卡 185


9.7 将零件组装在一起 188


9.8 pcmcia存储 189


9.9 串行pcmcia 189


9.10 调试 191


9.11 查看源代码 191


第10章 pci 193


10.1 pci系列 193


10.2 寻址和识别 195


10.3 访问pci 198


10.3.1 配置区 198


10.3.2 i/o和内存 199


10.4 dma 200


10.5 设备实例:以太网—调制解调器卡 203


10.5.1 初始化和探测 203


10.5.2 数据传输 209


10.6 调试 214


10.7 查看源代码 214


第11章 usb 216


11.1 usb体系架构 216


11.1.1 总线速度 218


11.1.2 主机控制器 218


11.1.3 传输模式 219


11.1.4 寻址 219


11.2 linux-usb子系统 220


11.3 驱动程序的数据结构 221


11.3.1 usb_device结构体 221


11.3.2 urb 222


11.3.3 管道 223


11.3.4 描述符结构 223


11.4 枚举 225


11.5 设备实例:遥测卡 225


11.5.1 初始化和探测过程 226


11.5.2 卡寄存器的访问 230


11.5.3 数据传输 233


11.6 类驱动程序 236


11.6.1 大容量存储设备 236


11.6.2 usb-串行端口转换器 241


11.6.3 人机接口设备 243


11.6.4 蓝牙 243


11.7 gadget驱动程序 243


11.8 调试 244


11.9 查看源代码 245


第12章 视频驱动程序 247


12.1 显示架构 247


12.2 linux视频子系统 249


12.3 显示参数 251


12.4 帧缓冲api 252


12.5 帧缓冲驱动程序 254


12.6 控制台驱动程序 265


12.6.1 设备实例:手机 266


12.6.2 启动logo 270


12.7 调试 270


12.8 查看源代码 271


第13章 音频驱动程序 273


13.1 音频架构 273


13.2 linux声音子系统 275


13.3 设备实例:mp3播放器 277


13.3.1 驱动程序函数和结构体 278


13.3.2 alsa编程 287


13.4 调试 288


13.5 查看源代码 289


第14章 块设备驱动程序 291


14.1 存储技术 291


14.2 linux块i/o层 295


14.3 i/o调度器 295


14.4 块驱动程序数据结构和方法 296


14.5 设备实例:简单存储控制器 298


14.5.1 初始化 299


14.5.2 块设备操作 301


14.5.3 磁盘访问 302


14.6 高级主题 304


14.7 调试 306


14.8 查看源代码 306


第15章 网络接口卡 308


15.1 驱动程序数据结构 308


15.1.1 套接字缓冲区 309


15.1.2 网络设备接口 310


15.1.3 激活 311


15.1.4 数据传输 311


15.1.5 看门狗 311


15.1.6 统计 312


15.1.7 配置 313


15.1.8 总线相关内容 314


15.2 与协议层会话 314


15.2.1 接收路径 314


15.2.2 发送路径 315


15.2.3 流量控制 315


15.3 缓冲区管理和并发控制 315


15.4 设备实例:以太网nic 316


15.5 isa网络驱动程序 321


15.6 atm 321


15.7 网络吞吐量 322


15.7.1 驱动程序性能 322


15.7.2 协议性能 323


15.8 查看源代码 324


第16章 linux无线设备驱动 326


16.1 蓝牙 327


16.1.1 bluez 328


16.1.2 设备实例:cf卡 329


16.1.3 设备实例:usb适配器 330


16.1.4 rfcomm 331


16.1.5 网络 332


16.1.6 hid 334


16.1.7 音频 334


16.1.8 调试 334


16.1.9 关于源代码 334


16.2 红外 335


16.2.1 linux-irda 335


16.2.2 设备实例:超级i/o芯片 337


16.2.3 设备实例:ir dongle 338


16.2.4 ircomm 340


16.2.5 联网 340


16.2.6 irda套接字 341


16.2.7 lirc 341


16.2.8 查看源代码 342


16.3 wifi 343


16.3.1 配置 343


16.3.2 设备驱动程序 346


16.3.3 查看源代码 347


16.4 蜂窝网络 347


16.4.1 gprs 347


16.4.2 cdma 349


16.5 当前趋势 350


第17章 存储技术设备 352


17.1 什么是闪存 352


17.2 linux-mtd子系统 353


17.3 映射驱动程序 353


17.4 nor芯片驱动程序 358


17.5 nand芯片驱动程序 359


17.6 用户模块 361


17.6.1 块设备模拟 361


17.6.2 字符设备模拟 361


17.6.3 jffs2 362


17.6.4 yaffs2 363


17.7 mtd工具 363


17.8 配置mtd 363


17.9 xip 364


17.10 fwh 364


17.11 调试 367


17.12 查看源代码 367


第18章 嵌入式linux 369


18.1 挑战 369


18.2 元器件选择 370


18.3 工具链 371


18.4 bootloader 372


18.5 内存布局 374


18.6 内核移植 375


18.7 嵌入式驱动程序 376


18.7.1 闪存 377


18.7.2 uart 377


18.7.3 按钮和滚轮 378


18.7.4 pcmcia/cf 378


18.7.5 sd/mmc 378


18.7.6 usb 378


18.7.7 rtc 378


18.7.8 音频 378


18.7.9 触摸屏 379


18.7.10 视频 379


18.7.11 cpld/fpga 379


18.7.12 连接性 379


18.7.13 专用领域电子器件 380


18.7.14 更多驱动程序 380


18.8 根文件系统 380


18.8.1 nfs挂载的根文件系统 381


18.8.2 紧凑型中间件 382


18.9 测试基础设施 383


18.10 调试 383


18.10.1 电路板返工 384


18.10.2 调试器 385


第19章 用户空间的驱动程序 386


19.1 进程调度和响应时间 387


19.1.1 原先的调度器 387


19.1.2 o(1)调度器 387


19.1.3 cfs 388


19.1.4 响应时间 388


19.2 访问i/o区域 390


19.3 访问内存区域 393


19.4 用户模式scsi 395


19.5 用户模式usb 397


19.6 用户模式i2c 400


19.7 uio 401


19.8 查看源代码 402


第20章 其他设备和驱动程序 403


20.1 ecc报告 403


20.2 频率调整 407


20.3 嵌入式控制器 408


20.4 acpi 408


20.5 isa与mca 410


20.6 火线 410


20.7 智能输入/输出 411


20.8 业余无线电 411


20.9 voip 411


20.10 高速互联 412


20.10.1 infiniband 413


20.10.2 rapidio 413


20.10.3 光纤通道 413


20.10.4 iscsi 413


第21章 调试设备驱动程序 414


21.1 kdb 414


21.1.1 进入调试器 415


21.1.2 kdb 415


21.1.3 kgdb 417


21.1.4 gdb 420


21.1.5 jtag调试器 421


21.1.6 下载 423


21.2 内核探测器 423


21.2.1 kprobe 423


21.2.2 jprobe 427


21.2.3 返回探针 429


21.2.4 局限性 431


21.2.5 查看源代码 431


21.3 kexec与kdump 431


21.3.1 kexec 432


21.3.2 kdump与kexec协同工作 432


21.3.3 kdump 433


21.3.4 查看源代码 437


21.4 性能剖析 437


21.4.1 利用oprofile剖析内核性能 438


21.4.2 利用gprof剖析应用程序性能 440


21.5 跟踪 441


21.6 ltp 444


21.7 uml 444


21.8 诊断工具 444


21.9 内核修改配置选项 444


21.10 测试设备 445


第22章 维护与发布 446


22.1 代码风格 446


22.2 修改标记 446


22.3 版本控制 447


22.4 一致性检查 447


22.5 构建脚本 448


22.6 可移植代码 450


第23章 结束语 451


23.1 流程一览表 451


23.2 下一步该做什么 452


附录a linux汇编 453


附录b linux与bios 457


附录c seq文件 461

你可能感兴趣的:(linux,中文版,device,Drivers,Essential)