本文說明 Linux 驅動程式的整體大架構,並說明基本的三種驅動程式類型。了解 Linux 驅動程式的大架構,絕對是學好驅動程式的第一步。
作者/陳俊宏
www.jollen.org
Linux 驅動程式的大架構
Linux 驅動程式的整體架構如下:
- application 透過 system call 介面與 kernel 溝通。
- 透過 kernel 的 VFS 層與 Linux 驅動程式物件溝通。
- Linux 驅動程式可分為 3 大類型,如下圖綠色部份。

Linux 驅動程式三類型
Linux device driver 可分成 3 種類型:
- character device driver
- block device driver
- network device driver
驅動程式本身可分成 2 個層面來討論:
- virtual device driver
- physical device driver
Virtual Device Driver
往上層支援 Linux kernel 所提供的 Virtual File System 層,並藉此實作 system calls。使用者可透過 system call interface 與 device driver 溝通。
Virtual device driver 的主題重要性大於 physical device driver,如何善用 Linux 所提供的介面 (interface) 來設計驅動程式,並配合 user application 來設計應用程式是這個主題的重點。與 user application 如何互動,是撰寫驅動程式時所要考慮的重要一環,只考量驅動程式本身的設計,而忽略或輕忽 user application 的設計,是錯誤的觀念。
Virtual device driver 的目的在於善用 Linux 的 APIs 來設計機制 (mechanism) 與行為 (behavior) 良好的驅動程式,因此「觀念」的重要性遠大於「語法」的討論。本書秉持這樣的信念撰寫而成,仔細閱讀絕對是多多益善的。
Physical Device Driver
往下層使用 Linux kernel 所提供的 device interface 來存取並控制實體硬體裝置。
Physical device driver 則是討論「如何透過 I/O port 或 I/O memory」來控制裝置,也就是與晶片組的溝通。這個部份需要實作晶片組的 data sheet,本書會以市面上最容易取得的 BT878 視訊擷取晶片為例做說明。
小結
學習 Linux device driver 應由 character device driver 起步,因為許多重要的入門觀念均可藉由 character device driver 學得。
OS 是設計良好的軟硬體介面,Linux 驅動程式設計即是在學習如何使用 Linux 提供的介面來設計驅動程式。
在 OS 上應使用設計良好的 API 來撰寫驅動程式,使用 OS API 的最大優點是使得驅動程式的設計抽象化 (abstraction),我們可以不需要太深入硬體層次。
Linux kernel 所提供的 API 均經過良好設計,因此使用 kernel 所提供的 API 可以確保系統運行的安全性與穩定性。
--jollen

評論 (4)
你好
你的文章很多圖檔都失聯了,
不知道能否再把他修覆
謝謝
由 Dean | July 9, 2008 10:40 AM
發表於 July 9, 2008 10:40
您好,請問一下我在瀏覽[Linux 驅動程式觀念解析的時候],圖案都無法正常顯示,eg.[# Linux 驅動程式可分為 3 大類型,如下圖綠色部份]這個部份的圖無法正常顯示,可否檢查一下,以方便瀏覽~thx
由 stanley | August 12, 2008 12:34 PM
發表於 August 12, 2008 12:34
你好:
你的文章,個人覺得很有益處說
謝謝你分享資訊
由 匿名 | August 21, 2008 10:24 AM
發表於 August 21, 2008 10:24
你好:
你的文章,讓我對Linux Driver
有比較清楚的概念,
可惜的是圖片無法顯示。
謝謝你的分享
God bless you
由 匿名 | September 23, 2008 4:10 PM
發表於 September 23, 2008 16:10