本書結合大量實例,在基于ARM Cortex-A9 四核處理器的硬件教學平臺上,全面詳細地講解了ARM處理器及在其上的嵌入式Linux 系統(tǒng)開發(fā)。本書主要內容包括ARM 處理器及常用指令介紹,Linux 編程環(huán)境,交叉開發(fā)環(huán)境,Boot Loader 介紹U-Boot 啟動過程及移植,Linux 內核配置、編譯及Qt 移植等。其中移植相關的內容不僅給出了移植的方法和步驟,還講解了為什么要這么做。重視實踐,實用是本書的最大特點,同時,本書配合大量的習題,讀者能快速地掌握嵌入式Linux 系統(tǒng)開發(fā)的要點。本書可作為大學院校電子、通信、計算機、自動化等專業(yè)的“嵌入式Linux 系統(tǒng)開發(fā)”課程的教材,也可作為嵌入式開發(fā)人員的參考用書。
華清遠見嵌入式培訓中心,是國內成立較早、規(guī)模較大的專業(yè)嵌入式培訓機構。為滿足快速增長的移動開發(fā)領域對Android等主流嵌入式操作系統(tǒng)研發(fā)人才的需求,華清遠見在多年高端嵌入式專業(yè)培訓和豐富的企業(yè)內訓實施經(jīng)驗的基礎上,于2004年正式成立華清遠見3G學院,學院充分整合行業(yè)經(jīng)驗及專業(yè)領域的企業(yè)合作資源優(yōu)勢,打造出專業(yè)、科學的實訓體系,幫助合作院校時刻緊跟行業(yè)用人需求的新趨勢,引導畢業(yè)生在知識結構上更好地實現(xiàn)與企業(yè)真實需求的對接,從而有效提高其就業(yè)競爭優(yōu)勢,順利進入專業(yè)研發(fā)領域。
第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 處理器體系結構 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 調試器GDB 的使用技巧 70
3.5.1 GDB 調試器介紹 70
3.5.2 GDB 調試命令 71
3.6 Linux 編程庫 75
3.6.1 Linux 編程庫介紹 75
3.6.2 Linux 系統(tǒng)調用 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 內核解壓啟動 96
4.4.3 掛接根文件系統(tǒng) 98
4.5 應用程序的遠程交叉調試 99
4.5.1 交叉調試的模型 99
4.5.2 交叉調試程序實例 100
4.6 實例:FS4412 嵌入式開發(fā)環(huán)境搭建 102
4.6.1 開發(fā)主機安裝 102
4.6.2 聯(lián)調測試 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 源碼結構 126
5.3 U-Boot 源碼分析 127
5.3.1 配置編譯 127
5.3.2 U-Boot 啟動過程 132
5.3.3 U-Boot 與內核的關系 136
5.4 U-Boot 移植實例 138
5.4.1 收集移植相關資源 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 章 配置編譯內核 153
6.1 Linux 內核特點 154
6.1.1 Linux 內核版本介紹 154
6.1.2 Linux 內核特點 155
6.2 配置編譯內核源碼 156
6.2.1 內核源碼的下載方法和結構 157
6.2.2 內核配置系統(tǒng) 160
6.2.3 Kbuild Makefiles 167
6.2.4 內核編譯 178
6.2.5 內核編譯結果 185
6.3 內核配置選項 187
6.3.1 使用配置菜單 187
6.3.2 基本配置選項 189
6.3.3 驅動程序配置選項 191
6.4 習題 192
第7 章 內核移植基礎 193
7.1 移植內核源碼 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 內核啟動過程分析 206
7.3.1 內核啟動流程介紹 206
7.3.2 內核啟動加載程序 209
7.3.3 內核主體程序入口 215
7.3.4 Linux 系統(tǒng)初始化 218
7.3.5 初始化驅動模型 224
7.3.6 掛載根文件系統(tǒng) 225
7.4 習題 227
第8 章 內核移植實例 229
8.1 基本內核移植 230
8.2 網(wǎng)卡驅動移植 234
8.2.1 網(wǎng)卡原理圖分析 234
8.2.2 網(wǎng)卡驅動移植 235
8.2.3 以NFS 掛載根文件系統(tǒng) 237
8.3 SD/eMMC 驅動移植 238
8.4 USB 主機控制器驅動移植 240
8.5 LCD 驅動移植 244
8.6 習題 249
第9 章 內核調試技術 250
9.1 內核調試方法 251
9.1.1 內核調試介紹 251
9.1.2 學會分析內核源程序 252
9.1.3 調試方法介紹 252
9.2 內核打印函數(shù) 255
9.2.1 內核映像解壓前的串口輸出函數(shù) 255
9.2.2 內核映像解壓后的串口輸出函數(shù) 257
9.2.3 printk 258
9.3 獲取內核信息 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 內核源代碼調試 272
9.6 習題 275
第10 章 制作Linux 根文件系統(tǒng) 276
10.1 根文件系統(tǒng)目錄結構 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 添加共享庫文件和內核模塊 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 平臺的構建環(huán)境 313
11.5 編寫并運行Qt 測試程序 316
11.6 習題 320
參考文獻 322
附錄 習題答案 323