圖書信息
書名:OpenSolaris設備驅動原理與開發作者:Sun中國工程研究院研發工程師
定價:23.00
頁數:269
出版日期:2010年03月17日
圖書分類:計算機 > 作業系統 > 綜合
語種:簡體中文
開本:16
責任編輯:李東震
包含CD:1CD
內容簡介
全書共分10章,內容包括:概述、Solaris的設備管理、Solaris設備驅動程式、Solaris核心多執行緒與同步、Solaris核心記憶體、PCI、Solaris中斷、DMA、電源管理、FMA(Solaris故障管理)。
圖書前言
Solaris,作為UNIX作業系統的重要衍生版本之一,隨著2005年其原始碼的開放 (OpenSolaris),不僅用於傳統的伺服器/工作站上,也逐漸地套用在普通的PC或筆記本上。作為Sun公司(現在是Oracle)的重要軟體產品,其具有良好的架構和許多創新的特性,因此越來越多的人和企業開始使用、學習和研究Solaris。
Sun Microsystems中國工程研究院(ERI)Solaris設備驅動研發部是在2003年成立的。自成立之初,就經常會有一些針對新員工的技術培訓,使新的技術人員能夠快速理解Solaris的特性、框架和各種設備驅動的開發技術等。雖然平時工作任務繁多,但大家仍堅持利用業餘時間來從事本書的寫作。本書寫作過程中,工程師以嚴謹的工作作風和認真的求實態度,力求專業和準確。
在講解過程中,本書注重對內部原理進行深入淺出的解釋,同時對其設計結構與具體實現加以必要剖析,一些重要接口附以相關的示範用例,而且針對一些開發中的重要問題,會選取一些典型套用對其根源、解決思路等進行深入闡述。力求使讀者對Solaris設備驅動的實現原理、整體架構和開發實踐有全面的理解,做到不僅知其然,還要知其所以然。
非常感謝張強組織了本書的編寫,馮翌坤、張強、劉澎、游湘濤、王秀燕負責了具體章節的寫作。第1章由馮翌坤編寫,簡要描述了Solaris的運行環境、模組結構和調試工具。第2章由張強編寫,具體地闡述了Solaris核心是如何組織和管理各種設備,包括設備檔案系統、設備結點及相關配置工具等。第3章由馮翌坤編寫,以一個偽設備的驅動程式為例,講解了 Solaris設備驅動的大致結構、各個功能入口以及驅動開發中的重要知識點。第4章由劉澎編寫,描述了Solaris核心的多執行緒模型和調度方案,以及開發中常用鎖的原理和使用技巧。第5章由游湘濤編寫,講述了在設備驅動開發中用到的關於核心記憶體的接口、內部原理和使用技巧。第6章由劉澎編寫,介紹了PCI匯流排、設備枚舉和PCI的空間訪問。第7章由王秀燕編寫,重點描述了Solaris的中斷機制,以及在x86和SPARC平台上的實現,同時還介紹了常用到的一些中斷的DDI/DKI,並附有代碼示例。第8章由劉澎編寫,闡述了Solaris上DMA的模型和相關機制(綁定、同步以及記憶體分配),對於想了解系統和設備之間是如何進行DMA數據傳輸的讀者是很有幫助的。第9章由馮翌坤編寫,介紹了電源管理在系統和設備兩個方面的設計與實現。第10章由游湘濤編寫,介紹了Solaris上故障管理(FMA)。包括其原理、架構、實現,以及在設備驅動開發中如何支持FMA。本書的一些章節會涉及Solaris核心的一些知識,但重點仍是放在與設備驅動相關的方面。如需要更多地了解Solaris核心,可參閱《Solaris Internals》等書籍。
本書在寫作過程中得到了很多ERI同事的幫助。Paul Lee、王睿、葉誠、楊勇、徐華卓和各位編者仔細地閱讀了各個章節,並提出了寶貴的意見。同時感謝機械工業出版社華章公司的溫莉芳女士、陳冀康和李東震編輯的支持。
雖然本書的寫作小組付出了很多的努力,但隨著技術的飛速發展,加之我們的水平有限,書中難免會有一些疏漏和不足,希望能得到廣大讀者的意見和建議。
Sun中國工程研究院院長 宋向軍
2010年2月3日
圖書目錄
前言
第1章 概述 1
1.1 Solaris 1
1.2 OpenSolaris 2
1.3 調試工具 14
第2章 Solaris的設備管理 25
2.1 設備的檔案操作 25
2.2 設備檔案系統(devfs) 25
2.2.1 dv_node 26
2.2.2 通過設備檔案系統來配置設備驅動 27
2.3 設備信息結點(dev_info) 29
2.3.1 設備信息結點的屬性 31
2.3.2 設備信息結點的生命周期 32
2.4 設備標識 34
2.4.1 devid 34
2.4.2 設備的物理路徑 35
2.4.3 設備號(主設備結點,次設備結點) 36
2.5 設備樹及其屬性 37
2.5.1 Open Firmware簡介 37
2.5.2 設備屬性 38
2.5.3 匯流排屬性 43
2.6 設備樹的管理 43
2.6.1 devfsadm 43
2.6.2 Syseventd 46
2.6.3 驅動配置工具 47
2.7 動態重新配置 47
第3章 Solaris設備驅動程式 50
3.1 設備驅動程式模組 50
3.2 設備驅動程式中的設備管理 52
3.2.1 softstate 52
3.2.2 設備的功能提供 54
3.3 設備驅動程式中的操作 56
3.3.1 設備結點 56
3.3.2 設備的配置 58
3.3.3 設備操作 60
3.4 設備驅動程式中的硬體操作 61
3.4.1 attach() 61
3.4.2 timeout() 65
第4章 Solaris核心多執行緒與同步 66
4.1 多執行緒 66
4.1.1 多執行緒模型 66
4.1.2 執行緒調度 72
4.1.3 任務佇列 77
4.1.4 cyclic子系統 81
4.1.5 callout和timeout 84
4.2 同步機制 87
4.2.1 鎖的硬體原理 87
4.2.2 互斥鎖 92
4.2.3 條件變數 96
4.2.4 鎖的使用 97
第5章 Solaris核心記憶體 99
5.1 核心記憶體概述 99
5.1.1 Solaris核心記憶體虛擬地址空間布局 99
5.1.2 核心堆 103
5.1.3 核心記憶體分配和管理 103
5.2 slab分配程式 104
5.2.1 概述 104
5.2.2 slab分配程式接口 106
5.2.3 slab分配程式的分層實現 108
5.2.4 slab分配程式快取統計信息 113
5.3 vmem分配器 115
5.3.1 vmem接口 115
5.3.2 vmem的實現 117
5.4 核心記憶體的跟蹤和調試 119
5.4.1 檢查已釋放緩衝區:0xdeadbeef 120
5.4.2 使用Redzone進行調試:0xfeedface 120
5.4.3 檢測未初始化數據:0xbaddcafe 122
5.4.4 記憶體分配日誌 123
5.4.5 使用高級技巧分析記憶體 125
5.4.6 使用::kmem_verify找到被破壞的緩衝區 126
5.4.7 使用分配程式日誌功能 127
第6章 PCI 130
6.1 PCI概述 130
6.1.1 I/O匯流排的發展 130
6.1.2 PCI簡介 131
6.2 x86平台PCI設備配置過程 132
6.2.1 PCI資源管理 132
6.2.2 設備枚舉 134
6.2.3 設備再編程 139
6.3 PCI空間訪問 141
6.3.1 位元組序 141
6.3.2 設備訪問的數據一致性 146
6.3.3 設備訪問機制 147
第7章 Solaris中斷 152
7.1 Solaris上的中斷簡介 152
7.2 MSI和MSI-X 153
7.2.1 MSI 154
7.2.2 MSI-X 155
7.2.3 MSI和MSI-X的異同 157
7.2.4 MSI訊息地址和訊息數據 157
7.3 x86上的中斷機制及Solaris中x86中斷的實現 159
7.3.1 x86體系結構中的中斷和異常處理機制 159
7.3.2 x86系統中的中斷控制器 159
7.3.3 Solaris對x86系統中斷的支持 162
7.4 SPARC系統上的中斷機制及
Solaris中SPARC中斷的實現 167
7.4.1 SPARC處理器在硬體實現上對中斷
的支持 167
7.4.2 SPARC系統上的中斷控制器 169
7.4.3 Solaris對SPARC系統中斷的支持 170
7.5 Solaris上軟中斷的實現 175
7.5.1 x86系統中軟中斷的實現 175
7.5.2 SPARC系統中軟中斷的實現 178
7.6 Solaris中和中斷相關的DDI/DKI 181
第8章 DMA 186
8.1 DMA概述 186
8.1.1 SG表和DMA控制器 186
8.1.2 DVMA和IOMMU 187
8.1.3 DMA的數據一致性 190
8.2 Solaris的DMA模型 194
8.2.1 DMA的屬性 194
8.2.2 DMA模型概述 195
8.2.3 DMA對象 197
8.3 DMA綁定過程 199
8.4 DMA的同步 202
8.5 DMA記憶體分配機制 203
8.5.1 ddi_dma_mem_alloc()接口定義 203
8.5.2 x86平台DMA記憶體分配 203
第9章 電源管理 207
9.1 關於電源管理 207
9.2 電源管理的設計與實現 208
9.3 系統的電源管理 210
9.4 設備的電源管理 215
9.4.1 成員 215
9.4.2 屬性 216
9.4.3 設備的電源管理過程 216
第10章 FMA(Solaris故障管理) 221
10.1 FMA原理和架構 221
10.1.1 Solaris FMA模型 221
10.1.2 故障邊界 223
10.1.3 錯誤處理、故障診斷和回響 224
10.1.4 資源命名和事件協定 224
10.2 Solaris故障管理的實現 233
10.2.1 故障管理器FMD概述 233
10.2.2 系統拓撲 236
10.2.3 eversholt故障診斷語言 238
10.3 設備驅動程式中的FMA支持 238
10.3.1 FMA資源初始化 239
10.3.2 IO設備內部錯誤 241
10.3.3 IO訪問和DMA錯誤 246
附錄1 設備驅動(testdrv)的Makefile 252
附錄2 dummy驅動程式 255
附錄3 和中斷相關的函式使用舉例 258
參考文獻 261