目 錄
第1章 內核基礎 1
1.1 Linux內核組成 1
1.2 Linux內核的引導 2
1.3 處理器 3
1.4 存儲器 4
第2章 進程管理 5
2.1 進程調度 5
2.2 Linux調度的實現 5
2.3 搶占和上下文切換 6
2.4 進程概念 6
2.5 進程上下文 7
2.6 進程與線程的創建 7
2.7 孤兒進程 8
2.8 系統調用 8
2.9 內核設計系統調用 9
第3章 中斷處理 11
3.1 中斷和中斷處理 11
3.2 中斷的下半部分 11
3.3 中斷下半部分的實現 12
第4章 定時計數 14
4.1 定時器基本概念 14
4.2 動態定時器的使用 15
第5章 并發同步 16
5.1 內核同步與死鎖問題 16
5.2 解決并發同步的方法 17
第6章 內存管理 19
6.1 內存管理中基本概念 19
6.2 申請內存的幾種方法 19
6.3 內核棧 20
6.4 進程地址空間的基本概念 21
6.5 創建和撤銷內存區域 22
6.6 頁表 22
6.7 頁高速緩存與頁回寫 23
第7章 Platform總線 25
7.1 Platform設備驅動概念 25
7.1.1 Platform總線 25
7.1.2 Platform設備 26
7.1.3 Platform驅動 29
7.2 平臺設備的資源 29
7.2.1 平臺數據和私有數據的區別 29
7.2.2 Platform設備資源的讀取 30
7.3 平臺設備驅動測試 30
7.3.1 Platform設備模塊代碼 31
7.3.2 Platform驅動模塊代碼 32
7.3.3 應用層測試代碼 37
第8章 單總線 39
8.1 單總線驅動概述 39
8.2 單總線驅動移植 39
8.3 單總線驅動內核代碼分析 40
8.3.1 master驅動分析 40
8.3.2 slave驅動分析 48
8.4 單總線驅動測試 52
8.5 脫離子系統的DS18B20驅動 53
第9章 I2C總線 58
9.1 系統理論 58
9.1.1 I2C驅動體系概述 58
9.1.2 驅動工程師需要做的事 58
9.2 內核代碼 58
9.2.1 內核/drivers/i2c目錄下文件分析 58
9.2.2 I2C核心 59
9.2.3 I2C總線驅動 59
9.2.4 I2C設備驅動 73
9.3 測試代碼 80
第10章 串口總線 83
10.1 系統理論 83
10.2 串口內核配置 83
10.3 UART層內核代碼 85
10.4 TTY層內核代碼 88
10.5 線路規程內核代碼 97
10.6 串口測試代碼 103
第11章 PCI總線 109
11.1 PCI總線理論 109
11.1.1 PCI總線的特點 109
11.1.2 PCI設備概述 109
11.1.3 查詢PCI總線和設備的命令 110
11.1.4 PCI總線架構 110
11.2 PCI驅動 111
11.2.1 PCI尋找空間 111
11.2.2 PCI總線支持的設備 112
11.2.3 PCI驅動其他API 112
11.3 PCI驅動模型 112
11.4 PCI設備的枚舉過程 114
第12章 SPI總線 132
12.1 SPI理論介紹 132
12.2 SPI驅動移植 132
12.3 SPI設備和驅動的注冊 135
12.3.1 SPI主控設備的注冊 135
12.3.2 SPI接口設備的添加 136
12.3.3 SPI主控設備驅動的注冊 137
12.3.4 SPI接口設備的注冊 137
12.3.5 SPI接口設備驅動的注冊 138
12.4 SPI內核代碼分析 139
12.5 SPI測試代碼 159
第13章 USB總線 162
13.1 USB總線理論 162
13.1.1 USB概述 162
13.1.2 USB主機控制器 162
13.1.3 USB設備與USB驅動的匹配 162
13.1.4 USB設備的邏輯結構和端點的傳輸方式 163
13.1.5 USB的URB請求塊 163
13.1.6 USB的枚舉過程 164
13.2 USB總線驅動分析 164
13.2.1 USB驅動框架usb-skeleton.c 164
13.2.2 USB鼠標驅動 usbmouse.c 174
13.2.3 USB鍵盤驅動usbkbd.c 178
13.2.4 U盤驅動分析 183
13.3 U盤驅動測試 197
第14章 Keyboard子系統 198
14.1 Keyboard子系統移植與分析 198
14.2 Keyboard驅動測試 200
第15章 LED子系統 201
15.1 LED子系統移植與分析 201
15.2 LED驅動測試 205
第16章 RTC子系統 206
16.1 RTC子系統的移植與分析 206
16.2 RTC驅動測試 210
第17章 Input子系統 211
17.1 Input子系統系統理論 211
17.1.1 Input子系統概述 211
17.1.2 Input子系統幾個重要數據結構 211
17.1.3 Input子系統核心層和事件處理層函數概述 214
17.2 內核代碼 214
17.2.1 輸入子系統設備驅動層 214
17.2.2 輸入子系統核心層 224
17.2.3 輸入子系統事件處理層 227
17.3 測試代碼 229
17.3.1 設備驅動層代碼 230
17.3.2 應用層測試代碼 232
17.3.3 測試過程和結果 233
第18章 Backlight背光子系統 234
18.1 Backlight背光子系統概述 234
18.2 PWM核心驅動 234
18.3 Backlight核心驅動 239
18.4 基于PWM&Backlight的蜂鳴器驅動 242
18.5 驅動測試 246
第19章 Hwmon子系統 247
19.1 Hwmon子系統概述 247
19.2 ADC核心驅動 247
19.3 Hwmon核心驅動 251
19.4 基于ADC&Hwmon的A/D驅動 252
19.5 驅動測試 258
第20章 看門狗驅動 259
20.1 看門狗驅動移植與分析 259
20.2 看門狗驅動測試 260
第21章 LCD驅動 261
21.1 LCD屏理論 261
21.1.1 LCD屏基本概念 261
21.1.2 幀緩沖的理解 261
21.2 Mini2440的X35型LCD移植 262
21.3 LCD文件層和驅動層設計思路 264
21.3.1 LCD驅動中幾個重要的數據結構 265
21.3.2 LCD驅動層 268
21.3.3 LCD文件層 279
21.4 LCD驅動測試 284
第22章 觸摸屏驅動 286
22.1 觸摸屏理論概述 286
22.2 觸摸屏驅動分析 286
22.3 觸摸屏驅動測試 294
第23章 Linux下的塊設備驅動 296
23.1 塊設備驅動概論 296
23.2 塊設備驅動中幾個重要的數據結構 296
23.3 使用I/O調度的塊設備驅動 298
23.4 塊設備驅動的測試 302
第24章 Linux下的網絡設備驅動 305
24.1 網絡設備驅動基礎 305
24.1.1 以太網基礎理論 305
24.1.2 Linux網絡驅動層次 305
24.2 網絡設備驅動移植 307
24.3 網絡設備驅動測試 308
參考文獻 309