Linux 设备驱动的重点、难点

1.Linux学习重点和难点

● 编写 Linux 设备驱动要求工程师有非常好的硬件基础,懂得 SRAM、 Flash、 SDRAM、磁盘的读写方式,UART、 I2C、 USB 等设备的接口以及轮询、中断、 DMA 的原理,PCI 总线的工作方式以及 CPU 的内存管理单元( MMU)等。
● 编写 Linux 设备驱动要求工程师有非常好的 C 语言基础,能灵活地运用 C 语言的结构体、指针、函数指针及内存动态申请和释放等。
● 编写 Linux 设备驱动要求工程师有一定的 Linux 内核基础,虽然并不要求工程师对内核各个部分有深入的研究,但至少要明白驱动与内核的接口。尤其是对于块设备、网络设备、Flash 设备、串口设备等复杂设备,内核定义的驱动体系结构本身就非常复杂。
● 编写 Linux 设备驱动要求工程师有非常好的多任务并发控制和同步的基础,因为在驱动中会大量使用自旋锁、互斥、信号量、等待队列等并发与同步机制。
Linux 内核源代码中包含了一个 Documentation 目录,其中包含了一批内核设计文档,全部是文本文件。很遗憾,这些文档的组织不太好,内容也不够细致。
学习 Linux 设备驱动的一个注意事项是要避免管中窥豹、只见树木不见森林,因为各类 Linux 设备驱动都从属于一个 Linux 设备驱动的架构,单纯而片面地学习几个函数、几个数据结构是不可能理清驱动中各组成部分之间的关系的。因此, Linux 驱动的分析方法是点面结合,将对函数和数据结构的理解放在整体架构的背景之中。

2.源代码阅读和编辑

源代码是学习 Linux 的权威资料,在 Windows 上阅读 Linux 源代码的最佳工具是 Source Insight,在其中建立一个工程,并将 Linux 的所有源代码加入该工程,同步这个工程之后,我们将能非常便捷地在代码之间进行关联阅读。
类似 (http://lxr.free-electrons.com/http://lxr.oss.org.cn/ )这样的网站提供了 Linux 内核源代码的交叉索引,在其中输入 Linux 内核中的函数、数据结构或变量的名称就可以直接得到以超链接形式给出的定义和引用它的所有位置。还有一些网站也提供了 Linux 内核中函数、变量和数据结构的搜索功能,在 google 中搜索“ linux identifier search”可得。
在 Linux 主机上阅读和编辑 Linux 源码的常用方式是 vim + cscope 或者 vim + ctags, vim是一个文本编辑器,而 cscope 和 ctags 则可建立代码索引。

猜你喜欢

转载自blog.csdn.net/feike24/article/details/78421356