第1篇 ARM微處理器講解篇
第1章 走進嵌入式系統世界 1
1.1 讓我們一起來認識嵌入式系統 1
1.1.1 嵌入式硬件系統的發(fā)展進程 2
1.1.2 嵌入式系統的發(fā)展趨勢 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 嵌入式軟件開發(fā)簡介 10
1.4 嵌入式目標平臺的介紹 11
1.4.1 嵌入式硬件平臺簡介 11
1.4.2 如何構建嵌入式系統開發(fā)平臺 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 程序狀態(tài)寄存器訪問指令 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集成開發(fā)環(huán)境的應用基礎 91
5.1 ADS1.2集成開發(fā)環(huán)境簡介 91
5.1.1 ADS軟件中的ARM運行時庫 92
5.1.2 CodeWarrior集成開發(fā)環(huán)境介紹 93
5.1.3 ADS集成開發(fā)軟件的調試器介紹 94
5.1.4 ADS集成開發(fā)環(huán)境中的實用工具 94
5.2 ADS軟件的命令行下的開發(fā)方式 95
5.2.1 ADS軟件中的命令行工具介紹 95
5.2.2 編譯器與鏈接器的使用 97
5.3 ADS軟件的圖形界面下的開發(fā)方式 100
5.3.1 如何創(chuàng)建ADS工程 100
5.3.2 工程源代碼的編寫實現 104
5.3.3 對工程進行編譯和鏈接操作 106
5.4 使用AXD調試工具進行代碼調試 110
5.4.1 AXD軟件加載可執(zhí)行文件 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平臺的實驗開發(fā) 113
6.1 匯編之LED燈實驗 113
6.2 Hello World之串口實驗 115
6.2.1 S3C2410的UART介紹 115
6.2.2 UART的數據發(fā)送操作 115
6.2.3 UART的數據接收操作 115
6.2.4 UART的波特率發(fā)生器 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 嵌入式操作系統的發(fā)展階段 150
7.1.2 嵌入式操作系統的優(yōu)勢 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系統中構建交叉開發(fā)環(huán)境 204
9.1 交叉開發(fā)環(huán)境簡介 204
9.1.1 交叉開發(fā)環(huán)境模型 204
9.1.2 上位機與下位機的連接方式 205
9.2 交叉開發(fā)環(huán)境的搭建 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開發(fā)C程序 232
9.5 本章小結 234
第10章 Linux系統的裸機程序開發(fā) 235
10.1 Linux系統的裸機程序開發(fā)簡介 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工具的編譯細節(jié)分析 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 如何執(zhí)行Makefile文件 250
10.4 Linux系統的裸機程序開發(fā)示例 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 內核態(tài)下的打印函數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 在開發(fā)機上利用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的區(qū)別 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區(qū)域 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編程規(guī)則簡介 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腳本程序的執(zhí)行方式 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腳本程序中的循環(huán)結構 486
16.5.1 for循環(huán)語句的使用 486
16.5.2 while循環(huán)語句的使用 487
16.5.3 until循環(huán)語句的使用 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系統的設備驅動開發(fā)基礎 492
17.1 Linux系統的驅動程序概述 492
17.1.1 驅動程序的調用關系 492
17.1.2 驅動程序的分類及作用 493
17.1.3 硬件設備的識別與驅動代碼的開發(fā)流程 494
17.1.4 硬件設備的控制方式 495
17.2 Linux系統的硬件設備驅動開發(fā)流程及示例 495
17.2.1 構建一個簡單的驅動代碼模塊 495
17.2.2 虛擬字符設備驅動的測試 498
17.2.3 LED驅動開發(fā) 504
17.3 Linux系統的硬件設備驅動開發(fā)相關技術 510
17.3.1 并發(fā)控制原理 510
17.3.2 并發(fā)控制的相關函數 510
17.3.3 并發(fā)控制示例 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 按鍵設備的驅動開發(fā) 542
18.2 虛擬塊設備的驅動開發(fā) 550
18.3 網口設備的驅動開發(fā) 560
18.4 LCD設備的驅動開發(fā) 565
18.5 SD卡設備的驅動開發(fā) 568
18.6 USB設備的驅動開發(fā) 570
18.7 本章小結 572