具体描述
本书是针对那些想在Linux操作系统下支持计算机外设或者是想在Linux下开发并运行新硬件的人而写的。Linux是UNIX市场中份额增长最快的操作系统,在许多应用领域中赢得了众多热心的追随者。本书展示了迄今为止流传于口头上的或隐含在源代码评注背后的信息,并引导您为众多的设备编写驱动程序。 您不必成为一个内核的"黑客"才可以理解并欣赏这本书。您所需要具备的只是对C语言和一些UNIX系统调用的背景知识
作者简介
Jonahan Corbet早在1981年就开始接触BSD Unix的源代码。那时,科罗拉多大学的一名讲师让他“修正”其中的分页算法。从那时起直到现在。他深入研究了他所遇到的每一个系统,其中包括VAX、Sun、Arden以及x86系统的驱动程序。他在1993年第一次接触Linux系统,从此以后一直从事Linux的开发。Corbet先生是《Linux Weekly News》的创始人和执行主编。他和妻子及两个孩子生活在科罗多州的玻尔得市。
目录信息
第一章 Linux内核简介
驱动程序作者的作用
划分内核
设备和模块的分类
安全问题
版本编号
许可证术语
全书概貌
第二章 编写和运行模块
模块与应用程序
编译和加载
版本相关性
内核符号表
初始化和终止
使用资源
自动和手动配置
在用户空间编写驱动程序
快速索引
第三章 字符设备驱动程序
Scull的设计
主设备号和次设备号
文件操作
file结构
Open和Close
Scull的内存使用
读和写
试试新设备
快速索引
第四章 调试技术
用打印信息调试
通过查询调试
通过监视进行调试
调试系统故障
使用调试器
第五章 字符设备驱动程序的扩展操作
ioctl
阻塞型I/O
Select
异步触发
定位设备
设备文件的访问控制
快速索引
第六章 时间流
内核中的时间间隔
获取当前时间
延迟执行
任务队列
内核定时器
快速索引
第六章 获取内存
kmalloc函数的内幕
get_free_Page和相关函数
Vmalloc和相关函数
“脏”的处理方法(Playing Dirty)
快速索引
第八章 硬件管理
使用1/O端口
使用并口
访问设备卡上的内存
访问字符模式的视频缓冲区
快速索引
第九章 中断处理
准备并口
安装中断处理程序
实现中断处理程序
下半部
共享中断
中断驱动的I/O
竞争条件
中断处理的版本相关性
快速索引
第十章 合理使用数据类型
使用标准C类型
分配确定的空间大小给数据项
接口特定的类型
其他与移植有关的问题
快速索引
第十一章 kerneld和高级模块化
按需加载模块
模块中的版本控制
跨过卸载/装载的持久存储
快速索引
第十二章 加载块设备驱动程序
注册驱动程序
头文件bik.h.
处理请求
挂载(Mounting)是如何工作的
ioctl方法
可拆卸的设备
可分区设备
中断驱动的块设备驱动程序
快速索引
第十三章 MMAP和DMA
Linux中的内存管理
mmap设备操作
直接内存访问(DMA)
快速索引
第十四章 网络驱动程序
snull如何设计
与内核相连
设备结构的细节
打开和关闭
包发送
包接收
中断驱动的操作
插座缓冲区
地址解析
加载时配置
运行时配置
自定义ioctl命令
统计信息
选播(multicasting)
快速索引
第十五章 外设总线概览
PCI接口
回顾:ISA
其他PC总线
Sbus
快速索引
第十六章 内核源代码的物理布局
引导内核
引导之前
Init进程
kernel目录
mm目录
fs目录
网络
IPC和lib函数
Drivers
体系结构相关性
第十七章 最新进展
模块化
文件操作
访问用户空间
任务队列
中断管理
位操作
转换函数
vremap
虚拟内存
处理内核空间错误
其他变化
· · · · · · (收起)
读后感
该书对字符设备驱动和linux内核同步的介绍还是很详细的。虽然其中关于usb和pci的介绍有点笼统和不够清楚,不过也可以使读者有一定的了解。另外本书还介绍了网络设备驱动,块设备和TTY驱动,覆盖面还是挺广的。貌似驱动程序的范式就是注册设备,然后实现xxxx_operations的成员。...
手头有两本,一本原版的,一本中译的。阅读原版的冲动屡屡受到my pool English的打击,所以特别感谢热心人整出来的中译本,都是熟悉的方块字,翻起顺手多了,呵呵。鄙人期间花了不少精力,在研究其中式表达想要说明的东东,但是这样也好,多花点时间没坏处,有助于深刻理解。这...
手头有两本,一本原版的,一本中译的。阅读原版的冲动屡屡受到my pool English的打击,所以特别感谢热心人整出来的中译本,都是熟悉的方块字,翻起顺手多了,呵呵。鄙人期间花了不少精力,在研究其中式表达想要说明的东东,但是这样也好,多花点时间没坏处,有助于深刻理解。这...
用户评价
我最近一直在尝试将一个老旧的PCI设备移植到最新的Linux内核版本上,过程中遇到了无数的ABI不兼容和内核API变更带来的头疼问题。坦白说,如果不是这本书在我手边,我可能早就放弃了。书中对内核模块加载与卸载生命周期的详尽描述,简直就是一部活的历史文档,清晰地勾勒出了不同内核版本间关键接口的演进路线。我特别关注了其中关于电源管理(PM)子系统的章节,它对运行时电源状态(Runtime Power States)的讲解,结合实际设备如何注册和退出低功耗模式的流程,为我的移植工作指明了方向。它没有简单地罗列API函数,而是将这些API置于整个系统调度的宏大背景下进行阐述,使得我们理解“为什么”要这样做,而不是仅仅“如何”去做。那种对系统工程整体性的把握,让我对Linux驱动的编写不再是零散的技巧堆砌,而是一项系统性的工程设计。
这本书对于那些想要深入理解现代硬件与操作系统交互模式的读者来说,无疑是一次宝贵的投资。我尤其关注了书中关于I/O调度器和DMA(直接内存访问)操作的章节。作者对scatter-gather列表的构建过程,以及如何通过DMA引擎实现零拷贝操作的描述,简直是性能优化的宝典。它揭示了为什么某些高带宽设备需要特殊的编程技巧才能充分发挥其吞吐量,这远超出了简单地调用`dma_alloc_coherent`的范畴。书中对内存屏障(Memory Barriers)的讲解也极为透彻,解释了处理器乱序执行和缓存一致性问题如何直接影响到多核环境下的驱动程序正确性。它不是在教你如何编写一个能工作的驱动,而是在教你如何编写一个在极限负载下依然能保持数据完整性和系统稳定性的驱动,这种对“健壮性”的追求,是这本书最核心的价值所在。
这本书的叙述风格有一种沉稳而严谨的学术气质,它似乎天然地排斥那些浮夸的营销术语,专注于技术本身的精髓。我欣赏它在处理复杂概念时所展现出的耐心,比如对同步和异步通知机制的区分,以及如何恰当地选择使用`wait_event`系列函数而非更底层的忙等待循环。特别值得一提的是,书中对于总线(Bus)、设备(Device)和驱动(Driver)这“三元组”的绑定过程的描述,那种自底向上、层层抽象的设计思想,完美体现了面向对象思想在内核编程中的应用。理解了这三者之间的注册、探测和移除流程,就如同拿到了打开所有现代Linux设备驱动的“万能钥匙”。通过跟随书中一个虚拟的SPI总线设备的例子,我清晰地看到了整个探测流程是如何从设备树(Device Tree)开始,最终链接到对应的驱动回调函数的,逻辑清晰得令人折服。
这本书简直是为那些渴望深入理解操作系统内核与硬件交互的工程师量身定做的“圣经”。它不仅仅停留在表面的概念介绍,而是扎扎实实地剖析了Linux内核中驱动程序的核心架构和设计哲学。我花了整整一个周末的时间研读了其中关于内存映射I/O(MMIO)和中断处理机制的那几章,茅塞顿开。作者对硬件寄存器的访问细节描述得极其精确,配合源码级的分析,让原本抽象的硬件抽象层(HAL)变得触手可及。尤其赞赏的是,书中并未回避那些在实际开发中极易出错的竞态条件和同步问题,而是提供了大量实用的锁机制、信号量和原子操作的范例,这些都是编写健壮、高性能驱动的基石。对于任何打算从事嵌入式系统开发、网络设备驱动优化,或者需要对现有驱动进行深度调试和性能调优的专业人士来说,这本书的价值是无可替代的。它强迫你跳出“用户态编程”的舒适区,真正进入到与时钟、总线和中断争夺资源的微观世界,那种成就感,是看其他高层级教程无法比拟的。
说实话,刚翻开这本书的时候,我有点被其厚度和技术深度吓到了,这绝对不是一本可以“快速入门”的读物。它更像是一本需要反复查阅、边实践边对照的参考手册。我印象最深的是关于字符设备和块设备的驱动模型对比,作者没有用过于简化的比喻,而是直接展示了`file_operations`结构体在不同设备类型下的实际填充差异,并解释了它们背后对应的内核数据结构是如何协同工作的。对于字符设备,它对`ioctl`的深入探讨,特别是如何安全地处理用户空间传递过来的数据缓冲区,是教科书级别的安全实践指南。很多初学者可能会为了省事而直接使用`copy_from_user`,但这本书详细解释了错误的内存访问可能导致的内核崩溃,以及如何通过更健壮的API来避免这些陷阱。读完这部分内容,我对自己编写的第一个简单驱动的安全性有了全新的认识,感觉自己终于跨越了“能跑”到“可靠”的门槛。
我的驱动启蒙
这本书是基于老版本的linux内核的,所以里面很多程序都要改。这是个很繁琐但也算是个锻炼人的机会吧。要完全看懂的话还要求对linux内核比较熟悉。但是因为里面可以实践,做做小测试。比那些光讲理论的要有趣点~
这本书是基于老版本的linux内核的,所以里面很多程序都要改。这是个很繁琐但也算是个锻炼人的机会吧。要完全看懂的话还要求对linux内核比较熟悉。但是因为里面可以实践,做做小测试。比那些光讲理论的要有趣点~
这本书是基于老版本的linux内核的,所以里面很多程序都要改。这是个很繁琐但也算是个锻炼人的机会吧。要完全看懂的话还要求对linux内核比较熟悉。但是因为里面可以实践,做做小测试。比那些光讲理论的要有趣点~
这本书是基于老版本的linux内核的,所以里面很多程序都要改。这是个很繁琐但也算是个锻炼人的机会吧。要完全看懂的话还要求对linux内核比较熟悉。但是因为里面可以实践,做做小测试。比那些光讲理论的要有趣点~