- 论坛徽章:
- 0
|
1. 分享Linux内核学习和驱动开发的经验。
学校内核更多的是要去理解整个Linux的框架,所以一定要从宏观切入,从顶向下,从大到小,从巨到细。
驱动只是linux内核的一部分,只有明白了基本的概念之后才能理解驱动中用到的技术和api的意义。
刚开始不可能所有的都弄的很懂很细,有些东西可以暂时跳过, 一定要先从整体上把握Linux内核的结构,然后理解一些基本概念,再去看驱动。
一般驱动是面向具体功能的,比如一个芯片的驱动,如触摸屏驱动,它向下连接的是不同的触屏芯片,向上连接的是linux的input系统。它的功能就是把输入的物理信号转换成input系统能识别的输入信号。然后再去看为了实现这些功能,驱动是如何与芯片互动的,又是如何遵循字符设备驱动框架的,等等。再慢慢去看一些复杂的驱动框架如USB, ALSA, V4L2等。
2. 您觉得Linux驱动开发的难点是什么,有什么好的方法来克服?
Linux驱动开发其实是比较好入门的,看看ldd这一系列的书基本上写个字符驱动没有什么问题,难点在于把知识融汇起来去解决实际问题以及在复杂的驱动架构中去解决问题。这两个问题需要开发者对于linux框架和基本接口很熟悉,同时思考问题有大局观,同时也能考虑到细节实现上。
3. Linux内核有上百个驱动子系统,你研究过内核各种驱动子系统的共性,层次结构设计吗?分享学习一个Linux内核子系统的经验,例如USB、I2C、HID等driver。
推荐驱动子系统的学习步骤是从最简单的入手,如ldd中的虚拟驱动,再到简单的字符设备驱动如ts驱动、再到一些总线驱动如I2C的EEPROM等,再到USB、ALSA、V4L2等结构复杂的。
|
|