目 錄
第1章 嵌入式Linux簡介 1
1.1 為何使用嵌入式Linux 2
1.1.1 使用嵌入式Linux的技術原因 2
1.1.2 商業上使用嵌入式Linux的原因 7
1.2 1萬英尺高空鳥瞰:略述嵌入式Linux開發 9
1.2.1 目標硬件 9
1.2.2 獲取Linux 9
1.2.3 啓動Linux 9
1.2.4 開發環境 10
1.2.5 係統設計 10
1.3 嵌入式Linux係統的組織結構 10
1.3.1 啓動裝載程序 11
1.3.2 內核 12
1.3.3 根文件係統 12
1.3.4 應用程序 13
1.3.5 交叉編譯器 13
1.3.6 工具 14
1.4 從何處獲得幫助 18
1.4.1 Google大學 18
1.4.2 郵件列錶和新聞組 18
1.4.3 廠商贊助的資源 19
1.4.4 行業組織和社區興趣網站 19
1.4.5 IRC 21
1.5 前瞻 21
第2章 配置軟件環境 22
2.1 宿主機環境 22
2.1.1 Linux 23
2.1.2 Windows 26
2.2 宿主機服務 36
2.2.1 關閉防火牆 36
2.2.2 TFTP 37
2.2.3 DHCP 38
2.2.4 NFS 39
2.2.5 PXE 42
2.3 連接綫纜 43
2.3.1 串行連接(用於控製颱) 43
2.3.2 網絡 43
2.4 避免IT管理人員惱火的拜訪 44
第3章 目標機仿真與虛擬機 46
3.1 為何仿真目標機 46
3.2 通過QEMU進行仿真 47
3.2.1 編譯QEMU 47
3.2.2 使用QEMU仿真目標機 48
3.2.3 使用QEMU在仿真模式下進行編譯 50
3.3 x86宿主機的虛擬化軟件 51
3.4 小結 52
第4章 開始你的項目 53
4.1 大多數目標闆包含瞭Linux發布版 54
4.2 打開目標闆包裝後需要做什麼 55
4.2.1 有Linux嗎?啓動它 55
4.2.2 訪問內核 61
4.2.3 理解根文件係統 64
4.3 根文件係統對項目的適用性 68
4.4 小結 70
第5章 獲取對應於目標闆的Linux 71
5.1 從目標闆廠商獲取Linux 72
5.1.1 應該詢問闆卡廠商的問題 72
5.1.2 現在你是一位顧客瞭 74
5.2 開源嵌入式Linux發布版 74
5.2.1 嵌入式Linux發布版構建工具存在的原因 75
5.2.2 應該使用某種發布版構建工具嗎 75
5.2.3 流行的開源嵌入式Linux發布版 76
5.3 從商業廠商和谘詢機構獲取Linux 87
5.3.1 你需要考慮商業性的Linux廠商嗎 87
5.3.2 預期廠商應提供什麼 88
5.3.3 廠商列錶 88
5.4 小結 90
第6章 從頭開始創建Linux發布版 91
6.1 交叉編譯器基礎 92
6.1.1 聯編軟件時需要注意的情況 93
6.1.2 習慣命令行 94
6.2 聯編GCC交叉編譯器概述 94
6.2.1 C庫 95
6.2.2 收集源代碼 95
6.2.3 聯編GCC 99
6.3 用crosstool-NG聯編工具鏈 109
6.4 創建根文件係統 111
6.4.1 配置環境 111
6.4.2 聯編和安裝BusyBox 111
6.4.3 庫 112
6.4.4 創建設備結點和目錄 113
6.4.5 最後修整 113
6.4.6 聯編內核 114
6.4.7 解決啓動問題 117
6.5 發布發布版 118
6.6 小結 119
第7章 啓動目標闆 120
7.1 啓動Linux係統是一部三幕劇 120
7.1.1 啓動裝載程序 120
7.1.2 內核層與用戶層 123
7.2 啓動裝載程序 123
7.3 內核啓動 129
7.3.1 內核入口點 130
7.3.2 用戶層啓動 135
7.3.3 BusyBox Init 138
7.3.4 用戶自定義init 139
7.4 前瞻 140
第8章 配置應用開發環境 141
8.1 選擇完成工作的正確工具 141
8.2 瞭解要開發的應用程序 141
8.3 使用何種開發工具 143
8.3.1 C語言 144
8.3.2 C++ 144
8.3.3 Java 145
8.4 非傳統嵌入式語言 146
8.4.1 Python 147
8.4.2 TCL 148
8.4.3 Shell腳本 149
8.4.4 PHP 150
8.5 性能和性能剖析工具 151
8.5.1 性能剖析 151
8.5.2 內存泄漏檢測 154
8.5.3 靜態分析 156
8.6 IDE 157
8.6.1 編輯器 + make + shell 157
8.6.2 Eclipse 159
8.7 前瞻 163
第9章 應用開發 164
9.1 開始開發應用程序 164
9.2 桌麵係統和目標機 164
9.2.1 針對可移植性編寫代碼 165
9.2.2 係統差彆 166
9.3 Hello World 167
9.3.1 獲取工具 167
9.3.2 使make工作 168
9.3.3 在目標機上運行代碼 171
9.3.4 更復雜的項目 172
9.4 準備好調試 176
9.5 前瞻 178
第10章 調試應用程序 179
10.1 開始開發應用程序 179
10.2 調試的種類 179
10.3 遠程調試概述 180
10.4 調試C和C++ 180
10.4.1 聯編GDB 181
10.4.2 GDB前端 182
10.4.3 針對調試進行編譯 182
10.5 調試Java 190
10.6 測量 193
10.6.1 Java測量 195
10.6.2 腳本語言中的測量 196
10.7 前瞻 196
第11章 內核配置和開發 197
11.1 內核項目布局 197
11.2 聯編內核 200
11.2.1 內核配置程序的工作方式 202
11.2.2 默認配置 203
11.2.3 手工編輯.config文件 204
11.2.4 聯編內核 205
11.2.5 聯編模塊 207
11.2.6 清理 208
11.3 開源社區 209
11.3.1 內核開發過程 209
11.3.2 嚮Linux內核貢獻代碼 209
11.3.3 應用補丁 211
11.4 前瞻 211
第12章 實時 212
12.1 Linux中的實時實現 215
12.2 實時程序設計慣例 218
12.2.1 僅一個實時進程 218
12.2.2 鎖定內存 218
12.2.3 避免使用堆 219
12.2.4 需要繼承優先級的互斥量 219
12.2.5 I/O是非確定的 220
12.2.6 使用綫程池 220
12.2.7 LatencyTOP 221
12.3 常見的硬件缺陷 223
12.3.1 係統管理中斷 224
12.3.2 VGA控製颱 224
12.3.3 DMA總綫獨占 224
12.4 小結 224
第13章 使用開源軟件項目 225
13.1 使用開源軟件包 225
13.1.1 開源項目的結構 226
13.1.2 項目團隊並非你的員工 226
13.1.3 理解許可證 227
13.1.4 下載 228
13.1.5 使用源代碼控製係統取得代碼 229
13.1.6 交叉編譯 232
13.1.7 使用configure 233
13.1.8 聯編和安裝 237
13.2 常用項目 238
13.2.1 DirectFB 238
13.2.2 Dropbear 238
13.2.3 QT/Qtopia 238
13.2.4 JamVM 238
13.2.5 Rzsz 239
13.2.6 Netcat 239
13.2.7 TinyXML 239
13.2.8 Micro_httpd 239
13.2.9 Stupid-FTPd 240
13.2.10 Quagga 240
13.2.11 tslib 240
13.2.12 fgetty 240
第14章 BusyBox 241
14.1 基於BusyBox的係統的組織方式 241
14.2 構建基於BusyBox的係統 242
14.2.1 下載軟件 242
14.2.2 配置 243
14.3 BusyBox為什麼這樣小 248
14.4 創建自己的小應用程序 249
14.5 獲得幫助 253
14.6 前瞻 253
第15章 係統設計 254
15.1 整體圖景 254
15.2 配置啓動裝載程序和內核 255
15.2.1 U-Boot 255
15.2.2 其他啓動裝載程序 257
15.2.3 就地執行 257
15.3 選擇根文件係統 258
15.3.1 基於塊的文件係統 258
15.3.2 MTD文件係統 261
15.3.3 基於內存緩衝區的文件係統 262
15.3.4 文件係統的組閤 263
15.4 組裝根文件係統 263
15.4.1 創建中間整備區域 264
15.4.2 創建目錄框架 264
15.4.3 收集庫和其他必需的文件 264
15.4.4 創建初始化腳本 266
15.4.5 設置所有權和權限 269
15.5 安全 270
15.5.1 內建的安全機製 271
15.5.2 SELinux 271
15.5.3 PAM 274
15.6 前瞻 276
第16章 係統微調 277
16.1 減小根文件係統的大小 279
16.1.1 從零開始 279
16.1.2 為節省空間而編譯 281
16.2 減小內核的大小 284
16.3 最小化啓動時間 289
16.3.1 減少內核啓動時間 289
16.3.2 測量內核啓動時間 291
16.3.3 縮減根文件係統的啓動時間 294
16.4 前瞻 298
第17章 部署應用程序 299
17.1 嵌入式設備的部署 299
17.1.1 需求 300
17.1.2 工業設計 300
17.1.3 機械設計 301
17.1.4 電氣工程 302
17.1.5 製造工程 302
17.1.6 軟件設計 303
17.1.7 軟件工程 303
17.1.8 製造 304
17.2 部署策略和戰術 305
17.3 啓動裝載程序 306
17.3.1 一般概念 306
17.3.2 UBOOT:配置初始參數 307
17.3.3 expect 308
17.3.4 啓動裝載程序隻是程序 310
17.4 部署根文件係統 312
17.4.1 應用程序文件和庫 312
17.4.2 在工廠進行的第一次現場更新 314
17.5 前瞻 314
第18章 處理現場更新 315
18.1 根文件係統更新 315
18.1.1 基本策略 315
18.1.2 完全更新 316
18.1.3 並行係統 319
18.1.4 自己動手 320
18.1.5 使用包管理器 321
18.1.6 initramfs根文件係統 330
18.2 內核更新 331
18.2.1 基本策略 331
18.2.2 模塊 332
18.2.3 完全更新 334
18.3 現場更新故障 334
18.3.1 報告失敗,停下 335
18.3.2 故障安全的根文件係統 335
18.3.3 故障安全的內核 335
18.4 綜述 336
· · · · · · (
收起)