內容簡介
《零基礎學ARM9嵌入式Linux系統開發》以ARM9微處理器為硬體平台,詳細講解了ARM9晶片的硬體結構及軟體體系。結合所選的ARM9晶片S3C2410X,闡述了嵌入式系統開發的各個主要環節。詳盡講解了晶片內部的各種資源及相關的外圍電路設計與編程方法。在此基礎上介紹了嵌入式系統軟硬體設計、調試方法,詳細介紹了嵌入式系統下驅動程式的開發方法和Linux核心移植的基本知識。詳述了S3C2410X開發平台Bootloader、ADS集成開發環境和圖形用戶界面編輯環境Qt。
《零基礎學ARM9嵌入式Linux系統開發》以“立足基本理論、系統全面、由淺入深、實例引導、貼近實用”為宗旨,基於嵌入式系統開發的基本流程,詳細講解基本指令的使用方法及相關技巧,內容翔實、實踐性強。另外,《零基礎學ARM9嵌入式Linux系統開發》配套光碟給出了書中的實例檔案、開發過程的操作錄像檔案、常用元器件及晶片等豐富的拓展資源,極大地方便了讀者自學,動手實踐。
《零基礎學ARM9嵌入式Linux系統開發》可作為機電控制、信息家電、工業控制、手持儀器、醫療器械、機器人技術等方面嵌入式系統開發與套用的參考書,也可以作為高等院校有關嵌入式系統教學的本科生或研究生教材。
目錄
前言
第一篇 入門篇1
第1章 嵌入式系統1
1.1 嵌入式系統簡介1
1.1.1 嵌入式系統的特點1
1.1.2 嵌入式系統的套用領域2
1.1.3 嵌入式系統的發展趨勢3
1.2 嵌入式系統的組成5
1.2.1 嵌入式平台的硬體結構5
1.2.2 板級支持包和嵌入式系統6
1.2.3 嵌入式系統上的應用程式6
1.3 嵌入式系統中的處理器6
1.3.1 微處理器7
1.3.2 微控制器7
1.3.3 數位訊號處理器7
1.3.4 嵌入式片上系統8
1.4 嵌入式系統的一般設計流程和方法8
1.4.1 嵌入式系統的一般設計流程8
1.4.2 嵌入式系統的一般設計方法9
1.5 實踐拓展10
1.6 習題11
第2章 ARM微處理器結構12
2.1 ARM公司簡介12
2.2 ARM微處理器系列12
2.3 ARM體系結構的版本及命名方法15
2.3.1 ARM體系結構的版本16
2.3.2 ARM體系結構的變種18
2.3.3 ARM/Thumb體系結構的命名格式19
2.4 ARM微處理器模式20
2.5 ARM暫存器介紹21
2.5.1 通用暫存器22
2.5.2 程式狀態暫存器23
2.6 ARM體系的異常中斷24
2.6.1 ARM中異常中斷的種類25
2.6.2 ARM處理器對異常中斷的回響過程25
2.6.3 從異常中斷處理程式中返回26
2.7 ARM體系中的存儲系統26
2.7.1 ARM體系中的存儲空間26
2.7.2 ARM體系結構的存儲器格式26
2.7.3 非對齊的存儲訪問操作27
2.7.4 ARM指令預取和自修改代碼27
2.8 實踐拓展28
2.9 習題29
第3章 ARM微處理器指令系統30
3.1 ARM指令系統簡介30
3.1.1 ARM指令的分類30
3.1.2 ARM指令的一般編碼格式30
3.1.3 ARM指令的條件碼域31
3.2 ARM指令定址方式32
3.2.1 數據處理指令的運算元的定址方式32
3.2.2 字及無符號位元組的Load/Store指令的定址方式36
3.2.3 雜類Load/Store指令的定址方式39
3.2.4 批量Load/Store指令的定址方式41
3.2.5 協處理器Load/Store指令的定址方式42
3.3 ARM指令集詳解43
3.3.1 跳轉指令44
3.3.2 數據處理指令45
3.3.3 乘法指令與乘加指令49
3.3.4 程式狀態暫存器訪問指令51
3.3.5 載入/存儲指令52
3.3.6 批量數據載入/存儲指令53
3.3.7 數據交換指令54
3.3.8 移位指令55
3.3.9 協處理器指令56
3.3.10 異常產生指令57
3.4 ARM程式設計示例58
3.5 實踐拓展61
3.6 習題63
第二篇 基礎篇64
第4章 構建嵌入式開發環境64
4.1 交叉開發環境簡介64
4.1.1 交叉開發環境模型65
4.1.2 Linux的常用版本65
4.2 宿主機與目標板的連線方式66
4.2.1 串列通信接口66
4.2.2 乙太網接口67
4.2.3 USB接口68
4.2.4 JTAG接口68
4.3 建立主機開發環境69
4.3.1 Fedora的安裝69
4.3.2 Minicom的安裝配置82
4.3.3 TFTP服務的安裝配置85
4.3.4 NFS的安裝配置86
4.3.5 建立交叉工具鏈87
4.4 實踐拓展89
4.5 習題90
第5章 S3C2410X硬體結構及功能91
5.1 S3C2410X簡介91
5.1.1 S3C2410X處理器91
5.1.2 S3C2410X引腳描述92
5.1.3 S3C2410X核心結構95
5.2 S3C2410X的存儲器映射96
5.2.1 存儲器的控制暫存器96
5.2.2 Nand Flash及其控制器99
5.3 DMA控制器103
5.3.1 DMA工作原理103
5.3.2 DMA控制器的相關暫存器…105
5.4 時鐘和電源管理109
5.4.1 時鐘110
5.4.2 電源管理112
5.4.3 專用暫存器114
5.4.4 S3C2410X時鐘及電源管理套用117
5.5 中斷118
5.5.1 中斷控制器專用暫存器119
5.5.2 中斷實例122
5.6 輸入/輸出連線埠124
5.6.1 連線埠暫存器及其引腳配置…124
5.6.2 外中斷實例133
5.7 定時器135
5.7.1 結構與工作原理135
5.7.2 定時器專用暫存器138
5.7.3 定時器的使用139
5.7.4 定時器套用實例140
5.8 實踐拓展141
5.9 習題144
第6章 S3C2410X的外部接口145
6.1 UART接口145
6.1.1 串列口結構和工作原理145
6.1.2 UART專用暫存器149
6.1.3 UART套用實例152
6.2 IIC匯流排接口153
6.2.1 IIC匯流排接口的工作模式…154
6.2.2 IIC匯流排接口的特殊功能暫存器158
6.2.3 IIC套用實例160
6.3 SPI接口162
6.3.1 SPI結構與工作原理163
6.3.2 SPI專用暫存器164
6.3.3 SPI套用方法166
6.3.4 SPI套用實例167
6.4 A/D轉換與觸控螢幕接口169
6.4.1 A/D轉換器結構與工作原理170
6.4.2 A/D轉換和觸控螢幕專用暫存器172
6.5 實踐拓展174
6.6 習題176
第7章 嵌入式作業系統177
7.1 常見的嵌入式作業系統177
7.2 嵌入式Linux的基本結構和工作原理179
7.2.1 嵌入式Linux的基本結構…179
7.2.2 嵌入式Linux的工作原理…182
7.3 實踐拓展183
7.4 習題185
第三篇 提高篇186
第8章 S3C2410X平台Bootloader186
8.1 Bootloader的操作模式186
8.2 Bootloader的啟動流程187
8.3 Bootloader之vivi188
8.3.1 vivi的配置與編譯189
8.3.2 vivi第一階段的代碼190
8.3.3 vivi第二階段的代碼201
8.4 Bootloader之U-Boot217
8.4.1 U-Boot的主要目錄結構218
8.4.2 U-Boot支持的主要功能218
8.4.3 U-Boot的原理分析219
8.4.4 U-Boot在S3C2410上的移植231
8.5 自行開發Bootloader239
8.6 實踐拓展239
8.7 習題241
第9章 移植嵌入式作業系統242
9.1 Linux核心242
9.1.1 Linux核心的組成結構243
9.1.2 Linux源碼結構244
9.2 移植Linux核心245
9.2.1 給核心打補丁245
9.2.2 配置核心247
9.2.3 編譯核心257
9.3 移植根檔案系統257
9.3.1 安裝Busybox258
9.3.2 配置Busybox259
9.3.3 向Busybox添加新命令…260
9.3.4 編譯和安裝Busybox262
9.3.5 構造根檔案系統262
9.3.6 創建根檔案系統映像檔案264
9.4 下載核心264
9.4.1 使用U-Boot製作、下載核心264
9.4.2 啟動Linux核心266
9.5 使用U-Boot載入根檔案系統映像266
9.6 實踐拓展267
9.7 習題268
第10章 嵌入式系統的設備管理及驅動269
10.1 Linux設備管理和驅動269
10.1.1 Linux設備的分類269
10.1.2 設備驅動程式的作用269
10.1.3 訪問設備的實現270
10.1.4 Linux設備控制方式270
10.2 Linux設備驅動開發流程272
10.2.1 構造和運行模組272
10.2.2 字元設備驅動編寫273
10.2.3 字元設備驅動實例276
10.2.4 並發控制278
10.2.5 阻塞與非阻塞 284
10.2.6 select和poll288
10.2.7 中斷處理290
10.2.8 記憶體與I/O操作292
10.3 塊設備驅動編寫296
10.3.1 塊設備的I/O操作特點…296
10.3.2 block_device_operations結構體296
10.3.3 gendisk結構體297
10.3.4 request結構體299
10.3.5 request操作函式302
10.3.6 bio結構體304
10.3.7 註冊與註銷305
10.3.8 載入與卸載306
10.3.9 打開與釋放308
10.3.10 ioctl函式308
10.3.11 I/O請求處理309
10.4 設備驅動實例——RAMDISK驅動312
10.5 實踐拓展317
10.6 習題319
第11章 嵌入式Linux C語言開發工具320
11.1 編輯器VIM320
11.1.1 VIM的編輯模式320
11.1.2 VIM的進入與退出322
11.1.3 游標的移動322
11.1.4 刪除、撤銷和重複323
11.1.5 複製和貼上324
11.1.6 查找和替換324
11.1.7 幫助系統和網路資源324
11.2 編譯器GCC326
11.2.1 GCC的編譯流程326
11.2.2 GCC的常用編譯選項328
11.2.3 套用實例331
11.3 調試器GDB333
11.3.1 GDB的使用流程335
11.3.2 GdbServer遠程調試338
11.4 工程管理Make339
11.4.1 Makefile檔案介紹340
11.4.2 Makefile的規則341
11.4.3 Makefile的變數343
11.4.4 Make命令的使用345
11.4.5 使用自動工具生成Makefile346
11.5 集成開發環境Eclipse347
11.5.1 下載和安裝Eclipse348
11.5.2 Eclipse的界面348
11.6 實踐拓展350
11.7 習題351
第12章 嵌入式C語言開發流程352
12.1 命令行模式下的開發流程352
12.1.1 編寫代碼352
12.1.2 編譯程式354
12.1.3 運行程式355
12.1.4 交叉編譯355
12.1.5 編寫Makefile 356
12.2 基於Eclipse的開發流程358
12.2.1 新建工程358
12.2.2 編寫代碼359
12.2.3 編譯工程359
12.2.4 運行程式361
12.3 實踐拓展362
12.4 習題363
第四篇 精通篇364
第13章 ADS集成開發環境364
13.1 命令行開發工具364
13.1.1 armcc編譯器365
13.1.2 armlink的使用方法366
13.1.3 ARM運行時庫367
13.1.4 CodeWarrior集成開發環境368
13.1.5 ADS調試器369
13.1.6 實用工具和軟體370
13.2 使用ADS創建工程371
13.2.1 建立一個工程371
13.2.2 編譯和連結工程374
13.2.3 命令行模式下編譯工程…379
13.3 使用AXD調試代碼381
13.3.1 打開調試檔案381
13.3.2 查看存儲器內容382
13.3.3 設定斷點383
13.3.4 查看變數值383
13.4 實踐拓展385
13.5 習題386
第14章 圖形用戶界面編輯環境Qt387
14.1 嵌入式系統中的GUI387
14.1.1 MicroWindows387
14.1.2 MiniGUI388
14.1.3 Qt/Embedded388
14.2 MiniGUI編程388
14.2.1 MiniGUI移植390
14.2.2 MiniGUI實例392
14.3 初識Qt/Embedded394
14.3.1 Qt/Embedded的系統要求395
14.3.2 Qt的架構395
14.3.3 視窗系統396
14.4 Qt/Embedded嵌入式圖形開發397
14.4.1 建立Qt/Embedded開發環境397
14.4.2 認識Qt/Embedded開發環境399
14.4.3 窗體401
14.4.4 對話框407
14.4.5 外形與感覺411
14.4.6 國際化412
14.5 Qt/Embedded實戰演練413
14.5.1 安裝Qt/Embedded工具開發包414
14.5.2 交叉編譯Qt/Embedded庫414
14.5.3 “Hello,World”程式415
14.5.4 發布Qt/Embedded程式到目標板421
14.5.5 添加一個Qt/Embedded套用到QPE 423
14.6 實踐拓展 424
14.7 習題 425
第15章 S3C2410X完整開發系統的設計426
15.1 最小系統426
15.2 實驗板硬體資源規劃426
15.3 實驗板硬體電路設計427
15.3.1 電源電路427
15.3.2 復位電路428
15.3.3 調試及下載接口電路429
15.3.4 時鐘電路429
15.3.5 微處理器電路430
15.3.6 外部存儲器電路433
15.3.7 串列接口電路437
15.3.8 網路接口電路437
15.3.9 USB接口電路439
15.3.10 液晶接口電路440
15.3.11 其他電路441
15.4 PCB的設計方法442
15.5 電路的調試方法444
15.6 軟體的移植與開發445
15.6.1 準備交叉編譯工具445
15.6.2 vivi的移植447
15.6.3 核心的移植452
15.6.4 根檔案系統的移植455
15.6.5 驅動程式的編寫457
15.7 實踐拓展460
15.8 習題461
參考文獻462