基本信息
作者:[英] 克里斯·西蒙茲(Chris Simmonds) 著 |
ISBN(書號):978-7-111-56128-6 |
叢書名:Linux/Unix技術叢書 |
出版日期:2017-04 |
版次:1/1 |
開本:16 |
定價:¥79.00 |
內容簡介
本書引導你遍歷整個嵌入式Linux產品的周期,並提供在每個階段可用組件和選項的深入描述。作者首先介紹工具鏈、引導載入程式、Linux核心和配置根檔案系統的相關知識,然後講解如何使用兩個最常用的構建系統,即Buildroot和Yocto項目,以加快和簡化開發過程,接著介紹如何充分使用raw NAND/NOR快閃記憶體和託管快閃記憶體eMMC晶片,包括增加器件壽命的機制以及進行可靠的現場更新,探討POSIX執行緒的使用,這對最終設備的回響能力和性能有著很大的影響。本書的結尾部分探討使用perf與Ftrace剖析和跟蹤應用程式以及核心代碼的技術。
圖書目錄
第1章 概述 1
1.1 選擇合適的作業系統 2
1.2 參與者 3
1.3 項目生命周期 4
1.4 開放源碼 5
1.5 嵌入式Linux系統硬體 6
1.6 本書使用的硬體 7
1.7 本書使用的軟體 9
1.8 總結 9
第2章 學習工具鏈 10
2.1 工具鏈是什麼 10
2.2 工具鏈類型:本地工具鏈和交叉工具鏈 11
2.3 選擇C庫 13
2.4 尋找工具鏈 14
2.5 工具鏈解析 17
2.6 工具鏈中的其他工具 20
2.7 查看C庫的組件 21
2.8 程式庫:靜態和動態連結 21
2.9 交叉編譯藝術 24
2.10 交叉編譯的問題 28
2.11 總結 29
第3章 引導載入程式 30
3.1 引導載入程式都做了些什麼 30
3.2 引導序列 31
3.3 使用UEFI固件引導 32
3.4 從引導載入程式到核心 33
3.5 設備樹介紹 34
3.6 選擇引導載入程式 38
3.7 U-Boot 39
3.8 Barebox 49
3.9 總結 51
第4章 移植與配置核心 52
4.1 核心做了什麼 52
4.2 選擇核心 53
4.3 核心構建 55
4.4 編譯 60
4.5 清理核心源 63
4.6 啟動你的核心 63
4.7 將Linux移植到新板上 66
4.8 延伸閱讀 69
4.9 總結 69
第5章 構建根檔案系統 71
5.1 根檔案系統是什麼 71
5.2 根檔案系統的程式 75
5.3 根檔案系統庫 78
5.4 設備節點 79
5.5 proc與sysfs檔案系統 80
5.6 核心模組 81
5.7 把根檔案系統轉移到目標 81
5.8 創建啟動記憶體磁碟 82
5.9 init程式 85
5.10 配置用戶賬號 86
5.11 啟動守護進程 87
5.12 管理設備節點的更好方法 88
5.13 配置網路 89
5.14 藉助設備表創建檔案系統映像 90
5.15 使用NFS掛載根檔案系統 92
5.16 使用TFTP載入核心 94
5.17 延伸閱讀 95
5.18 總結 95
第6章 選擇構建系統 96
6.1 不再手動創建嵌入式Linux 96
6.2 構建系統 96
6.3 包格式和包管理器 98
6.4 Buildroot 98
6.5 Yocto項目 104
6.6 延伸閱讀 116
6.7 總結 116
第7章 創建存儲策略 117
7.1 存儲器選擇 117
7.2 從引導載入程式訪問快閃記憶體 121
7.3 從Linux中訪問快閃記憶體 122
7.4 快閃記憶體檔案系統 127
7.5 NOR和NAND快閃記憶體的檔案系統 128
7.6 託管快閃記憶體的檔案系統 134
7.7 唯讀壓縮檔案系統 138
7.8 臨時檔案系統 138
7.9 使根檔案系統為唯讀 139
7.10 檔案系統選擇 140
7.11 現場更新 140
7.12 延伸閱讀 142
7.13 總結 143
第8章 設備驅動程式介紹 144
8.1 設備驅動程式的作用 144
8.2 字元設備 145
8.3 塊設備 147
8.4 網路設備 147
8.5 在運行時尋找驅動程式 149
8.6 找到正確的設備驅動程式 153
8.7 用戶空間中的設備驅動程式 153
8.8 編寫核心設備驅動程式 158
8.9 載入核心模組 163
8.10 查找硬體配置 163
8.11 延伸閱讀 166
8.12 總結 167
第9章 啟動初始化程式 168
9.1 在核心啟動後 168
9.2 初始化程式簡介 169
9.3 BusyBox init 169
9.4 System V init 171
9.5 systemd 176
9.6 延伸閱讀 181
9.7 總結 181
第10章 學習進程和執行緒 182
10.1 進程還是執行緒 182
10.2 進程 183
10.3 執行緒 191
10.4 調度 196
10.5 延伸閱讀 200
10.6 總結 200
第11章 記憶體管理 201
11.1 虛擬記憶體基礎 201
11.2 核心空間記憶體布局 202
11.3 用戶空間記憶體布局 205
11.4 進程記憶體映射 206
11.5 交換 207
11.6 用mmap映射記憶體 208
11.7 我的應用程式使用了多少記憶體 209
11.8 每個進程的記憶體使用情況 210
11.9 識別記憶體泄漏 213
11.10 記憶體耗盡 215
11.11 延伸閱讀 217
11.12 總結 217
第12章 使用GDB調試 218
12.1 GNU調試器:GDB 218
12.2 準備調試 218
12.3 使用GDB調試應用程式 219
12.4 使用gdbserver遠程調試 219
12.5 開始調試 221
12.6 調試共享庫 224
12.7 即時調試 225
12.8 調試分叉和執行緒 226
12.9 核心檔案 226
12.10 GDB用戶界面 228
12.11 調試核心代碼 230
12.12 延伸閱讀 237
12.13 總結 237
第13章 剖析和跟蹤 238
13.1 觀察者效應 238
13.2 開始剖析 239
13.3 使用top進行剖析 240
13.4 介紹perf 241
13.5 其他剖析器:OProf?ile和gprof 245
13.6 跟蹤事件 247
13.7 介紹Ftrace 247
13.8 使用LTTng 252
13.9 使用Valgrind剖析應用程式 256
13.10 Callgrind 256
13.11 Helgrind 256
13.12 使用strace顯示系統調用 257
13.13 總結 259
第14章 實時編程 260
14.1 什麼是實時性 260
14.2 確認非確定性的來源 262
14.3 理解調度延遲 263
14.4 核心搶占 263
14.5 實時Linux核心(PREEMPT_RT) 264
14.6 執行緒化中斷處理程式 264
14.7 可搶占的核心鎖 266
14.8 獲得PREEMPT_RT補丁 266
14.9 高精度定時器 267
14.10 在實時套用中避免頁面錯誤 268
14.11 中斷禁止 269
14.12 測量調度延遲 269
14.13 延伸閱讀 273
14.14 總結 273