內容簡介
本書以Linux嵌入式系統的基本開發技術為主線,以基於ARM架構的嵌入式處理器為嵌入式硬體平台,全面介紹嵌入式系統開發過程、ARM體系結構、Linux基礎、Linux進程、Linux開發環境的建立、Linux作業系統移植、Bootloader的使用、Linux根檔案系統的構建、設備驅動程式的開發、嵌入式GUI開發等嵌入式知識,最後介紹近年來較為熱門的GPS導航系統的設計。
本書在第一版的基礎上進行改版,結合眾多讀者的返饋意見,最佳化了內容結構和程式代碼,實例操作配有視頻講解。
圖書目錄
第一篇 嵌入式系統開發基礎
第1章 嵌入式系統介紹 (1)
1.1 嵌入式系統的概念 (1)
1.1.1 嵌入式系統的定義 (1)
1.1.2 嵌入式系統的特點 (2)
1.2 嵌入式系統的組成 (2)
1.2.1 嵌入式處理器 (3)
1.2.2 外圍設備 (3)
1.2.3 嵌入式作業系統 (3)
1.2.4 套用軟體 (3)
1.3 嵌入式處理器 (4)
1.3.1 嵌入式處理器的分類 (4)
1.3.2 嵌入式微處理器 (5)
1.3.3 嵌入式微控制器 (5)
1.3.4 嵌入式DSP處理器 (6)
1.3.5 嵌入式片上系統 (6)
1.3.6 選擇嵌入式處理器 (7)
1.4 嵌入式作業系統 (7)
1.4.1 作業系統的概念和分類 (8)
1.4.2 實時作業系統 (8)
1.4.3 常用的嵌入式作業系統 (10)
1.5 新型的嵌入式作業系統 (13)
1.5.1 Android (13)
1.5.2 MontaVista (15)
1.6 嵌入式系統的套用 (15)
1.7 嵌入式系統的發展趨勢 (18)
1.7.1 嵌入式系統面臨的挑戰 (18)
1.7.2 嵌入式系統的發展前景 (19)
1.8 本章小結 (20)
第2章 嵌入式軟體開發過程與工具 (21)
2.1 嵌入式軟體開發介紹 (21)
2.1.1 嵌入式軟體開發的特殊性 (21)
2.1.2 嵌入式軟體的分類 (22)
2.1.3 嵌入式軟體的開發流程 (22)
2.1.4 嵌入式軟體開發工具的發展趨勢 (24)
2.2 嵌入式軟體的調試技術 (25)
2.2.1 調試技術介紹 (25)
2.2.2 基於JTAG的ARM系統調試 (26)
2.3 嵌入式軟體測試技術 (27)
2.3.1 宿主機—目標機開發模式 (27)
2.3.2 目標監控器 (28)
2.4 嵌入式系統集成開發環境 (30)
2.4.1 ADS的介紹 (30)
2.4.2 ADS建立工程的使用介紹 (32)
2.4.3 AXD調試器的使用介紹 (37)
實例2-1 ARM開發環境ADS的使用實例 (39)
2.5 本章小結 (43)
第3章 嵌入式處理器體系結構 (44)
3.1 ARM體系結構概述 (44)
3.1.1 ARM體系結構簡介 (45)
3.1.2 ARM體系結構的技術特徵 (47)
3.1.3 CISC的體系結構 (48)
3.1.4 RISC的體系結構 (48)
3.1.5 RISC系統和CISC系統的比較 (50)
3.2 ARM微處理器的分類 (51)
3.2.1 ARM7微處理器 (51)
3.2.2 ARM9微處理器 (52)
3.2.3 ARM9E微處理器 (52)
3.2.4 ARM10E微處理器 (53)
3.2.5 ARM11微處理器 (54)
3.2.6 SecurCore微處理器 (54)
3.2.7 StrongARM微處理器 (54)
3.2.8 XScale微處理器 (55)
3.3 ARM微處理器的套用 (55)
3.3.1 ARM微處理器的套用選型 (55)
3.3.2 S3C2410處理器 (56)
3.4 存儲器 (57)
3.4.1 存儲器簡介 (57)
3.4.2 SDRAM操作 (59)
3.4.3 Flash (60)
3.5 ARM編程模型 (61)
3.5.1 數據類型 (61)
3.5.2 存儲器格式 (62)
3.5.3 處理器工作狀態 (62)
3.5.4 處理器運行模式 (63)
3.5.5 暫存器組織 (63)
3.5.6 內部暫存器 (66)
3.6 ARM指令的定址方式 (67)
3.6.1 立即定址 (67)
3.6.2 暫存器定址 (68)
3.6.3 暫存器間接定址 (68)
3.6.4 相對定址 (69)
3.6.5 堆疊定址 (69)
3.6.6 塊複製定址 (70)
3.6.7 變址定址 (70)
3.6.8 多暫存器定址 (71)
3.7 ARM指令集 (71)
3.7.1 ARM指令的格式 (71)
3.7.2 ARM指令分類 (72)
3.7.3 Thumb指令介紹 (78)
3.7.4 Thumb指令分類 (79)
3.7.5 ARM指令集和Thumb指令集的區別 (82)
3.8 ARM微處理器的異常 (83)
3.8.1 ARM體系結構所支持的異常類型 (84)
3.8.2 異常矢量表 (85)
3.8.3 異常優先權 (85)
3.8.4 應用程式中的異常處理 (86)
3.8.5 各類異常的具體描述 (87)
3.9 本章小結 (91)
第二篇 Linux開發入門
第4章 Linux開發常用操作 (92)
4.1 Linux系統介紹 (92)
4.1.1 Linux的概況 (93)
4.1.2 Linux作業系統的構成 (94)
4.1.3 Linux常見的發行版本 (95)
4.1.4 Linux核心的特點 (97)
4.2 Linux命令的使用 (98)
4.3 vi編輯器的使用 (108)
4.3.1 vi編輯器的進入 (108)
4.3.2 命令模式的命令 (109)
4.3.3 末行模式的命令 (110)
實例4-1 vi編輯器使用實例 (110)
4.4 Shell編程 (112)
4.4.1 Shell基礎介紹 (112)
4.4.2 Shell程式的變數和參數 (114)
4.4.3 運行Shell程式 (116)
4.4.4 Shell程式設計的流程控制 (117)
4.4.5 Shell輸入與輸出 (121)
4.4.6 bash介紹 (123)
4.5 綜合實例 (124)
實例4-2 編寫清除/var/log下的log檔案綜合實例 (124)
實例4-3 編寫尋找死連結檔案綜合實例 (127)
4.6 本章小結 (131)
第5章 Linux核心介紹 (132)
5.1 進程概述 (132)
5.1.1 進程結構 (133)
5.1.2 進程的控制操作 (134)
5.1.3 進程的屬性 (136)
5.1.4 進程的創建和調度 (137)
5.1.5 Linux進程命令 (139)
5.2 系統調用 (143)
5.2.1 系統調用概述 (143)
5.2.2 系統調用的進入 (144)
5.2.3 與進程管理相關的系統調用 (145)
5.3 管道 (145)
5.3.1 管道系統調用 (145)
5.3.2 管道的分類 (147)
實例5-1 管道通信實例 (148)
5.4 信號 (150)
5.4.1 常見的信號種類 (150)
5.4.2 系統調用函式 (151)
5.4.3 信號的處理 (152)
5.4.4 信號與系統調用的關係 (152)
實例5-2 信號實例 (153)
5.5 信號量 (154)
5.5.1 信號量概述 (154)
5.5.2 相關的數據結構 (155)
5.5.3 相關的函式 (157)
實例5-3 信號量實例 (158)
5.6 共享記憶體 (163)
5.6.1 共享記憶體原理 (163)
5.6.2 共享記憶體對象的結構 (164)
5.6.3 相關的函式 (165)
實例5-4 共享記憶體實例 (166)
5.7 訊息佇列 (171)
5.7.1 有關的數據結構 (171)
5.7.2 相關的函式 (174)
實例5-5 訊息佇列實例 (176)
5.8 綜合實例 (179)
實例5-6 多執行緒編程實例 (179)
5.9 本章小結 (180)
第6章 Linux開發環境的構建 (181)
6.1 建立Linux開發環境概述 (181)
6.1.1 Cygwin開發環境 (181)
6.1.2 VMware Workstation開發環境 (183)
6.2 交叉編譯的使用 (185)
6.2.1 GNU交叉工具鏈的設定 (185)
6.2.2 ARM GNU常用彙編語言 (188)
6.2.3 GNU交叉工具鏈的常用工具 (190)
6.2.4 交叉編譯環境 (193)
6.3 Linux下的C編程 (196)
6.3.1 Linux程式設計特點 (196)
6.3.2 Linux下C語言編碼的風格 (197)
6.3.3 Linux程式基礎 (197)
6.3.4 Linux下C編程的庫依賴 (199)
6.4 gcc的使用與開發 (199)
6.4.1 gcc簡介和使用 (199)
6.4.2 gcc選項 (200)
6.4.3 gcc的錯誤類型 (203)
實例6-1 gcc編譯器環境的套用實例 (204)
6.5 gdb調試器的介紹和使用 (205)
6.5.1 gdb調試器的使用 (205)
6.5.2 在gdb中運行程式 (206)
6.5.3 暫停和恢復程式運行 (208)
6.5.4 遠程調試 (211)
實例6-2 gdb調試器環境的套用實例 (211)
6.6 GNU make和Makefile的使用 (213)
6.6.1 Makefile的基本結構 (214)
6.6.2 Makefile的變數 (215)
6.6.3 Makefile的隱含規則 (217)
6.6.4 Makefile的命令使用 (220)
6.6.5 Makefile的函式使用 (221)
6.6.6 Makefile檔案的運行 (223)
6.6.7 Makefile規則書寫命令 (225)
實例6-3 Makefile的命令使用實例 (231)
6.7 autoconf和automake的使用 (233)
6.7.1 autoconf的使用 (233)
6.7.2 Makefile.am的編寫 (236)
6.7.3 automake的使用 (236)
6.7.4 使用automake和autoconf產生Makefile (237)
6.7.5 自動生成Makefile的方法 (237)
6.8 綜合實例 (238)
實例6-4 gcc編譯器的綜合實例 (238)
實例6-5 gdb調試器的綜合實例 (241)
實例6-6 Makefile的綜合實例 (244)
6.9 本章小結 (246)
第三篇 嵌入式系統移植與構建
第7章 Bootloader的使用 (247)
7.1 Bootloader 概述 (248)
7.1.1 Bootloader的作用 (248)
7.1.2 Bootloader的功能 (249)
7.1.3 Bootloader的種類 (250)
7.1.4 Bootloader的工作模式 (251)
7.1.5 Bootloader的啟動方式 (251)
7.1.6 Bootloader的啟動流程 (253)
7.1.7 Bootloader與主機的通信 (253)
7.2 vivi的移植 (253)
7.2.1 vivi的常用命令和檔案結構 (254)
7.2.2 vivi第一階段的分析 (255)
7.2.3 vivi第二階段的分析 (261)
7.2.4 vivi的配置與編譯 (263)
7.3 U-boot的移植 (264)
7.3.1 U-boot常用命令和原始碼目錄結構 (264)
7.3.2 U-boot支持的主要功能 (268)
7.3.3 U-boot的編譯和添加命令 (268)
7.3.4 U-boot的啟動介紹 (272)
7.3.5 U-boot的移植和使用 (273)
7.3.6 U-boot的啟動過程 (275)
7.3.7 U-boot的調試 (276)
7.4 其他常見的Bootloader (278)
7.5 綜合實例 (280)
實例7-1 vivi編譯實例 (280)
實例7-2 U-boot在S3C2410上的移植實例 (281)
實例7-3 Bootloader設計實例 (283)
7.6 本章小結 (285)
第8章 Linux核心裁剪與移植 (286)
8.1 Linux移植簡介 (286)
8.1.1 Linux可移植性發展 (287)
8.1.2 Linux的移植性 (287)
8.2 Linux核心結構 (288)
8.2.1 Linux核心組成 (288)
8.2.2 子系統相互間的關係 (292)
8.2.3 系統數據結構 (293)
8.2.4 Linux核心原始碼 (293)
8.3 Linux核心配置 (297)
實例8-1 Linux核心配置實例 (297)
8.4 Linux作業系統移植介紹 (300)
8.4.1 Linux系統移植的兩大部分 (300)
8.4.2 核心檔案的修改 (302)
8.4.3 系統移植所必需的環境 (306)
8.5 綜合實例 (309)
實例8-2 編譯Linux核心套用實例 (309)
實例8-3 Linux核心的燒寫實例 (311)
實例8-4 使用KGDB構建Linux核心調試環境 (312)
8.6 本章小結 (321)
第9章 Linux根檔案系統的構建 (322)
9.1 Linux檔案系統概述 (322)
9.1.1 Linux檔案系統的特點 (322)
9.1.2 其他常見的嵌入式檔案系統 (324)
9.1.3 Linux根檔案目錄結構 (326)
9.1.4 Linux檔案屬性介紹 (326)
9.2 使用BusyBox生成工具集 (327)
9.2.1 BusyBox概述 (327)
9.2.2 BusyBox進程和用戶程式啟動過程 (328)
9.2.3 編譯/安裝BusyBox (329)
實例9-1 用BusyBox建立簡單的根檔案系統 (333)
9.3 構建根檔案系統 (335)
9.3.1 根檔案系統製作流程 (335)
實例9-2 構建根檔案系統 (339)
9.4 配置yaffs檔案 (341)
9.4.1 yaffs檔案系統設定 (342)
9.4.2 yaffs檔案系統測試 (344)
9.5 綜合實例 (345)
實例9-3 製作/使用yaffs檔案系統映像檔案 (345)
實例9-4 製作/使用jffs2檔案系統映像檔案 (347)
9.6 本章小結 (349)
第四篇 嵌入式系統開發
第10章 設備驅動程式開發 (350)
10.1 設備驅動程式概述 (351)
10.1.1 驅動程式的簡介 (351)
10.1.2 設備分類 (351)
10.1.3 設備號 (352)
10.1.4 設備節點 (353)
10.1.5 驅動層次結構 (353)
10.1.6 設備驅動程式的特點 (354)
10.2 設備驅動程式與檔案系統 (355)
10.2.1 設備驅動程式與檔案系統的關係 (355)
10.2.2 設備驅動程式與作業系統的關係 (355)
10.2.3 Linux設備驅動程式的接口 (356)
10.2.4 設備驅動程式開發的基本函式 (361)
10.2.5 Linux驅動程式的載入 (362)
10.3 設備驅動程式的使用 (366)
10.3.1 驅動程式模組的載入 (366)
10.3.2 創建設備檔案 (367)
10.3.3 使用設備 (367)
10.4 網路設備基礎知識 (367)
10.4.1 網路協定 (367)
10.4.2 網路設備接口基礎 (369)
10.5 網路設備驅動程式的架構 (371)
10.5.1 網路設備驅動程式體系結構 (371)
10.5.2 網路設備驅動程式模組分析 (372)
10.5.3 網路設備驅動程式的實現模式 (378)
10.5.4 網路設備驅動程式的數據結構 (379)
10.6 綜合實例 (383)
實例10-1 鍵盤驅動開發實例 (383)
實例10-2 I2C匯流排驅動的編寫實例 (386)
實例10-3 TFT-LCD顯示驅動實例 (390)
10.7 本章小結 (395)
第11章 嵌入式常用GUI開發 (396)
11.1 嵌入式系統中的GUI簡介 (397)
11.1.1 嵌入式GUI系統的介紹 (397)
11.1.2 基於嵌入式Linux的GUI系統底層實現基礎 (399)
11.1.3 嵌入式GUI系統的分析與比較 (399)
11.2 嵌入式系統下MiniGUI的實現 (401)
11.2.1 圖形用戶界面MiniGUI簡介 (401)
11.2.2 MiniGUI的發布版本 (403)
11.2.3 MiniGUI在S3C2410處理器上的移植過程 (406)
11.3 Qt/Embedded嵌入式圖形開發基礎 (409)
11.3.1 Qt/Embedded開發環境的安裝 (409)
11.3.2 Qt/Embedded底層支持及實現代碼分析 (413)
11.3.3 Qt/Embedded信號和插槽機制 (414)
11.3.4 Qt/Embedded視窗部件 (417)
11.3.5 Qt/Embedded圖形界面編程 (420)
11.3.6 Qt/Embedded對話框設計 (421)
11.3.7 資料庫 (422)
實例11-1 Qt/Embedded圖形開發套用實例 (425)
11.4 Qtopia移植 (426)
11.4.1 Qtopia簡介 (426)
11.4.2 交叉編譯、安裝Qtopia (426)
實例11-2 Qtopia移植套用實例 (428)
11.5 Qt/Embedded套用開發 (429)
11.5.1 嵌入式硬體開發平台的選擇 (429)
11.5.2 Qt/Embedded常用工具的介紹 (431)
11.5.3 交叉編譯Qt/Embedded的庫 (432)
11.5.4 Qt/E程式的編譯與執行 (433)
實例11-3 Qt/Embedded實戰演練 (434)
11.6 綜合實例 (438)
實例11-4 Hello,Qt/Embedded應用程式 (438)
實例11-5 基本繪圖應用程式的編寫 (441)
11.7 本章小結 (445)
第12章 嵌入式系統工程實例 (446)
12.1 檔案系統的生成與燒寫 (446)
12.1.1 yaffs檔案系統的製作與生成 (447)
12.1.2 jffs2檔案系統的製作與生成 (451)
12.2 基於Linux的數碼相框 (454)
12.2.1 系統需求分析 (454)
12.2.2 系統總體設計 (455)
12.2.3 軟體設計實現 (456)
12.2.4 軟硬體集成 (463)
12.3 基於Linux的MPlayer解碼播放器 (464)
12.3.1 可行性分析報告 (464)
12.3.2 系統總體設計 (465)
12.3.3 軟體總體設計 (466)
12.3.4 軟體詳細設計 (470)
12.3.5 軟硬體集成 (480)
12.4 基於Linux的GPS導航系統的開發 (481)
12.4.1 嵌入式開發流程 (482)
12.4.2 GPS導航定位系統的系統定義 (484)
12.4.3 GPS導航系統的可行性分析報告 (489)
12.4.4 GPS導航系統需求分析 (490)
12.4.5 GPS導航系統總體設計實現 (493)
12.4.6 GPS導航系統硬體設計實現 (494)
12.4.7 GPS導航系統軟體概括設計 (498)
12.4.8 GPS導航系統軟體詳細設計 (498)
12.4.9 GPS導航系統資料庫的配置設計 (525)
12.4.10 GPS導航系統軟體實現 (537)
12.4.11 GPS導航系統軟硬體集成 (538)
12.4.12 GPS導航系統功能性能測試 (540)
12.5 本章小結 (541)