本書(shū)結(jié)合大量實(shí)例,在基于ARM Cortex-A9 四核處理器的硬件教學(xué)平臺(tái)上,全面詳細(xì)地講解了ARM處理器及在其上的嵌入式Linux 系統(tǒng)開(kāi)發(fā)。本書(shū)主要內(nèi)容包括ARM 處理器及常用指令介紹,Linux 編程環(huán)境,交叉開(kāi)發(fā)環(huán)境,Boot Loader 介紹U-Boot 啟動(dòng)過(guò)程及移植,Linux 內(nèi)核配置、編譯及Qt 移植等。其中移植相關(guān)的內(nèi)容不僅給出了移植的方法和步驟,還講解了為什么要這么做。重視實(shí)踐,實(shí)用是本書(shū)的最大特點(diǎn),同時(shí),本書(shū)配合大量的習(xí)題,讀者能快速地掌握嵌入式Linux 系統(tǒng)開(kāi)發(fā)的要點(diǎn)。本書(shū)可作為大學(xué)院校電子、通信、計(jì)算機(jī)、自動(dòng)化等專業(yè)的“嵌入式Linux 系統(tǒng)開(kāi)發(fā)”課程的教材,也可作為嵌入式開(kāi)發(fā)人員的參考用書(shū)。
華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心,是國(guó)內(nèi)成立較早、規(guī)模較大的專業(yè)嵌入式培訓(xùn)機(jī)構(gòu)。為滿足快速增長(zhǎng)的移動(dòng)開(kāi)發(fā)領(lǐng)域?qū)ndroid等主流嵌入式操作系統(tǒng)研發(fā)人才的需求,華清遠(yuǎn)見(jiàn)在多年高端嵌入式專業(yè)培訓(xùn)和豐富的企業(yè)內(nèi)訓(xùn)實(shí)施經(jīng)驗(yàn)的基礎(chǔ)上,于2004年正式成立華清遠(yuǎn)見(jiàn)3G學(xué)院,學(xué)院充分整合行業(yè)經(jīng)驗(yàn)及專業(yè)領(lǐng)域的企業(yè)合作資源優(yōu)勢(shì),打造出專業(yè)、科學(xué)的實(shí)訓(xùn)體系,幫助合作院校時(shí)刻緊跟行業(yè)用人需求的新趨勢(shì),引導(dǎo)畢業(yè)生在知識(shí)結(jié)構(gòu)上更好地實(shí)現(xiàn)與企業(yè)真實(shí)需求的對(duì)接,從而有效提高其就業(yè)競(jìng)爭(zhēng)優(yōu)勢(shì),順利進(jìn)入專業(yè)研發(fā)領(lǐng)域。
第1 章 嵌入式系統(tǒng)概述 1
1.1 嵌入式系統(tǒng) 2
1.2 嵌入式操作系統(tǒng) 3
1.3 嵌入式Linux 歷史 5
1.4 嵌入式Linux 開(kāi)發(fā)環(huán)境 6
1.5 嵌入式Linux 系統(tǒng)開(kāi)發(fā)要點(diǎn) 8
第2 章 ARM處理 9
2.1 ARM 處理器簡(jiǎn)介 10
2.1.1 ARM 公司簡(jiǎn)介 11
2.1.2 ARM 處理器體系結(jié)構(gòu) 12
2.1.3 Linux 與ARM 處理器 17
2.2 ARM 指令集 18
2.2.1 ARM 微處理器的指令集概述 18
2.2.2 ARM 指令尋址方式 19
2.2.3 Thumb 指令 21
2.2.4 Thumb-2 指令 22
2.2.5 ThumbEE 指令 22
2.3 典型ARM 處理器簡(jiǎn)介 22
2.3.1 Atmel AT91RM9200 22
2.3.2 Samsung S3C2410 23
2.3.3 TI OMAP5 系列 25
2.3.4 Freescale i.Max6 26
2.3.5 Intel Xscale PXA 系列 27
2.3.6 Cortex-A 系列的Exynos4412 29
2.4 華清遠(yuǎn)見(jiàn) FS4412 開(kāi)發(fā)板 30
2.4.1 華清遠(yuǎn)見(jiàn) FS4412 開(kāi)發(fā)板介紹 30
2.4.2 眾多的開(kāi)發(fā)板供應(yīng)商 34
2.5 習(xí)題 34
第3 章 Linux 編程環(huán)境 35
3.1 Linux 常用工具 36
3.1.1 Shell 簡(jiǎn)介 36
3.1.2 常用的Shell 命令 38
3.1.3 編寫Shell 腳本 46
3.1.4 正則表達(dá)式 50
3.1.5 程序編輯器 53
3.2 Makefile 57
3.2.1 GNU make 57
3.2.2 Makefile 規(guī)則語(yǔ)法 59
3.2.3 Makefile 文件中變量的使用 60
3.3 二進(jìn)制代碼工具的使用 62
3.3.1 GNU Binutils 工具介紹 62
3.3.2 Binutils 工具軟件使用 63
3.4 GCC 編譯器的使用 64
3.4.1 GCC 編譯器簡(jiǎn)介 64
3.4.2 GCC 編譯選項(xiàng)解析 66
3.5 調(diào)試器GDB 的使用技巧 70
3.5.1 GDB 調(diào)試器介紹 70
3.5.2 GDB 調(diào)試命令 71
3.6 Linux 編程庫(kù) 75
3.6.1 Linux 編程庫(kù)介紹 75
3.6.2 Linux 系統(tǒng)調(diào)用 76
3.6.3 Linux 線程庫(kù) 78
3.7 習(xí)題 81
第4 章 交叉開(kāi)發(fā)環(huán)境 82
4.1 交叉開(kāi)發(fā)環(huán)境介紹 83
4.1.1 交叉開(kāi)發(fā)概念模型 83
4.1.2 目標(biāo)板與主機(jī)之間的連接 84
4.1.3 文件傳輸 86
4.1.4 網(wǎng)絡(luò)文件系統(tǒng) 87
4.2 安裝交叉編譯工具 87
4.2.1 獲取交叉開(kāi)發(fā)工具鏈 87
4.2.2 主機(jī)安裝工具鏈 88
4.3 主機(jī)開(kāi)發(fā)環(huán)境配置 88
4.3.1 主機(jī)環(huán)境配置 88
4.3.2 串口控制臺(tái)工具 89
4.3.3 TFTP 服務(wù) 93
4.3.4 NFS 服務(wù) 93
4.4 啟動(dòng)目標(biāo)板 95
4.4.1 系統(tǒng)引導(dǎo)過(guò)程 95
4.4.2 內(nèi)核解壓?jiǎn)?dòng) 96
4.4.3 掛接根文件系統(tǒng) 98
4.5 應(yīng)用程序的遠(yuǎn)程交叉調(diào)試 99
4.5.1 交叉調(diào)試的模型 99
4.5.2 交叉調(diào)試程序?qū)嵗?100
4.6 實(shí)例:FS4412 嵌入式開(kāi)發(fā)環(huán)境搭建 102
4.6.1 開(kāi)發(fā)主機(jī)安裝 102
4.6.2 聯(lián)調(diào)測(cè)試 110
4.7 習(xí)題 113
第5 章 Bootloader 114
5.1 Bootloader 簡(jiǎn)介 115
5.1.1 Bootloader 介紹 115
5.1.2 Bootloader 的啟動(dòng) 115
5.1.3 Bootloader 的種類 118
5.2 U-Boot 簡(jiǎn)介 120
5.2.1 U-Boot 介紹 120
5.2.2 U-Boot 的常用命令 120
5.2.3 U-Boot 的環(huán)境變量 124
5.2.4 U-Boot 源碼結(jié)構(gòu) 126
5.3 U-Boot 源碼分析 127
5.3.1 配置編譯 127
5.3.2 U-Boot 啟動(dòng)過(guò)程 132
5.3.3 U-Boot 與內(nèi)核的關(guān)系 136
5.4 U-Boot 移植實(shí)例 138
5.4.1 收集移植相關(guān)資源 138
5.4.2 選擇U-Boot 源碼版本 139
5.4.3 u-Boot 配置編譯 139
5.4.4 串口能輸出信息 140
5.4.5 移植網(wǎng)卡實(shí)現(xiàn)Ping 和TFTP 的功能 145
5.5 習(xí)題 151
第6 章 配置編譯內(nèi)核 153
6.1 Linux 內(nèi)核特點(diǎn) 154
6.1.1 Linux 內(nèi)核版本介紹 154
6.1.2 Linux 內(nèi)核特點(diǎn) 155
6.2 配置編譯內(nèi)核源碼 156
6.2.1 內(nèi)核源碼的下載方法和結(jié)構(gòu) 157
6.2.2 內(nèi)核配置系統(tǒng) 160
6.2.3 Kbuild Makefiles 167
6.2.4 內(nèi)核編譯 178
6.2.5 內(nèi)核編譯結(jié)果 185
6.3 內(nèi)核配置選項(xiàng) 187
6.3.1 使用配置菜單 187
6.3.2 基本配置選項(xiàng) 189
6.3.3 驅(qū)動(dòng)程序配置選項(xiàng) 191
6.4 習(xí)題 192
第7 章 內(nèi)核移植基礎(chǔ) 193
7.1 移植內(nèi)核源碼 194
7.1.1 移植的基本工作 194
7.1.2 移植后的工作 196
7.2 Linux 設(shè)備樹(shù) 197
7.2.1 Linux 設(shè)備樹(shù)的由來(lái) 197
7.2.2 Linux 設(shè)備樹(shù)的目的 197
7.2.3 Linux 設(shè)備樹(shù)的使用 199
7.3 Linux 內(nèi)核啟動(dòng)過(guò)程分析 206
7.3.1 內(nèi)核啟動(dòng)流程介紹 206
7.3.2 內(nèi)核啟動(dòng)加載程序 209
7.3.3 內(nèi)核主體程序入口 215
7.3.4 Linux 系統(tǒng)初始化 218
7.3.5 初始化驅(qū)動(dòng)模型 224
7.3.6 掛載根文件系統(tǒng) 225
7.4 習(xí)題 227
第8 章 內(nèi)核移植實(shí)例 229
8.1 基本內(nèi)核移植 230
8.2 網(wǎng)卡驅(qū)動(dòng)移植 234
8.2.1 網(wǎng)卡原理圖分析 234
8.2.2 網(wǎng)卡驅(qū)動(dòng)移植 235
8.2.3 以NFS 掛載根文件系統(tǒng) 237
8.3 SD/eMMC 驅(qū)動(dòng)移植 238
8.4 USB 主機(jī)控制器驅(qū)動(dòng)移植 240
8.5 LCD 驅(qū)動(dòng)移植 244
8.6 習(xí)題 249
第9 章 內(nèi)核調(diào)試技術(shù) 250
9.1 內(nèi)核調(diào)試方法 251
9.1.1 內(nèi)核調(diào)試介紹 251
9.1.2 學(xué)會(huì)分析內(nèi)核源程序 252
9.1.3 調(diào)試方法介紹 252
9.2 內(nèi)核打印函數(shù) 255
9.2.1 內(nèi)核映像解壓前的串口輸出函數(shù) 255
9.2.2 內(nèi)核映像解壓后的串口輸出函數(shù) 257
9.2.3 printk 258
9.3 獲取內(nèi)核信息 263
9.3.1 系統(tǒng)請(qǐng)求鍵 263
9.3.2 通過(guò)/proc 接口 264
9.3.3 通過(guò)/sys 接口 265
9.4 處理出錯(cuò)信息 268
9.4.1 oops 信息 268
9.4.2 panic 269
9.4.3 通過(guò)ioctl 方法 271
9.5 內(nèi)核源代碼調(diào)試 272
9.6 習(xí)題 275
第10 章 制作Linux 根文件系統(tǒng) 276
10.1 根文件系統(tǒng)目錄結(jié)構(gòu) 277
10.2 init 系統(tǒng)初始化過(guò)程 280
10.2.1 inittab 文件 281
10.2.2 System V init 啟動(dòng)過(guò)程 284
10.2.3 Busybox init 啟動(dòng)過(guò)程分析 285
10.3 制作根文件系統(tǒng) 287
10.3.1 配置并編譯Busybox 287
10.3.2 添加共享庫(kù)文件和內(nèi)核模塊 289
10.3.3 添加其他目錄和文件 290
10.4 固化根文件系統(tǒng) 293
10.4.1 制作image 格式的initrd 根文件系統(tǒng)鏡像 293
10.4.2 固化ext2 格式的根文件系統(tǒng) 295
10.5 習(xí)題 297
第11 章 Qt 移植 299
11.1 Qt 源碼配置、編譯及安裝 300
11.2 在根文件系統(tǒng)中添加Qt 309
11.3 安裝Qt 集成開(kāi)發(fā)環(huán)境 309
11.4 添加ARM 平臺(tái)的構(gòu)建環(huán)境 313
11.5 編寫并運(yùn)行Qt 測(cè)試程序 316
11.6 習(xí)題 320
參考文獻(xiàn) 322
附錄 習(xí)題答案 323