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 可以確保系統運行的安全性與穩定性。

讀者留言 (18)

  • Dean 於 July 9, 2008 10:40:

    你好
    你的文章很多圖檔都失聯了,
    不知道能否再把他修覆

    謝謝

  • stanley 於 August 12, 2008 12:34:

    您好,請問一下我在瀏覽[Linux 驅動程式觀念解析的時候],圖案都無法正常顯示,eg.[# Linux 驅動程式可分為 3 大類型,如下圖綠色部份]這個部份的圖無法正常顯示,可否檢查一下,以方便瀏覽~thx

  • 匿名 於 August 21, 2008 10:24:

    你好:
    你的文章,個人覺得很有益處說
    謝謝你分享資訊

  • 匿名 於 September 23, 2008 16:10:

    你好:
    你的文章,讓我對Linux Driver
    有比較清楚的概念,
    可惜的是圖片無法顯示。
    謝謝你的分享
    God bless you

  • guess 於 April 15, 2009 14:25:

    我是初學者,這個文章讓我有基本的概念,謝謝你!
    請問可以寄 Linux 驅動程式(3大類型)的圖給我嗎?

  • a 於 May 18, 2009 20:49:

    請問也可以寄 Linux 驅動程式(3大類型)的圖給我嗎?
    謝謝

  • a 於 May 18, 2009 20:49:

    請問也可以寄 Linux 驅動程式(3大類型)的圖給我嗎?
    謝謝

  • a 於 May 18, 2009 20:50:

    請問也可以寄 Linux 驅動程式(3大類型)的圖給我嗎?
    謝謝

  • x 於 May 18, 2009 20:51:

    請問也可以寄 Linux 驅動程式(3大類型)的圖給我嗎?
    謝謝

  • eric 於 June 4, 2009 12:06:

    請問也可以寄 Linux 驅動程式(3大類型)的圖給我嗎?
    謝謝

  • austin 於 July 27, 2009 11:13:

    請問也可以寄 Linux 驅動程式(3大類型)的圖給我嗎?
    謝謝

  • terry 於 October 29, 2010 09:14:

    請問也可以寄 Linux 驅動程式(3大類型)的圖給我嗎?
    謝謝

  • sky 於 January 26, 2011 15:49:

    您的文章很不错,非常感谢您的分享~~

  • EricYang 於 April 9, 2011 14:49:

    小弟是個初學者
    非常感謝你的文章
    寫的很棒,很容意懂

  • Jian 於 December 19, 2011 16:46:

    不知道是否可以寄Linux 驅動程式(3大類型)的圖給我嗎?小弟目前正在研究有關驅動相關關係,謝謝。

  • Aaron 於 February 15, 2012 10:57:

    小弟是個初學者,最近在研究Linux 驅動程式,可以的話可否寄Linux 驅動程式(3大類型)的圖給我嗎? 非常感謝~

  • medal 於 July 11, 2012 12:05:

    請問也可以寄 Linux 驅動程式(3大類型)的圖給我嗎?

  • 陳小布 於 April 15, 2015 23:34:

    請問可以跟您要Linux 驅動程式(3大類型)的圖片嗎?
    謝謝

留言功能維護中。將於近日重新開放。

連絡作者

Jollen Chen,Moko365(仕橙3G教室)講師,熱愛研究 Linux 與 Android 技術。曾為 Motorola、HTC、Foxconn、LG、OPPO、騰迅、廣達電腦、緯創、仁寶等超過 50 家企業講授課程。目前在 MokoVersity 擔任軟體工程師,撰寫 Node.js 程式,也在幾家科技廠兼任 Android Framework 研發顧問。您可透過電子郵件 <jollen (at) jollen (dot) org> 或這裡與我連絡。