星期三, 3月 12, 2008

O’Reilly, “Linux Device Drivers” 的讀法

以下摘自 Jollen 的 Howto Learn Linux Device Driver

O’Reilly, “Linux Device Drivers” 的讀法

如果您是Linux驅動程式的初學者,想要以這本書來自學驅動程式,又要在最短時間內掌握整個Linux驅動程式的精神,那麼有幾個方向提供您做參考:
  • 不要依照章節順序來閱讀
  • 不要地毯式的閱讀(即:不要依照章節與段落順序)
這本書的觀念解釋的非常清楚,但是最主要的Linux驅動程式觀念都在字元型驅動程式的章節裡,因此依照字元型驅動程式的主題來閱讀會比較適當。建議順序如下:

  1. Virtual File System (VFS)
  2. 'open' and 'release' system calls
  3. 'open' and 'release' driver function
  4. Wait Queues
  5. Blocking and Nonblocking read/write
  6. kmalloc(), copy_to_user(), copy_from_user()
  7. I/O ports
  8. ioctl()
  9. 'ioctl' driver function
  10. Reentrant codes (function)
  11. Semaphore
  12. Kernel Timer, Asynchronous Notification
  13. Pre-Defined Task Queues
  14. User-Defined Task Queues
  15. Writing an Interrupt Handler
  16. PCI Device Driver
  17. Spinlocks
  18. Bottom-half and Tasklets

此建議順序即是Jollen教育訓練課程所使用的投影片主題順序,自學的朋友,應該參考此建議順序,規劃一套屬於自己的閱讀計畫,如此便能加速學習Linux驅動程式。


結語
我們條列說明Linux驅動程式的核心觀念,以利讀者掌握學習方向:

  1. Device file 是user application與Linux驅動程式溝通的媒介。
  2. Device file 有一個不重覆的識別號碼,稱為major number,並有自己的minor number用來表示自己的子裝置。
  3. 不同的Linux驅動程式,均「支援」一個device file;更精確的說法是,不同的Linux驅動程式,均「對應」一個「major number」。
  4. Device file 即是VFS層。
  5. Linux驅動程式的核心為file operations,此即「Linux 驅動程式物件」。
  6. User application透過system call與device file 來與驅動程式溝通,user application必須先呼叫open system call來「開啟驅動程式」。
  7. 不同的system call C函數,會透過Linux kernel對應,並由Linux kernel callback驅動程式裡相對應的 system call實作函數。
  8. 驅動程式裡個別的system call實作函數,是由file operations所定義的。
  9. File operations 即struct file_operations,struct file_operations定義system call的名稱與實作函數的對應,此對應關係使用「函數指標」來實作。

沒有留言: