《OS X與iOS核心編程》是2013年6月人民郵電出版社出版的一本圖書,作者是澳 Ole Henry Halvorsen / 澳 Douglas Clarke。
基本介紹
- 書名:OS X與iOS核心編程
- 作者:澳 Ole Henry Halvorsen Douglas Clarke
- 原版名稱:OS X and iOS kernel programming
- 譯者:賈 偉
- ISBN:9787115318244
- 頁數:400
- 定價:89.00
- 出版社:人民郵電出版社
- 出版時間:2013-6
- 裝幀:平裝
內容介紹,作者介紹,作品目錄,
內容介紹
與傳統的用戶應用程式開發不同,核心環境更加複雜多變,任何問題都會嚴重影響系統的穩定性、安全性和性能,所以一定要確保核心代碼中沒有任何錯誤。本書介紹了非常實用的核心開發方法,是XNU核心開發者必備的“九陰真經”。
本書兩位作者都活躍在計算機軟硬體以及驅動程式開發一線,具有豐富的實戰經驗。Ole Henry Halvorsen是最早一批為USB 3.0和Thunderbolt創建視頻硬體設備的開發人員。Douglas Clarke具有15年以上的麥金塔計算機專業軟硬體開發經驗。本書匯集了兩位作者多年的實戰經驗與智慧感悟,展現了一幅XNU核心編程與設備驅動程式開發的斑斕畫卷。相信在作者循循善誘、通俗易懂的講解下,讀者定能為書中的精彩內容深深吸引,漸入化境,在不知不覺中煉就核心開發的絕世武功。
如果你對iOS和Mac OS X作業系統感興趣,關注核心開發,或者你本身就是驅動程式開發人員,那么如此精彩的一本好書絕對不容錯過。
作者介紹
Ole Henry Halvorsen
目前在一家生產專業視頻設備的公司擔任高級軟體工程師,負責面向Mac、Linux和PC的高端高清視頻硬體驅動程式和軟體開發。他是最早一批為USB 3.0和Thunderbolt創建視頻硬體設備的開發者,曾是美國SGI公司的研發工程師,致力於研究NAS和SAN存儲技術,以及為超級計算和高性能計算提供解決方案。Halvorsen擁有澳大利亞莫納什大學網路計算學士學位以及信息技術碩士學位。
Douglas Clarke
有15年以上的麥金塔計算機專業開發經驗。他職業生涯的大部分時間都致力於硬體和設備驅動程式開發,曾為Mac OS 9、Mac OS X和Windows編寫驅動程式。早在Mac OS X第1版面市一年以前,他就開始接觸I/O Kit,從那以後一直在使用它。目前Clarke正在為實時視頻套用開發驅動程式,他擁有澳大利亞莫納什大學計算機科學學士學位。
作品目錄
目 錄
第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
第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