< >
長久以來,對於任何想要在 Linux 作業系統下支援電腦週邊、想要在 Linux 下跑新式硬體、或只是有興趣探討 Linux 核心程式設計觀念的工程師,《Linux 驅動程式》已成為必讀的經典之作。關於如何設計各式各樣驅動程式的知識,原本深藏於原始程式註解的字裡行間,或是只能靠口語相傳,而《Linux 驅動程式》給你有條理的解釋與示範。本書的作者群都是 Linux 開發圈子裡的領導者。Jonathan Corbet 是廣受好評的 LWN.net 新聞資訊網站的執行編輯,他偶爾也貢獻程式碼給 Linux 核心。 Alessandro Rubini 也貢獻程式給 Linux 核心,他更是熱情的義大利 Linux 社群的精神領袖。Greg Kroah-Hartman 目前是 Linux 2.6 核心中的 USB、PCI 與 Driver core 等子系統的維護者。驅動程式必須依照核心提供的軟體介面來設計,核心改版,驅動程式也必須跟著改變。相較於 2.4 版核心,Linux 2.6 有著相當大幅度的改變,以往許多一般性的工作,像是 PnP、sysfs 檔案系統與 user-space 之間的互動、以及多種標準匯流排上的裝置管理,現在都已被合理化與簡化。本書這次改版,主要是以 Linux 2.6.10 版核心為準,而這幾乎等於重新改寫了整本書。要享受本書帶來的饗宴,你不必先成為 Linux 核心的專家,只要你會 C 語言,而且對 UNIX 系統呼叫有些基本概念,就可藉由本書的引導,為你的硬體裝置寫出驅動程式。你將學到如何設計多種類型的驅動程式,包括字元裝置、區塊裝置、以及網路介面;本書提供了完整功能的範例,你不必準備特殊硬體就是編譯並測試範例程式,並將它們當成你的驅動程式的基本骨幹。此外,本書另闢專章探討 PCI、 USB 與 tty 子系統,同時也提供了關於作業系統觀念的知識,包括位址空間、I/O、非同步事件。內容重點:完整的字元、區塊、網路介面驅動程式 除錯技術 時序 SMP 系統的因應之道(共時性與各種鎖定機制) 記憶體管理與 DMA 中斷 Linux 裝置模型與 sysfs 熱插拔裝置 常見匯流排的特殊需求,包括 SCSI、PCI、USB、IEEE1394
序導讀第 1 章 裝置驅動程式概論1.1 驅動程式的角色1.2 核心概論1.3 裝置與模組的分類1.4 安全顧慮1.5 版本編號1.6 授權約定1.7 參與核心開發團隊1.8 本書架構第 2 章 模組2.1 設定你的測試系統2.2 Hello World 模組2.3 核心模組 vs 應用程式2.4 模組的編譯與裝載2.5 核心符號表2.6 前置宣告2.7 模組的生與死2.8 模組參數2.9 User-Space 驅動程式2.10 速查參考第 3 章 字元裝置驅動程式3.1 scull 的設計藍圖3.2 主編號與次編號3.3 重要的資料結構3.4 註冊字元裝置3.5 open 與 release3.6 Scull 的記憶體用法規劃3.7 read 與 write3.8 玩玩新玩意兒3.9 速查參考第 4 章 偵錯技術4.1 核心對於偵錯的支援4.2 訊息偵錯法4.3 查詢偵錯法 4.4 觀測偵錯法4.5 排除重大系統失誤4.6 偵錯工具第 5 章 共時情境與相競現象5.1 scull 裡的陷阱5.2 共時情境與其控管方法5.3 權狀(Semaphores)與獨佔權(Mutexes) 5.4 完工通知5.5 迴旋鎖5.6 鎖定機制的使用心法5.7 鎖定技術的替代方案5.8 速查參考第 6 章 字元驅動程式的進階作業6.1 ioctl6.2 Blocking I/O6.3 輪詢作業(poll 與 select)6.4 臨時通知(Asynchronous Notification)6.5 定位作業6.6 裝置檔的存取控制6.7 速查參考第 7 章 時序7.1 測量時隔7.2 攝取「目前時刻」 7.3 延遲執行7.4 核心計時器7.5 Tasklet7.6 工作佇列7.7 速查參考第 8 章 配置記憶體8.1 kmalloc 的來龍去脈8.2 前瞻快取(Lookaside Caches)8.3 get_free_page() 系列函式8.4 vmalloc() 與其相關函式8.5 個別 CPU 的從屬變數8.6 獲取大量記憶體 8.7 速查參考第 9 章 硬體操作9.1 「I/O 埠」與「I/O 記憶體」9.2 I/O 埠的用法9.3 I/O 埠的實例9.4 使用 I/O 記憶體9.5 速查參考第 10 章 中斷處置10.1 關於並列埠的準備工作10.2 安裝 ISR10.3 實作 ISR10.4 ISR 的上下半段10.5 中斷共享10.6 中斷驅動式 I/O10.7 速查參考第 11 章 核心裡的資料型別11.1 使用標準的 C 型別11.2 有明確長度的資料項11.3 介面專屬型別11.4 移植性的顧慮 11.5 鏈結串列11.6 速查參考第 12 章 PCI 驅動程式12.1 PCI 介面12.2 回顧:ISA12.3 PC 電腦上的其它匯流排12.4 SBus 12.5 NuBus12.6 外接式匯流排12.7 速查參考第 13 章 USB 驅動程式13.1 USB 裝置的基本概論13.2 USB 與 Sysfs13.3 USB Urb 13.4 設計 USB 裝置驅動程式13.5 不使用 URB 的 USB 傳輸13.6 速查參考第 14 章 Linux 裝置模型14.1 Kobject、Ksets 與子系統14.2 低階的 Sysfs 作業 14.3 熱插拔事件的產生14.4 匯流排、裝置、驅動程式14.5 類別14.6 全部湊在一起14.7 熱插拔(Hotplug)14.8 韌體的更新14.9 速查參考第 15 章 MMAP 與 DMA15.1 Linux 的記憶體管理15.2 mmap 作業方法15.3 直接 I/O15.4 直接記憶體存取(DMA)15.5 速查參考第 16 章 區塊驅動程式16.1 註冊 16.2 區塊裝置作業 16.3 傳輸要求的處理程序16.4 補充細節16.5 速查參考第 17 章 網路介面驅動程式17.1 snull 的設計理念17.2 與核心相連 17.3 詳解 net_device 結構17.4 開啟與關閉17.5 封包傳送17.6 封包接收17.7 中斷處置17.8 NAPI17.9 連線狀態的變化17.10 sk_buff 結構17.11 MAC 位址查解17.12 自訂的 ioctl 命令17.13 統計資訊17.14 群播17.15 補充題材17.16 速查參考第 18 章 TTY 驅動程式18.1 一個迷你 TTY 驅動程式 18.2 tty_driver 的作業方法18.3 TTY 線路參數18.4 ioctl 作業18.5 TTY 裝置的 proc 與 sysfs 節點18.6 tty_driver 結構的細節18.7 tty_operations 結構的細節18.8 tty_struct 結構的細節18.9 速查參考參考書目索引
Linux 網路原理 Linux 核心詳解 第三版 Linux 系統程式設計
購買紙本書