內容簡介
本書由淺入深、全面、系統地介紹了ARM技術與嵌入式Linux的系統設計與開發。全書共18章,講解了ARM微處理器的片上資源、ARM的指令集、Windows的最常用的嵌入式集成開發環境ADS、上位機嵌入式系統的構建、Boot-Loader的介紹和使用、對Linux核心的移植海櫻仔、嵌入式檔案系統移植、Linux的多任務程式開發、設備的驅動開發等內容。書中的每章都提供了大量有針對性的實例,對每個知識點也給出了較詳細的解釋。
目錄信息
第1篇 ARM微處理器講解篇
第1章 走進嵌入式系統世界 1
1.1 讓我們一起來認識嵌入式系統 1
1.1.1 嵌入式硬體系統的發展進程 2
1.1.2 嵌入式系統的發展趨勢 3
1.1.3 嵌入式系統的主要特徵 4
1.2 嵌入式處理葛采體器的簡單概述 6
1.2.1 嵌入式微處理器簡介 6
1.2.2 嵌入式微控制器簡介 7
1.2.3 數位訊號處理器(DSP)簡介 7
1.2.4 嵌入式片上系統(SoC)簡介 8
1.3 嵌入式軟體系統的簡單概述 9
1.3.1 嵌入式軟體系統簡介 9
1.3.2 嵌入式軟體開發簡介 10
1.4 嵌入式目標平台的介紹 11
1.4.1 嵌入式硬體平台簡介 11
1.4.2 如何構建嵌入式系統開發平台 12
1.4.3 如何向嵌入式硬體平台上燒寫映像 14
1.5 本章小結 17
第2章 ARM體系微處理器的基礎介紹 18
2.1 ARM體系微處理器簡介 18
2.2 ARM體系微處理器的類型 18
2.3 實際項目中對ARM微處理器的選擇 21
2.3.1 ARM微處理騙榆器套用方案的成熟度考慮 21
2.3.2 ARM核心的選擇 21
2.3.3 ARM微處理器的性能考慮 22
2.3.4 ARM微處理器的片內嫌贈背資源考慮 22
2.4 ARM微處理器的工作體系 22
2.4.1 工囑犁永作模式介紹 23
2.4.2 暫存器體系 23
2.4.3 指令體系 24
2.5 ARM微處理器的基礎架構介紹 24
2.5.1 計算機體系結構的介紹 25
2.5.2 ARM微處理器的技術特徵 26
2.6 本章小結 29
第3章 S3C2410的內部結構及外圍電路 30
3.1 S3C2410整體資源簡介 30
3.1.1 性能介紹 30
3.1.2 資源模組介紹 31
3.1.3 內部結構 31
3.1.4 五大體系結構 34
3.1.5 存儲系統 34
3.2 S3C2410內部資源功能介紹 38
3.2.1 時鐘與電源管理 38
3.2.2 中斷控制器 41
3.2.3 LCD控制器 42
3.2.4 Nand Flash控制器 43
3.2.5 UART控制器 44
3.2.6 DMA控制器 44
3.2.7 TIMER控制器 44
3.2.8 I/O接口 45
3.2.9 RTC控制器 46
3.2.10 觸摸控制器 46
3.2.11 IIC控制器 47
3.2.12 IIS控制器 47
3.2.13 看門狗定時器 47
3.2.14 USB控制器 47
3.2.15 SPI接口 48
3.2.16 SD接口 48
3.2.17 ADC控制器 49
3.3 S3C2410微處理器的外圍電路設計 49
3.3.1 時鐘電路 50
3.3.2 復位電路 50
3.3.3 啟動電路 51
3.3.4 電源電雄蜜民犁路 51
3.3.5 Flash電路 52
3.3.6 SDRAM電路 54
3.3.7 UART電路 57
3.3.8 IrDA電路 58
3.3.9 USB電路 58
3.3.10 乙太網電路 59
3.3.11 音頻電路 61
3.3.12 SD/MMC電路 62
3.3.13 LCD電路 62
3.4 本章小結 63
第4章 ARM微處理器的定址方式及指令集介紹 64
4.1 ARM指令集概述祖束享舟及定址方式 64
4.1.1 指令結構簡介 64
4.1.2 指令分類 65
4.1.3 指令格式與條件域 66
4.1.4 定址方式 67
4.2 ARM微處理器的指令集介紹 73
4.2.1 跳轉指令 73
4.2.2 數據處理指令 74
4.2.3 乘法指令與乘加指令 79
4.2.4 程式狀態暫存器訪問指令 81
4.2.5 載入/存儲指令 82
4.2.6 批量數據載入/存儲指令 84
4.2.7 數據交換指令 85
4.2.8 移位指令 86
4.2.9 協處理器指令 87
4.2.10 異常產生指令 89
4.3 本章小結 90
第5章 ADS集成開發環境的套用基礎 91
5.1 ADS1.2集成開發環境簡介 91
5.1.1 ADS軟體中的ARM運行時庫 92
5.1.2 CodeWarrior集成開發環境介紹 93
5.1.3 ADS集成開發軟體的調試器介紹 94
5.1.4 ADS集成開發環境中的實用工具 94
5.2 ADS軟體的命令行下的開發方式 95
5.2.1 ADS軟體中的命令行工具介紹 95
5.2.2 編譯器與連結器的使用 97
5.3 ADS軟體的圖形界面下的開發方式 100
5.3.1 如何創建ADS工程 100
5.3.2 工程原始碼的編寫實現 104
5.3.3 對工程進行編譯和連結操作 106
5.4 使用AXD調試工具進行代碼調試 110
5.4.1 AXD軟體載入執行檔 110
5.4.2 AXD軟體中運行映像檔案 110
5.4.3 代碼調試時添加斷點 110
5.4.4 代碼調試時的存儲器操作 111
5.4.5 代碼調試時的暫存器操作 111
5.4.6 代碼調試時的變數操作 112
5.5 本章小結 112
第6章 基於ADS平台的實驗開發 113
6.1 彙編之LED燈實驗 113
6.2 Hello World之串口實驗 115
6.2.1 S3C2410的UART介紹 115
6.2.2 UART的數據傳送操作 115
6.2.3 UART的數據接收操作 115
6.2.4 UART的波特率發生器 116
6.2.5 UART與PC通信編程實現 116
6.3 外部中斷編程操作 118
6.3.1 中斷回響過程和返回過程 118
6.3.2 外部中斷編程實現 118
6.4 看門狗測試代碼的編寫 120
6.4.1 看門狗的工作原理 120
6.4.2 S3C2410微處理器的看門狗 121
6.4.3 S3C2410微處理器的看門狗編程實現 121
6.5 利用定時器產生PWM編程實驗 123
6.6 S3C2410微處理器的啟動代碼實驗 124
6.7 S3C2410微處理器的RTC編程實驗 134
6.7.1 RTC的簡單介紹 134
6.7.2 RTC的相關功能 134
6.7.3 RTC編程實現 135
6.8 S3C2410微處理器的IIC匯流排實驗 136
6.8.1 IIC匯流排實現原理 137
6.8.2 IIC匯流排編程實現 137
6.9 Nor Flash驅動編程實現 140
6.9.1 SST39VF160的操作原理 141
6.9.2 SST39VF160編程實現 143
6.10 Nand Flash驅動編程實現 145
6.10.1 K9F1208U0M的指令 145
6.10.2 K9F1208U0M的工作原理 145
6.10.3 Nand Flash編程實現 146
6.11 本章小結 149
第2篇 嵌入式Linux系統講解篇
第7章 嵌入式作業系統的整體介紹 150
7.1 嵌入式作業系統簡介 150
7.1.1 嵌入式作業系統的發展階段 150
7.1.2 嵌入式作業系統的優勢 151
7.1.3 嵌入式作業系統的分類 151
7.2 常見的嵌入式作業系統 152
7.2.1 VxWorks嵌入式作業系統 152
7.2.2 pSOS嵌入式作業系統 153
7.2.3 Palm OS嵌入式作業系統 153
7.2.4 QNX嵌入式作業系統 154
7.2.5 Windows CE嵌入式作業系統 154
7.2.6 uC/OS-II嵌入式作業系統 155
7.2.7 Linux嵌入式作業系統 155
7.3 嵌入式作業系統的結構 157
7.4 嵌入式作業系統的功能 158
7.4.1 進程管理功能 158
7.4.2 記憶體管理功能 160
7.4.3 檔案管理功能 162
7.4.4 設備管理功能 163
7.5 本章小結 164
第8章 走進Linux作業系統 165
8.1 Ubuntu作業系統的安裝 165
8.1.1 Ubuntu系統的簡介 165
8.1.2 虛擬機嚮導的配置 165
8.1.3 Ubuntu系統的安裝 169
8.2 Ubuntu作業系統的相關操作命令 172
8.2.1 Ubuntu系統的root用戶 172
8.2.2 Ubuntu系統的常用命令 173
8.3 本章小結 203
第9章 Linux系統中構建交叉開發環境 204
9.1 交叉開發環境簡介 204
9.1.1 交叉開發環境模型 204
9.1.2 上位機與下位機的連線方式 205
9.2 交叉開發環境的搭建 207
9.2.1 Linux系統的網路配置 207
9.2.2 關於apt-get工具軟體的介紹 209
9.2.3 Minicom的安裝與配置 209
9.2.4 FTP服務的安裝、配置與啟動 213
9.2.5 SSH服務的安裝、配置與啟動 213
9.2.6 NFS服務的安裝、配置與啟動 214
9.2.7 交叉工具鏈的安裝與配置 215
9.3 Windows系統的實用軟體介紹 220
9.3.1 遠程登錄Linux系統工具SecureCRT 220
9.3.2 Windows與Linux之間的檔案傳輸軟體CuteFTP 222
9.3.3 Windows系統的代碼閱讀/編輯工具SI 223
9.3.4 Windows系統的TFTP伺服器軟體TFTP32 226
9.3.5 Windows系統的DNW軟體 226
9.4 Linux系統的實用軟體介紹 228
9.4.1 VI編輯器 228
9.4.2 gedit編輯器 230
9.4.3 Eclipse軟體的安裝 230
9.4.4 Eclipse CDT開發C程式 232
9.5 本章小結 234
第10章 Linux系統的裸機程式開發 235
10.1 Linux系統的裸機程式開發簡介 235
10.1.1 代碼的編譯方式 235
10.1.2 make工程管理器簡介 235
10.2 Linux系統的編譯器 236
10.2.1 gcc與arm-linux-gcc簡介 236
10.2.2 gcc工具的實例操作 237
10.2.3 gcc工具的編譯細節分析 240
10.2.4 arm-linux-gcc及相關工具的套用 241
10.3 Makefile工程檔案的套用 246
10.3.1 Makefile檔案的簡單介紹 246
10.3.2 如何編寫Makefile檔案 247
10.3.3 如何執行Makefile檔案 250
10.4 Linux系統的裸機程式開發示例 251
10.5 本章小結 257
第11章 Bootloader的移植 258
11.1 Bootloader的簡單介紹 258
11.1.1 Bootloader的認識 258
11.1.2 Bootloader的通信方式 259
11.1.3 Bootloader的結構介紹 259
11.1.4 常見的Bootloader 267
11.2 Vivi進行Linux引導 267
11.2.1 Vivi的結構介紹 268
11.2.2 Vivi的工作流程 269
11.2.3 Vivi的移植操作 280
11.2.4 Vivi的常用操作命令 284
11.3 U-Boot原始碼分析與移植操作 286
11.3.1 U-Boot的特性介紹 286
11.3.2 U-Boot的原始碼結構分析 287
11.3.3 U-Boot的啟動過程 288
11.3.4 U-Boot的移植 295
11.3.5 U-Boot的編譯操作 308
11.3.6 U-Boot的命令操作 312
11.4 本章小結 315
第12章 Linux核心的裁剪與移植 316
12.1 Linux核心的版本號與核心結構 316
12.1.1 Linux核心的版本號 316
12.1.2 Linux核心結構 317
12.2 Linux2.6核心的特點 318
12.3 Linux2.6核心的原始碼結構 318
12.3.1 Linux原始碼的準備工作 319
12.3.2 Linux原始碼結構的分析 319
12.3.3 Linux原始碼中的Makefile檔案 320
12.4 Linux2.6核心的移植 328
12.4.1 Linux核心的啟動過程 329
12.4.2 Linux核心啟動代碼的分析 330
12.4.3 Linux核心原始碼的修改 342
12.4.4 Linux核心的配置 346
12.4.5 Linux核心的編譯、燒寫與啟動 357
12.5 YAFFS檔案系統的移植 358
12.6 本章小結 361
第13章 Linux核心調試技術的實現 362
13.1 核心態下的列印函式printk() 362
13.1.1 printk()函式的簡介及使用方法 362
13.1.2 printk()函式的原始碼分析 364
13.1.3 控制台的相關原始碼分析 367
13.1.4 命令行參數 368
13.2 利用printk()列印信息調試核心 369
13.3 利用Linux的/proc檔案系統調試核心 371
13.4 利用Oops訊息調試核心 375
13.4.1 Oops訊息的內容 375
13.4.2 棧回溯信息的直觀顯示 376
13.4.3 對Linux核心進行調試 377
13.4.4 Oops訊息中的棧信息分析 380
13.5 利用KGDB遠程調試核心 382
13.5.1 KGDB的介紹 382
13.5.2 向核心中增加KGDB調試器 384
13.5.3 在開發機上利用DDD與GDB調試核心 388
13.6 本章小結 391
第14章 Linux系統的檔案系統 392
14.1 Nand/Nor Flash存儲設備 392
14.1.1 Nand Flash存儲設備 392
14.1.2 Nor Flash存儲設備 394
14.1.3 Nand Flash和Nor Flash的區別 394
14.1.4 MTD技術簡介 395
14.2 Linux系統的檔案系統概述及分類 395
14.2.1 檔案系統概述 396
14.2.2 檔案系統分類 396
14.3 Linux系統的根檔案系統 406
14.3.1 根檔案系統的目錄結構概述 406
14.3.2 檔案屬性分析 411
14.4 Busybox的移植操作 413
14.4.1 Busybox的簡單概述 413
14.4.2 核心和Busybox的init進程 413
14.4.3 Busybox的配置 417
14.4.4 Busybox的編譯與安裝 422
14.5 構建Linux系統的根檔案系統 422
14.5.1 glibc庫檔案的安裝 423
14.5.2 完善根檔案系統的構建 423
14.5.3 根檔案系統其他目錄的構建 426
14.5.4 YAFFS檔案系統的製作 426
14.5.5 JFFS2檔案系統的製作 430
14.6 本章小結 431
第15章 Linux系統的系統管理 432
15.1 存儲系統管理 432
15.1.1 進程的虛擬記憶體空間 432
15.1.2 虛擬記憶體空間的映射與地址轉換實現 434
15.1.3 虛擬記憶體空間的管理方式與Zone區域 435
15.1.4 分配/回收記憶體頁面與slab分配器 438
15.1.5 申請/釋放虛擬記憶體 438
15.2 中斷與系統調用 439
15.2.1 中斷與系統調用概述 440
15.2.2 tasklet機制的介紹 441
15.2.3 系統調用機制的實現 447
15.2.4 fork()系統調用介紹 449
15.3 檔案系統管理 451
15.3.1 檔案與目錄簡單概述 452
15.3.2 虛擬檔案系統 453
15.3.3 VFS的4個主要數據結構 454
15.4 設備管理 463
15.4.1 設備與設備的管理功能 463
15.4.2 I/O設備管理 464
15.5 本章小結 470
第16章 Linux系統的Shell編程實現 471
16.1 Linux系統的Shell編程規則簡介 471
16.2 Linux系統的Shell編程實現 472
16.2.1 Shell程式中的變數賦值和引用 472
16.2.2 Shell程式中的鍵盤輸入實現 474
16.2.3 使用VI編輯器編寫Shell腳本 476
16.2.4 如何修改腳本檔案的訪問許可權 477
16.2.5 Shell腳本程式的執行方式 477
16.3 Shell腳本程式中的參數及函式 478
16.3.1 位置參數 478
16.3.2 內部參數 479
16.3.3 特殊符號 480
16.3.4 幫助命令 481
16.4 Shell腳本程式中的表達式 482
16.4.1 字元串操作符 483
16.4.2 數字的比較 484
16.4.3 邏輯操作符 484
16.4.4 檔案操作符 485
16.5 Shell腳本程式中的循環結構 486
16.5.1 for循環語句的使用 486
16.5.2 while循環語句的使用 487
16.5.3 until循環語句的使用 488
16.6 Shell腳本程式中的條件結構 488
16.6.1 if條件語句的使用 488
16.6.2 case條件語句的使用 489
16.7 Shell程式中函式與腳本的調用 490
16.7.1 函式的編寫與調用 490
16.7.2 腳本的調用 491
16.8 本章小結 491
第3篇 Linux系統的實驗篇
第17章 Linux系統的設備驅動開發基礎 492
17.1 Linux系統的驅動程式概述 492
17.1.1 驅動程式的調用關係 492
17.1.2 驅動程式的分類及作用 493
17.1.3 硬體設備的識別與驅動代碼的開發流程 494
17.1.4 硬體設備的控制方式 495
17.2 Linux系統的硬體設備驅動開發流程及示例 495
17.2.1 構建一個簡單的驅動代碼模組 495
17.2.2 虛擬字元設備驅動的測試 498
17.2.3 LED驅動開發 504
17.3 Linux系統的硬體設備驅動開發相關技術 510
17.3.1 並發控制原理 510
17.3.2 並發控制的相關函式 510
17.3.3 並發控制示例 513
17.3.4 設備驅動程式中的阻塞與非阻塞 516
17.3.5 設備驅動程式中的poll函式套用 520
17.3.6 設備驅動程式中的中斷處理套用 522
17.3.7 設備驅動代碼中關於記憶體與I/O操作的套用 524
17.4 Linux系統的塊設備的驅動程式編寫 529
17.4.1 塊設備的I/O操作 529
17.4.2 與塊設備相關的結構體及函式 530
17.4.3 塊設備驅動代碼編寫的相關技術 535
17.5 本章小結 541
第18章 Linux系統的硬體設備驅動編寫實驗 542
18.1 按鍵設備的驅動開發 542
18.2 虛擬塊設備的驅動開發 550
18.3 網口設備的驅動開發 560
18.4 LCD設備的驅動開發 565
18.5 SD卡設備的驅動開發 568
18.6 USB設備的驅動開發 570
18.7 本章小結 572
5.2.1 ADS軟體中的命令行工具介紹 95
5.2.2 編譯器與連結器的使用 97
5.3 ADS軟體的圖形界面下的開發方式 100
5.3.1 如何創建ADS工程 100
5.3.2 工程原始碼的編寫實現 104
5.3.3 對工程進行編譯和連結操作 106
5.4 使用AXD調試工具進行代碼調試 110
5.4.1 AXD軟體載入執行檔 110
5.4.2 AXD軟體中運行映像檔案 110
5.4.3 代碼調試時添加斷點 110
5.4.4 代碼調試時的存儲器操作 111
5.4.5 代碼調試時的暫存器操作 111
5.4.6 代碼調試時的變數操作 112
5.5 本章小結 112
第6章 基於ADS平台的實驗開發 113
6.1 彙編之LED燈實驗 113
6.2 Hello World之串口實驗 115
6.2.1 S3C2410的UART介紹 115
6.2.2 UART的數據傳送操作 115
6.2.3 UART的數據接收操作 115
6.2.4 UART的波特率發生器 116
6.2.5 UART與PC通信編程實現 116
6.3 外部中斷編程操作 118
6.3.1 中斷回響過程和返回過程 118
6.3.2 外部中斷編程實現 118
6.4 看門狗測試代碼的編寫 120
6.4.1 看門狗的工作原理 120
6.4.2 S3C2410微處理器的看門狗 121
6.4.3 S3C2410微處理器的看門狗編程實現 121
6.5 利用定時器產生PWM編程實驗 123
6.6 S3C2410微處理器的啟動代碼實驗 124
6.7 S3C2410微處理器的RTC編程實驗 134
6.7.1 RTC的簡單介紹 134
6.7.2 RTC的相關功能 134
6.7.3 RTC編程實現 135
6.8 S3C2410微處理器的IIC匯流排實驗 136
6.8.1 IIC匯流排實現原理 137
6.8.2 IIC匯流排編程實現 137
6.9 Nor Flash驅動編程實現 140
6.9.1 SST39VF160的操作原理 141
6.9.2 SST39VF160編程實現 143
6.10 Nand Flash驅動編程實現 145
6.10.1 K9F1208U0M的指令 145
6.10.2 K9F1208U0M的工作原理 145
6.10.3 Nand Flash編程實現 146
6.11 本章小結 149
第2篇 嵌入式Linux系統講解篇
第7章 嵌入式作業系統的整體介紹 150
7.1 嵌入式作業系統簡介 150
7.1.1 嵌入式作業系統的發展階段 150
7.1.2 嵌入式作業系統的優勢 151
7.1.3 嵌入式作業系統的分類 151
7.2 常見的嵌入式作業系統 152
7.2.1 VxWorks嵌入式作業系統 152
7.2.2 pSOS嵌入式作業系統 153
7.2.3 Palm OS嵌入式作業系統 153
7.2.4 QNX嵌入式作業系統 154
7.2.5 Windows CE嵌入式作業系統 154
7.2.6 uC/OS-II嵌入式作業系統 155
7.2.7 Linux嵌入式作業系統 155
7.3 嵌入式作業系統的結構 157
7.4 嵌入式作業系統的功能 158
7.4.1 進程管理功能 158
7.4.2 記憶體管理功能 160
7.4.3 檔案管理功能 162
7.4.4 設備管理功能 163
7.5 本章小結 164
第8章 走進Linux作業系統 165
8.1 Ubuntu作業系統的安裝 165
8.1.1 Ubuntu系統的簡介 165
8.1.2 虛擬機嚮導的配置 165
8.1.3 Ubuntu系統的安裝 169
8.2 Ubuntu作業系統的相關操作命令 172
8.2.1 Ubuntu系統的root用戶 172
8.2.2 Ubuntu系統的常用命令 173
8.3 本章小結 203
第9章 Linux系統中構建交叉開發環境 204
9.1 交叉開發環境簡介 204
9.1.1 交叉開發環境模型 204
9.1.2 上位機與下位機的連線方式 205
9.2 交叉開發環境的搭建 207
9.2.1 Linux系統的網路配置 207
9.2.2 關於apt-get工具軟體的介紹 209
9.2.3 Minicom的安裝與配置 209
9.2.4 FTP服務的安裝、配置與啟動 213
9.2.5 SSH服務的安裝、配置與啟動 213
9.2.6 NFS服務的安裝、配置與啟動 214
9.2.7 交叉工具鏈的安裝與配置 215
9.3 Windows系統的實用軟體介紹 220
9.3.1 遠程登錄Linux系統工具SecureCRT 220
9.3.2 Windows與Linux之間的檔案傳輸軟體CuteFTP 222
9.3.3 Windows系統的代碼閱讀/編輯工具SI 223
9.3.4 Windows系統的TFTP伺服器軟體TFTP32 226
9.3.5 Windows系統的DNW軟體 226
9.4 Linux系統的實用軟體介紹 228
9.4.1 VI編輯器 228
9.4.2 gedit編輯器 230
9.4.3 Eclipse軟體的安裝 230
9.4.4 Eclipse CDT開發C程式 232
9.5 本章小結 234
第10章 Linux系統的裸機程式開發 235
10.1 Linux系統的裸機程式開發簡介 235
10.1.1 代碼的編譯方式 235
10.1.2 make工程管理器簡介 235
10.2 Linux系統的編譯器 236
10.2.1 gcc與arm-linux-gcc簡介 236
10.2.2 gcc工具的實例操作 237
10.2.3 gcc工具的編譯細節分析 240
10.2.4 arm-linux-gcc及相關工具的套用 241
10.3 Makefile工程檔案的套用 246
10.3.1 Makefile檔案的簡單介紹 246
10.3.2 如何編寫Makefile檔案 247
10.3.3 如何執行Makefile檔案 250
10.4 Linux系統的裸機程式開發示例 251
10.5 本章小結 257
第11章 Bootloader的移植 258
11.1 Bootloader的簡單介紹 258
11.1.1 Bootloader的認識 258
11.1.2 Bootloader的通信方式 259
11.1.3 Bootloader的結構介紹 259
11.1.4 常見的Bootloader 267
11.2 Vivi進行Linux引導 267
11.2.1 Vivi的結構介紹 268
11.2.2 Vivi的工作流程 269
11.2.3 Vivi的移植操作 280
11.2.4 Vivi的常用操作命令 284
11.3 U-Boot原始碼分析與移植操作 286
11.3.1 U-Boot的特性介紹 286
11.3.2 U-Boot的原始碼結構分析 287
11.3.3 U-Boot的啟動過程 288
11.3.4 U-Boot的移植 295
11.3.5 U-Boot的編譯操作 308
11.3.6 U-Boot的命令操作 312
11.4 本章小結 315
第12章 Linux核心的裁剪與移植 316
12.1 Linux核心的版本號與核心結構 316
12.1.1 Linux核心的版本號 316
12.1.2 Linux核心結構 317
12.2 Linux2.6核心的特點 318
12.3 Linux2.6核心的原始碼結構 318
12.3.1 Linux原始碼的準備工作 319
12.3.2 Linux原始碼結構的分析 319
12.3.3 Linux原始碼中的Makefile檔案 320
12.4 Linux2.6核心的移植 328
12.4.1 Linux核心的啟動過程 329
12.4.2 Linux核心啟動代碼的分析 330
12.4.3 Linux核心原始碼的修改 342
12.4.4 Linux核心的配置 346
12.4.5 Linux核心的編譯、燒寫與啟動 357
12.5 YAFFS檔案系統的移植 358
12.6 本章小結 361
第13章 Linux核心調試技術的實現 362
13.1 核心態下的列印函式printk() 362
13.1.1 printk()函式的簡介及使用方法 362
13.1.2 printk()函式的原始碼分析 364
13.1.3 控制台的相關原始碼分析 367
13.1.4 命令行參數 368
13.2 利用printk()列印信息調試核心 369
13.3 利用Linux的/proc檔案系統調試核心 371
13.4 利用Oops訊息調試核心 375
13.4.1 Oops訊息的內容 375
13.4.2 棧回溯信息的直觀顯示 376
13.4.3 對Linux核心進行調試 377
13.4.4 Oops訊息中的棧信息分析 380
13.5 利用KGDB遠程調試核心 382
13.5.1 KGDB的介紹 382
13.5.2 向核心中增加KGDB調試器 384
13.5.3 在開發機上利用DDD與GDB調試核心 388
13.6 本章小結 391
第14章 Linux系統的檔案系統 392
14.1 Nand/Nor Flash存儲設備 392
14.1.1 Nand Flash存儲設備 392
14.1.2 Nor Flash存儲設備 394
14.1.3 Nand Flash和Nor Flash的區別 394
14.1.4 MTD技術簡介 395
14.2 Linux系統的檔案系統概述及分類 395
14.2.1 檔案系統概述 396
14.2.2 檔案系統分類 396
14.3 Linux系統的根檔案系統 406
14.3.1 根檔案系統的目錄結構概述 406
14.3.2 檔案屬性分析 411
14.4 Busybox的移植操作 413
14.4.1 Busybox的簡單概述 413
14.4.2 核心和Busybox的init進程 413
14.4.3 Busybox的配置 417
14.4.4 Busybox的編譯與安裝 422
14.5 構建Linux系統的根檔案系統 422
14.5.1 glibc庫檔案的安裝 423
14.5.2 完善根檔案系統的構建 423
14.5.3 根檔案系統其他目錄的構建 426
14.5.4 YAFFS檔案系統的製作 426
14.5.5 JFFS2檔案系統的製作 430
14.6 本章小結 431
第15章 Linux系統的系統管理 432
15.1 存儲系統管理 432
15.1.1 進程的虛擬記憶體空間 432
15.1.2 虛擬記憶體空間的映射與地址轉換實現 434
15.1.3 虛擬記憶體空間的管理方式與Zone區域 435
15.1.4 分配/回收記憶體頁面與slab分配器 438
15.1.5 申請/釋放虛擬記憶體 438
15.2 中斷與系統調用 439
15.2.1 中斷與系統調用概述 440
15.2.2 tasklet機制的介紹 441
15.2.3 系統調用機制的實現 447
15.2.4 fork()系統調用介紹 449
15.3 檔案系統管理 451
15.3.1 檔案與目錄簡單概述 452
15.3.2 虛擬檔案系統 453
15.3.3 VFS的4個主要數據結構 454
15.4 設備管理 463
15.4.1 設備與設備的管理功能 463
15.4.2 I/O設備管理 464
15.5 本章小結 470
第16章 Linux系統的Shell編程實現 471
16.1 Linux系統的Shell編程規則簡介 471
16.2 Linux系統的Shell編程實現 472
16.2.1 Shell程式中的變數賦值和引用 472
16.2.2 Shell程式中的鍵盤輸入實現 474
16.2.3 使用VI編輯器編寫Shell腳本 476
16.2.4 如何修改腳本檔案的訪問許可權 477
16.2.5 Shell腳本程式的執行方式 477
16.3 Shell腳本程式中的參數及函式 478
16.3.1 位置參數 478
16.3.2 內部參數 479
16.3.3 特殊符號 480
16.3.4 幫助命令 481
16.4 Shell腳本程式中的表達式 482
16.4.1 字元串操作符 483
16.4.2 數字的比較 484
16.4.3 邏輯操作符 484
16.4.4 檔案操作符 485
16.5 Shell腳本程式中的循環結構 486
16.5.1 for循環語句的使用 486
16.5.2 while循環語句的使用 487
16.5.3 until循環語句的使用 488
16.6 Shell腳本程式中的條件結構 488
16.6.1 if條件語句的使用 488
16.6.2 case條件語句的使用 489
16.7 Shell程式中函式與腳本的調用 490
16.7.1 函式的編寫與調用 490
16.7.2 腳本的調用 491
16.8 本章小結 491
第3篇 Linux系統的實驗篇
第17章 Linux系統的設備驅動開發基礎 492
17.1 Linux系統的驅動程式概述 492
17.1.1 驅動程式的調用關係 492
17.1.2 驅動程式的分類及作用 493
17.1.3 硬體設備的識別與驅動代碼的開發流程 494
17.1.4 硬體設備的控制方式 495
17.2 Linux系統的硬體設備驅動開發流程及示例 495
17.2.1 構建一個簡單的驅動代碼模組 495
17.2.2 虛擬字元設備驅動的測試 498
17.2.3 LED驅動開發 504
17.3 Linux系統的硬體設備驅動開發相關技術 510
17.3.1 並發控制原理 510
17.3.2 並發控制的相關函式 510
17.3.3 並發控制示例 513
17.3.4 設備驅動程式中的阻塞與非阻塞 516
17.3.5 設備驅動程式中的poll函式套用 520
17.3.6 設備驅動程式中的中斷處理套用 522
17.3.7 設備驅動代碼中關於記憶體與I/O操作的套用 524
17.4 Linux系統的塊設備的驅動程式編寫 529
17.4.1 塊設備的I/O操作 529
17.4.2 與塊設備相關的結構體及函式 530
17.4.3 塊設備驅動代碼編寫的相關技術 535
17.5 本章小結 541
第18章 Linux系統的硬體設備驅動編寫實驗 542
18.1 按鍵設備的驅動開發 542
18.2 虛擬塊設備的驅動開發 550
18.3 網口設備的驅動開發 560
18.4 LCD設備的驅動開發 565
18.5 SD卡設備的驅動開發 568
18.6 USB設備的驅動開發 570
18.7 本章小結 572