Sreekrishnan Venkateswaran 大师对嵌入式学习的看法(摘抄)

来源:互联网 发布:第三方支付牌照 知乎 编辑:程序博客网 时间:2024/06/08 07:45

《精通Linux设备驱动程序开发》
                作者 Sreekrishnan Venkateswaran 对学习嵌入式的建议

Linux嵌入式开发流程一览表

(1)
确定设备的功能与接口技术。
根据这些回顾一下描述过相关设备驱动程序子系统的章节。
正如本书所述,几乎Linux上的每-个驱动程序子系统都包括核心层(用于提供驱动程序服务)
和抽象层(使应用程序独立于底层硬件之外〉(见第 18章中的图 18-3 )。
你所编写的驱动程序需要合乎此框架,并与子系统中的其他组件进行接口。如果你的设备是一个调制解调器,就需要学习UART 、 tty与线路规程层是如何工作的。如果待驱动的芯片是RTC或看门狗,就需要学习如何遵守相应的内核API。
如果你面对的是鼠标,就需要弄清楚如何将其和输入事件层联系在一起。如果是视频控制器,就要理解帧缓冲子系统。在开始驱动音频编解码器之前,研究一下ALSA框架。

(2)
获取设备的数据手册井理解其寄存器编程模式。例如,对于12CDVI发射机,需要弄明白设备的从地址以及初始化过程的编程顺序。
对于SPI触摸控制器,理解如何实现其有限状态机。
对于PCI以太网卡,研究其配置空间的操作。对于USB设备,需要弄清楚其支持的端点以及如何
与其通信。

(3)
在强大的内核源码树中,搜寻可作参考的驱动程序。研究候选的驱动程序,并修改合适的驱动程序。
某些子系统提供了驱动程序框架(例如 sound战ivers/dummy.c, drivers/usb/usbskeleton.c 、 drivers/net/pci-skeleton.c和 drivers/video/skeletonfb.c ),如果没有找到相近的参考驱动程
序,可以用它作为模型。

(4)
如果找到了参考驱动程序,通过比较二者的数据手册与原理图,研究参考驱动程序对应设备与你的硬件之间的差别。
譬如,假设你正基于一种支持参考硬件的Linux发行版为自己定制的电路板移植Linux,发行版中包括了已经在参考硬件上测试过的USB控制器驱动程序,但定制的电路板使用的USB收发器和其相同吗?
已有LCD控制器的帧缓冲驱动程序,但你的电路板是否使用了不同的显示面板接口(如L飞TDS) ?
也许参考板上的EEPROM使用 12c总线,而你的使用的是 1-wire总线。
以太网控制器连接的是一个不同的PHY芯片甚或是二层交换芯片?或者为了更大的传输范围和更高的稳定性, RS-232换成了 RS-485?

(5)
如果未找到相近的参考驱动程序,或者你决定从头开始编写自己的驱动程序,多花点时间在驱动程序及其数据结构的设计与框架构建上。

(6)
既然己掌握所需的所有知识,配备一些软件工具(如 etags 、 cscope和调试器)和实验室装备(如示波器、万用表和分析仪〉,开始编写代码吧。

下一步该做什么?

Linux就这样了,但只要有人想出了更巧妙的处理方式,内部的内核接口就过时了。没有一成不变的内核代码。即使是慎密构思的调度器,自 2.4内核以来也已经重写两次了。
每年在内核树中新增的代码有数百万行。随着内核的演进,为了获得更好的性能,新的特性和抽象不断增加,编程接口被重新设计,子系统被重新构建,可重用的部分经筛选后进入通用核心。
经过本书的学习,你已经打下了坚实的基础,能够跟上这些技术变化。为了让自己的技术水平一直处于最前沿,可以定期更新内核代码树,经常浏览内核邮件列表,只要有时间就编写代码。
将来是Linux的天下,成为内核专家一定会有高回报的。努力吧!