本書結(jié)合大量實例,在基于ARM Cortex-A9 四核處理器的硬件教學平臺上,全面詳細地講解了ARM處理器及在其上的嵌入式Linux 系統(tǒng)開發(fā)。本書主要內(nèi)容包括ARM 處理器及常用指令介紹,Linux 編程環(huán)境,交叉開發(fā)環(huán)境,Boot Loader 介紹U-Boot 啟動過程及移植,Linux 內(nèi)核配置、編譯及Qt 移植等。其中移植相關(guān)的內(nèi)容不僅給出了移植的方法和步驟,還講解了為什么要這么做。重視實踐,實用是本書的最大特點,同時,本書配合大量的習題,讀者能快速地掌握嵌入式Linux 系統(tǒng)開發(fā)的要點。本書可作為大學院校電子、通信、計算機、自動化等專業(yè)的“嵌入式Linux 系統(tǒng)開發(fā)”課程的教材,也可作為嵌入式開發(fā)人員的參考用書。
華清遠見嵌入式培訓中心,是國內(nèi)成立較早、規(guī)模較大的專業(yè)嵌入式培訓機構(gòu)。為滿足快速增長的移動開發(fā)領(lǐng)域?qū)ndroid等主流嵌入式操作系統(tǒng)研發(fā)人才的需求,華清遠見在多年高端嵌入式專業(yè)培訓和豐富的企業(yè)內(nèi)訓實施經(jīng)驗的基礎上,于2004年正式成立華清遠見3G學院,學院充分整合行業(yè)經(jīng)驗及專業(yè)領(lǐng)域的企業(yè)合作資源優(yōu)勢,打造出專業(yè)、科學的實訓體系,幫助合作院校時刻緊跟行業(yè)用人需求的新趨勢,引導畢業(yè)生在知識結(jié)構(gòu)上更好地實現(xiàn)與企業(yè)真實需求的對接,從而有效提高其就業(yè)競爭優(yōu)勢,順利進入專業(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 開發(fā)環(huán)境 6
1.5 嵌入式Linux 系統(tǒng)開發(fā)要點 8
第2 章 ARM處理 9
2.1 ARM 處理器簡介 10
2.1.1 ARM 公司簡介 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 處理器簡介 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 華清遠見 FS4412 開發(fā)板 30
2.4.1 華清遠見 FS4412 開發(fā)板介紹 30
2.4.2 眾多的開發(fā)板供應商 34
2.5 習題 34
第3 章 Linux 編程環(huán)境 35
3.1 Linux 常用工具 36
3.1.1 Shell 簡介 36
3.1.2 常用的Shell 命令 38
3.1.3 編寫Shell 腳本 46
3.1.4 正則表達式 50
3.1.5 程序編輯器 53
3.2 Makefile 57
3.2.1 GNU make 57
3.2.2 Makefile 規(guī)則語法 59
3.2.3 Makefile 文件中變量的使用 60
3.3 二進制代碼工具的使用 62
3.3.1 GNU Binutils 工具介紹 62
3.3.2 Binutils 工具軟件使用 63
3.4 GCC 編譯器的使用 64
3.4.1 GCC 編譯器簡介 64
3.4.2 GCC 編譯選項解析 66
3.5 調(diào)試器GDB 的使用技巧 70
3.5.1 GDB 調(diào)試器介紹 70
3.5.2 GDB 調(diào)試命令 71
3.6 Linux 編程庫 75
3.6.1 Linux 編程庫介紹 75
3.6.2 Linux 系統(tǒng)調(diào)用 76
3.6.3 Linux 線程庫 78
3.7 習題 81
第4 章 交叉開發(fā)環(huán)境 82
4.1 交叉開發(fā)環(huán)境介紹 83
4.1.1 交叉開發(fā)概念模型 83
4.1.2 目標板與主機之間的連接 84
4.1.3 文件傳輸 86
4.1.4 網(wǎng)絡文件系統(tǒng) 87
4.2 安裝交叉編譯工具 87
4.2.1 獲取交叉開發(fā)工具鏈 87
4.2.2 主機安裝工具鏈 88
4.3 主機開發(fā)環(huán)境配置 88
4.3.1 主機環(huán)境配置 88
4.3.2 串口控制臺工具 89
4.3.3 TFTP 服務 93
4.3.4 NFS 服務 93
4.4 啟動目標板 95
4.4.1 系統(tǒng)引導過程 95
4.4.2 內(nèi)核解壓啟動 96
4.4.3 掛接根文件系統(tǒng) 98
4.5 應用程序的遠程交叉調(diào)試 99
4.5.1 交叉調(diào)試的模型 99
4.5.2 交叉調(diào)試程序?qū)嵗?100
4.6 實例:FS4412 嵌入式開發(fā)環(huán)境搭建 102
4.6.1 開發(fā)主機安裝 102
4.6.2 聯(lián)調(diào)測試 110
4.7 習題 113
第5 章 Bootloader 114
5.1 Bootloader 簡介 115
5.1.1 Bootloader 介紹 115
5.1.2 Bootloader 的啟動 115
5.1.3 Bootloader 的種類 118
5.2 U-Boot 簡介 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 啟動過程 132
5.3.3 U-Boot 與內(nèi)核的關(guān)系 136
5.4 U-Boot 移植實例 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)卡實現(xiàn)Ping 和TFTP 的功能 145
5.5 習題 151
第6 章 配置編譯內(nèi)核 153
6.1 Linux 內(nèi)核特點 154
6.1.1 Linux 內(nèi)核版本介紹 154
6.1.2 Linux 內(nèi)核特點 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)核配置選項 187
6.3.1 使用配置菜單 187
6.3.2 基本配置選項 189
6.3.3 驅(qū)動程序配置選項 191
6.4 習題 192
第7 章 內(nèi)核移植基礎 193
7.1 移植內(nèi)核源碼 194
7.1.1 移植的基本工作 194
7.1.2 移植后的工作 196
7.2 Linux 設備樹 197
7.2.1 Linux 設備樹的由來 197
7.2.2 Linux 設備樹的目的 197
7.2.3 Linux 設備樹的使用 199
7.3 Linux 內(nèi)核啟動過程分析 206
7.3.1 內(nèi)核啟動流程介紹 206
7.3.2 內(nèi)核啟動加載程序 209
7.3.3 內(nèi)核主體程序入口 215
7.3.4 Linux 系統(tǒng)初始化 218
7.3.5 初始化驅(qū)動模型 224
7.3.6 掛載根文件系統(tǒng) 225
7.4 習題 227
第8 章 內(nèi)核移植實例 229
8.1 基本內(nèi)核移植 230
8.2 網(wǎng)卡驅(qū)動移植 234
8.2.1 網(wǎng)卡原理圖分析 234
8.2.2 網(wǎng)卡驅(qū)動移植 235
8.2.3 以NFS 掛載根文件系統(tǒng) 237
8.3 SD/eMMC 驅(qū)動移植 238
8.4 USB 主機控制器驅(qū)動移植 240
8.5 LCD 驅(qū)動移植 244
8.6 習題 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 學會分析內(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)請求鍵 263
9.3.2 通過/proc 接口 264
9.3.3 通過/sys 接口 265
9.4 處理出錯信息 268
9.4.1 oops 信息 268
9.4.2 panic 269
9.4.3 通過ioctl 方法 271
9.5 內(nèi)核源代碼調(diào)試 272
9.6 習題 275
第10 章 制作Linux 根文件系統(tǒng) 276
10.1 根文件系統(tǒng)目錄結(jié)構(gòu) 277
10.2 init 系統(tǒng)初始化過程 280
10.2.1 inittab 文件 281
10.2.2 System V init 啟動過程 284
10.2.3 Busybox init 啟動過程分析 285
10.3 制作根文件系統(tǒng) 287
10.3.1 配置并編譯Busybox 287
10.3.2 添加共享庫文件和內(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 習題 297
第11 章 Qt 移植 299
11.1 Qt 源碼配置、編譯及安裝 300
11.2 在根文件系統(tǒng)中添加Qt 309
11.3 安裝Qt 集成開發(fā)環(huán)境 309
11.4 添加ARM 平臺的構(gòu)建環(huán)境 313
11.5 編寫并運行Qt 測試程序 316
11.6 習題 320
參考文獻 322
附錄 習題答案 323