嵌入式 Linux 編程 嵌入式Linux编程

克裡斯·西蒙斯 (Chris Simmonds)

  • 出版商: 機械工業
  • 出版日期: 2017-04-01
  • 定價: $474
  • 售價: 8.5$403
  • 語言: 簡體中文
  • 頁數: 274
  • 裝訂: 平裝
  • ISBN: 7111561287
  • ISBN-13: 9787111561286
  • 相關分類: 嵌入式系統Linux

下單後立即進貨 (約4週~6週)

買這商品的人也買了...

相關主題

商品描述

本書引導你遍歷整個嵌入式linux產品的周期,並提供在每個階段可用組件和選項的深入描述。首先,你將學習關於工具鏈、引導加載程序、Linux內核,以及如何配置根文件系統。然後,你將學習如何使用兩個常用的構建系統,即Buildroot和Yocto項目,以加快和簡化開發過程。在這個堅實的基礎上,下麵的章節考慮如何佳地使用rawNAND/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庫132.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 用戶空間中的設備驅動程序15
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進行剖析 2 40
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 測量調度延遲 2