嵌入式 Linux 系統與工程實踐, 2/e
內容描述
本書以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 Sh ell編程(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系統調用函數(1 51)
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的命令使用實例(23 1)
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 Linu x系統移植的兩大部分(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 ya ffs文件系統測試(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)