目 錄
第1章 操作係統原理 1
1.1 操作係統的作用 3
1.2 進程管理 3
1.3 進程地址空間 4
1.4 操作係統服務 5
1.5 虛擬內存 6
1.6 調度 8
1.7 硬件和驅動程序 9
1.8 小結 11
第2章 Mac OS X和iOS 12
2.1 XNU內核 17
2.1.1 內核擴展(KEXT) 18
2.1.2 Mach 18
2.1.3 BSD層 27
2.1.4 I/O Kit 29
2.2 小結 31
第3章 Xcode和內核開發環境 32
3.1 語言的選擇:C++ 32
3.2 Xcode 33
3.3 “Hello World”內核擴展 34
3.4 加載和卸載內核擴展 37
3.5 使用控製颱查看輸齣 39
3.6 小結 40
第4章 I/O Kit框架 41
4.1 I/O Kit 模型 41
4.2 對象關係 43
4.3 Info.plist文件 43
4.3.1 驅動程序類 46
4.3.2 IORegistryExplorer 50
4.4 內核庫:libkern 52
4.4.1 OSObject 52
4.4.2 容器類 54
4.5 小結 56
第5章 應用程序與驅動程序的交互 57
5.1 I/O Kit框架 58
5.2 查找驅動程序 58
5.3 觀察設備移除 63
5.4 修改設備驅動程序屬性 65
5.5 基於狀態的交互 68
5.6 驅動程序的通知 79
5.7 小結 83
第6章 內存管理 84
6.1 內存類型 84
6.1.1 CPU物理地址 85
6.1.2 總綫物理地址 85
6.1.3 用戶和內核虛擬地址 85
6.1.4 內存順序:大端序和小端序 86
6.1.5 32位和64位內存尋址 87
6.2 內存分配 88
6.2.1 底層分配機製 89
6.2.2 Mach內存域分配器 89
6.2.3 kalloc傢族 89
6.2.4 BSD中的內存分配 90
6.2.5 I/O Kit內存分配 91
6.2.6 使用C++的new操作符分配內存 92
6.3 內存描述符 92
6.3.1 IOBufferMemoryDescriptor 94
6.3.2 其他的內存描述符 95
6.4 映射內存 95
6.4.1 用戶空間任務到內核空間的內存映射 95
6.4.2 IOMemoryMap類 97
6.4.3 內核到用戶空間任務的內存映射 98
6.4.4 將內存映射到指定的用戶空間任務 99
6.4.5 物理地址映射 100
6.5 小結 101
第7章 同步和綫程 102
7.1 同步原語 102
7.2 原子操作 104
7.3 鎖 107
7.3.1 自鏇鎖 107
7.3.2 互斥 109
7.3.3 條件變量 110
7.3.4 讀/寫互斥 112
7.4 同步異步事件:工作環 113
7.4.1 IOCommandGate 115
7.4.2 定時器 116
7.4.3 釋放工作環 117
7.5 內核綫程 118
7.6 小結 119
第8章 USB 120
8.1 USB體係結構 120
8.1.1 USB傳輸速度 122
8.1.2 主機控製器 123
8.1.3 USB協議 124
8.1.4 端點 126
8.1.5 USB描述符 126
8.1.6 USB設備類 127
8.2 I/O Kit USB支持 128
8.2.1 USB設備和驅動程序處理 129
8.2.2 加載USB驅動程序 130
8.2.3 USB Prober 132
8.2.4 驅動程序示例:USB大容量存儲器設備驅動程序 133
8.2.5 驅動程序啓動 138
8.2.6 處理設備移除 138
8.2.7 枚舉接口 139
8.2.8 枚舉端點 140
8.2.9 執行設備請求 141
8.2.10 執行批量端點和中斷端點的I/O 144
8.3 小結 147
第9章 PCI Express和Thunderbolt 148
9.1 I/O Kit中的PCI 150
9.1.1 匹配和加載驅動程序 151
9.1.2 驅動程序示例:一個簡單的PCI驅動程序 154
9.1.3 訪問配置空間寄存器 156
9.1.4 PCI I/O內存區 158
9.1.5 處理設備移除 161
9.2 中斷 162
9.2.1 I/O Kit中斷機製 163
9.2.2 注冊接收中斷 164
9.2.3 啓用MSI 166
9.2.4 處理主中斷 166
9.2.5 處理二級中斷 168
9.3 直接內存訪問 168
9.3.1 將物理地址轉換為總綫地址 170
9.3.2 為DMA準備內存 171
9.3.3 建立分散/聚集列錶 172
9.3.4 IODMACommand類 173
9.4 小結 175
第10章 電源管理 177
10.1 響應電源狀態改變 179
10.2 請求電源狀態改變 184
10.3 處理設備空閑 185
10.4 觀察設備電源狀態改變 186
10.5 匯總 187
10.6 小結 191
第11章 串行端口驅動程序 192
11.1 Mac OS X串行端口體係結構概覽 192
11.2 串行端口驅動程序 194
11.3 實現IOSerialDriverSync類 197
11.4 串行端口狀態 200
11.5 串行端口事件 204
11.6 串行數據傳輸 207
11.7 從用戶空間訪問串行端口 211
11.8 小結 214
第12章 音頻驅動程序 215
12.1 數字音頻和音頻設備簡介 215
12.2 Core Audio 217
12.3 I/O Kit音頻支持 218
12.4 實現一個音頻驅動程序 219
12.4.1 驅動程序和硬件初始化 221
12.4.2 注冊音頻控製 223
12.4.3 實現音頻引擎 225
12.4.4 I/O引擎初始化 226
12.4.5 其他的音頻引擎功能 235
12.5 小結 236
第13章 網絡 238
13.1 網絡內核擴展 242
13.1.1 內核控製KPI 242
13.1.2 套接字過濾器 242
13.1.3 因特網協議過濾器 250
13.1.4 接口過濾器 255
13.2 調試和測試網絡擴展 258
13.3 I/O Kit中的網絡 259
13.3.1 構建簡單以太網控製器驅動程序 261
13.3.2 MyEthernetDriver設計 262
13.3.3 驅動程序初始化和啓動 264
13.3.4 介質和狀態選擇 266
13.3.5 配置設備硬件地址 268
13.3.6 啓用和禁用設備 268
13.3.7 傳輸網絡分組 270
13.3.8 接收分組 271
13.3.9 對MyEthernetDriver進行測試 274
13.4 小結 276
第14章 存儲係統 277
14.1 傳輸層驅動程序 278
14.2 IOBlockStorageDevice接口 279
14.3 構建RAM磁盤設備 282
14.4 分區規則 292
14.4.1 實現一個示例分區規則 293
14.4.2 媒介內容綫索屬性 300
14.5 媒介過濾器驅動程序 300
14.5.1 加密過濾器規則示例 302
14.5.2 創建一個自定義GUID分區錶 306
14.6 小結 308
第15章 用戶空間USB驅動程序 310
15.1 背景 310
15.2 IOUSBLib框架 311
15.3 處理異步操作 315
15.4 IOUSBDeviceInterface類 316
15.5 IOUSBInterfaceInterface類 320
15.5.1 屬性方法 321
15.5.2 端點數據傳輸方法 322
15.5.3 低延遲同步傳輸 328
15.6 小結 330
第16章 調試 331
16.1 常見的問題類型 331
16.2 內核恐慌 332
16.3 調試機製 333
16.3.1 啓動時修復崩潰 335
16.3.2 采用IOLog()追蹤 335
16.3.3 輸齣棧跟蹤 336
16.3.4 通過FireWire遠程跟蹤 337
16.3.5 遠程內核核心轉儲 339
16.3.6 KDB 340
16.3.7 通過以太網或FireWire使用GDB遠程調試 340
16.3.8 實時調試運行的內核 344
16.3.9 使用虛擬機調試 344
16.3.10 在內核中使用GDB調試 344
16.3.11 使用Activity Monitor診斷掛起進程 354
16.3.12 查找內存和資源泄漏 355
16.4 小結 356
第17章 高級內核編程 357
17.1 內核中的SSE和浮點 357
17.2 多功能驅動程序 358
17.3 編寫I/O Kit族 358
17.4 內核控製KPI 359
17.4.1 內核控製注冊 361
17.4.2 客戶端連接 362
17.4.3 獲取和設置選項 363
17.4.4 從用戶空間訪問內核控製 364
17.5 內核中的進程處理 365
17.6 加載資源 366
17.7 KEXT資源之外的內容 367
17.8 內核驅動程序通知 368
17.9 小結 371
第18章 部署 372
18.1 安裝和加載內核擴展 372
18.2 加載首選項和設置 374
18.3 內核擴展的版本管理 375
18.4 測試和品質保證 375
18.5 打包KEXT和軟件 376
18.5.1 構建Hello World內核擴展安裝包 378
18.5.2 將內容添加至安裝包 378
18.5.3 配置安裝包 379
18.5.4 構建安裝包 382
18.5.5 卸載安裝包 383
18.6 小結 383
索引 385
· · · · · · (
收起)