Re: [问题] 如何学习Linux Kernel Driver

楼主: wens (文思)   2016-05-08 10:50:56
看你写哪方面的驱动程式,不同硬件会有不同的需求。
C 语言要会是一定的。 Linux Kernel 还有用不少的 compiler extension,
这些遇到也要查一下。且里面也有些自订的 modifier ,像是 __init, __iomem
之类的。此外 kernel 有自己的一套函式库,没有 C 标准函式库。这部分
文件也不是太齐全,或许 LDD3 会介绍。我当年看 Linux Kernel Development 2e
现在有些东西也过时了。
通常不会用到组合语言,除非你写的是 arch 很底层的东西。
作业系统跟系统呼叫的观念要有。你要了解你写的驱动程式跟核心怎么互动,
是单纯透过中断呼叫呢? 还是有 DMA? 会不会直接跟 userspace 互动? (有些限制)
多执行绪的概念也要有。驱动程式是一大堆 callback,不是一个线性执行的程序。
该放 lock 就要放 lock,顺序型态要用对,如 interrupt handler 只能用 spinlock.
驱动程式会牵扯到硬件,所以对计算机组织也最好有点了解,快取的限制等等。
不过这部分常常是不同平台有自己的特性,且也不是所有硬件都会接触到。如果
你做的是 USB, I2C, SPI 之类的外接硬件,或许一开始就不需要。反过来说你就
需要去了解这些硬件总线囉。
系统程式应该是不需要。
但多学还是有帮助的。
另外我自己是没有读过 LDD3。
※ 引述《qazkevin (阿成)》之铭言:
: 各位大大好
: 小弟目前因为工作的关系需要学会看懂Linux Driver的程式码,
: 以前从来没学过这方面的东西,
: 想请问如果要学习Linux Kernel Driver,对于一个初学者来说,
: 如果要按部就班是否要先学会其它方面的相关知识,
: 有先稍微Google一下,
: 好像要先学会Linux的基本操作、C语言、Linux系统程式、系统呼叫、作业系统
: 以及硬件的基本控制概念,
: 小弟我本身有学过一点Linux(在Linux环境下做一些基本的操作),
: C语言也有学过,单就语法方面应该是还可以,
: 但是对于硬件或是作业系统的观念就很不行,
: 想请问各位我该如何学习Linux驱动程式
: 相关知识到底要懂哪些?
: 又要懂到何种程度?
: 恳求各位回答
: 感激不尽
: PS. 已经买了LDD3准备开始K了
作者: qazkevin (Linus)   2016-05-08 22:30:00
感谢wens大大,我工作写的driver是跟camera相关...听起来基本知识有好多,作业系统、计算机组织、系统呼叫
楼主: wens (文思)   2016-05-08 23:12:00
没办法... 就是这么复杂 @_@
作者: qazkevin (Linus)   2016-05-09 00:28:00
谢谢您的答复^_^
作者: liang168 (小强)   2016-05-09 11:27:00
我也是做camera Driver只占其中30%其他还有网页makefile先搞清楚make lib 和bash script 因使用linux开发都会用
作者: will12345610 (Mr.Positive)   2016-08-23 20:04:00
推一个

Links booklink

Contact Us: admin [ a t ] ucptt.com