本文說明 Linux 驅動程式的整體大架構,並說明基本的三種驅動程式類型。了解 Linux 驅動程式的大架構,絕對是學好驅動程式的第一步。
作者/陳俊宏
www.jollen.org
Linux 驅動程式的大架構
Linux 驅動程式的整體架構如下:
Linux 驅動程式三類型
Linux device driver 可分成 3 種類型:
驅動程式本身可分成 2 個層面來討論:
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's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw