Linux 驅動程式觀念解析, #1: 驅動程式的大架構

jollen 發表於 May 4, 2006 8:15 AM

本文說明 Linux 驅動程式的整體大架構,並說明基本的三種驅動程式類型。了解 Linux 驅動程式的大架構,絕對是學好驅動程式的第一步。

作者/陳俊宏
www.jollen.org

Linux 驅動程式的大架構

Linux 驅動程式的整體架構如下:

  1. application 透過 system call 介面與 kernel 溝通。
  2. 透過 kernel 的 VFS 層與 Linux 驅動程式物件溝通。
  3. 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's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue

您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw