基本信息原书名: Essential Linux Device Drivers原出版社: Prentice Hall作者: (印)Sreekrishnan Venkateswaran 译者: 宋宝华 何昭然 史海滨 吴国成丛书名: 图灵程序设计丛书 操作系统出版社:人民邮电出版社ISBN:9787115221674出版日期:2010 年6月页码:468内容简介本书是linux设备驱动程序开发领域的权威著作。全书基于2.6内核,不仅透彻讲解了基本概念和技术linux usb驱动程序开发linux usb驱动程序开发linux多线程编程linux培训,更深入探讨了其他书没有涵盖或浅尝辄止的许多重要主题和关键难点,如pcmcia、i2c和usb等外部总线以及视频、音频、无线连网和闪存等驱动程序的开发,并讲解了相关的内核源码文件,给出了完整的开发实例。本书适合中高级linux开发人员阅读。 目录第1章引言1 1.1演进1 1.2gnu copyleft2 2 1.4邮件列表和论坛3 1.5linux发行版3 1.6查看源代码4 1.7编译内核7 1.8可加载的模块8 1.9整装待发9 第2章内核11 2.1启动过程11 2.1.1bios-provided physical ram map12 2.1.2758mb lowmem available14 2.1.3kernel command line: ro root=/dev/hda114 2.1.4calibrating delay...1197.46 .bogomips (lpj=2394935)15 2.1.5checking hlt instruction16 2.1.6net: registered protocol family 217 2.1.7freeing initrd memory: 387k freed17 2.1.8io scheduler anticipatory registered (default)18 2.1.9setting up standard pci resources18 2.1.10ext3-fs: mounted filesystem19 2.1.11init: version 2.85 booting19 2.2内核模式和用户模式20 2.3进程上下文和中断上下文20 2.4内核定时器21 2.4.1hz和jiffies21 2.4.2长延时22 2.4.3短延时24 2.4.4pentium时间戳计数器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.6proc文件系统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.6kthread辅助接口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.4softirq和tasklet68 4.3linux设备模型71 4.3.1udev71 4.3.2sysfs、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设备实例:系统cmos82 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.2fasync98 5.4和并行端口交互99 5.5rtc子系统108 5.6伪字符驱动程序109 5.7混杂驱动程序110 5.8字符设备驱动程序注意事项115 5.9查看源代码115 第6章串行设备驱动程序118 6.1层次架构119 6.2uart驱动程序121 6.2.1设备实例:手机122 6.2.2rs-485132 6.3tty驱动程序132 6.4线路规程134 6.5查看源代码141 第7章输入设备驱动程序143 7.1输入事件驱动程序144 7.2输入设备驱动程序150 7.2.1serio150 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.1i2c/smbus是什么161 8.2i2c核心162 8.3总线事务164 8.4设备实例:eeprom164 8.4.1初始化165 8.4.2探测设备167 8.4.3检查适配器的功能169 8.4.4访问设备169 8.4.5其他函数170 8.5设备实例:实时时钟171 8.6i2c-dev174 8.7使用lm-sensors监控硬件174 8.8spi总线174 8.91-wire总线176 8.10调试176 8.11查看源代码176 第9章pcmcia和cf179 9.1pcmcia/cf是什么179 9.2linux-pcmcia子系统181 9.3主机控制器驱动程序183 9.4pcmcia核心183 9.5驱动程序服务183 9.6客户驱动程序183 9.6.1数据结构184 9.6.2设备实例:pcmcia卡185 9.7将零件组装在一起188 9.8pcmcia存储189 9.9串行pcmcia189 9.10调试191 9.11查看源代码191 第10章pci193 10.1pci系列193 10.2寻址和识别195 10.3访问pci198 10.3.1配置区198 10.3.2i/o和内存199 10.4dma200 10.5设备实例:以太网—调制解调器卡203 10.5.1初始化和探测203 10.5.2数据传输209 10.6调试214 10.7查看源代码214 第11章usb216 11.1usb体系架构216 11.1.1总线速度218 11.1.2主机控制器218 11.1.3传输模式219 11.1.4寻址219 11.2linux-usb子系统220 11.3驱动程序的数据结构221 11.3.1usb_device结构体221 11.3.2urb222 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.2usb-串行端口转换器241 11.6.3人机接口设备243 11.6.4蓝牙243 11.7gadget驱动程序243 11.8调试244 11.9查看源代码245 第12章视频驱动程序247 12.1显示架构247 12.2linux视频子系统249 12.3显示参数251 12.4帧缓冲api252 12.5帧缓冲驱动程序254 12.6控制台驱动程序265 12.6.1设备实例:手机266 12.6.2启动logo270 12.7调试270 12.8查看源代码271 第13章音频驱动程序273 13.1音频架构273 13.2linux声音子系统275 13.3设备实例:mp3播放器277 13.3.1驱动程序函数和结构体278 13.3.2alsa编程287 13.4调试288 13.5查看源代码289 第14章块设备驱动程序291 14.1存储技术291 14.2linux块i/o层295 14.3i/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设备实例:以太网nic316 15.5isa网络驱动程序321 15.6atm321 15.7网络吞吐量322 15.7.1驱动程序性能322 15.7.2协议性能323 15.8查看源代码324 第16章linux无线设备驱动326 16.1蓝牙327 16.1.1bluez328 16.1.2设备实例:cf卡329 16.1.3设备实例:usb适配器330 16.1.4rfcomm331 16.1.5网络332 16.1.6hid334 16.1.7音频334 16.1.8调试334 16.1.9关于源代码334 16.2红外335 16.2.1linux-irda335 16.2.2设备实例:超级i/o芯片337 16.2.3设备实例:ir dongle338 16.2.4ircomm340 16.2.5联网340 16.2.6irda套接字341 16.2.7lirc341 16.2.8查看源代码342 16.3wifi343 16.3.1配置343 16.3.2设备驱动程序346 16.3.3查看源代码347 16.4蜂窝网络347 16.4.1gprs347 16.4.2cdma349 16.5当前趋势350 第17章存储技术设备352 17.1什么是闪存352 17.2linux-mtd子系统353 17.3映射驱动程序353 17.4nor芯片驱动程序358 17.5nand芯片驱动程序359 17.6用户模块361 17.6.1块设备模拟361 17.6.2字符设备模拟361 17.6.3jffs2362 17.6.4yaffs2363 17.7mtd工具363 17.8配置mtd363 17.9xip364 17.10fwh364 17.11调试367 17.12查看源代码367 第18章嵌入式linux369 18.1挑战369 18.2元器件选择370 18.3工具链371 18.4bootloader372 18.5内存布局374 18.6内核移植375 18.7嵌入式驱动程序376 18.7.1闪存377 18.7.2uart377 18.7.3按钮和滚轮378 18.7.4pcmcia/cf378 18.7.5sd/mmc378 18.7.6usb378 18.7.7rtc378 18.7.8音频378 18.7.9触摸屏379 18.7.10视频379 18.7.11cpld/fpga379 18.7.12连接性379 18.7.13专用领域电子器件380 18.7.14更多驱动程序380 18.8根文件系统380 18.8.1nfs挂载的根文件系统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.2o(1)调度器387 19.1.3cfs388 19.1.4响应时间388 19.2访问i/o区域390 19.3访问内存区域393 19.4用户模式scsi395 19.5用户模式usb397 19.6用户模式i2c400 19.7uio401 19.8查看源代码402 第20章其他设备和驱动程序403 20.1ecc报告403 20.2频率调整407 20.3嵌入式控制器408 20.4acpi408 20.5isa与mca410 20.6火线410 20.7智能输入/输出411 20.8业余无线电411 20.9voip411 20.10高速互联412 20.10.1infiniband413 20.10.2rapidio413 20.10.3光纤通道413 20.10.4iscsi413 第21章调试设备驱动程序414 21.1kdb414 21.1.1进入调试器415 21.1.2kdb415 21.1.3kgdb417 21.1.4gdb420 21.1.5jtag调试器421 21.1.6下载423 21.2内核探测器423 21.2.1kprobe423 21.2.2jprobe427 21.2.3返回探针429 21.2.4局限性431 21.2.5查看源代码431 21.3kexec与kdump431 21.3.1kexec432 21.3.2kdump与kexec协同工作432 21.3.3kdump433 21.3.4查看源代码437 21.4性能剖析437 21.4.1利用oprofile剖析内核性能438 21.4.2利用gprof剖析应用程序性能440 21.5跟踪441 21.6ltp444 21.7uml444 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 附录alinux汇编453 附录blinux与bios457 附录cseq文件461