日韩精品 中文字幕 动漫,91亚洲午夜一区,在线不卡日本v一区v二区丶,久久九九国产精品自在现拍

注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學(xué)技術(shù)計算機/網(wǎng)絡(luò)操作系統(tǒng)精通嵌入式Linux編程

精通嵌入式Linux編程

精通嵌入式Linux編程

定 價:¥159.00

作 者: [美]弗蘭克·瓦斯奎茲 等著,陳會翔 譯
出版社: 清華大學(xué)出版社
叢編項:
標 簽: 暫缺

購買這本書可以去


ISBN: 9787302635635 出版時間: 2023-06-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字數(shù):  

內(nèi)容簡介

  《精通嵌入式Linux編程》詳細闡述了與嵌入式Linux開發(fā)相關(guān)的基本解決方案,主要包括初識嵌入式Linux開發(fā)、關(guān)于工具鏈、引導(dǎo)加載程序詳解、配置和構(gòu)建內(nèi)核、構(gòu)建根文件系統(tǒng)、選擇構(gòu)建系統(tǒng)、使用Yocto進行開發(fā)、Yocto技術(shù)內(nèi)幕、創(chuàng)建存儲策略、現(xiàn)場更新軟件、連接設(shè)備驅(qū)動程序、使用分線板進行原型設(shè)計、init程序、使用BusyBox runit啟動、管理電源、打包Python程序、了解進程和線程、管理內(nèi)存、使用GDB進行調(diào)試、性能分析和跟蹤、實時編程等內(nèi)容。此外,本書還提供了相應(yīng)的示例、代碼,以幫助讀者進一步理解相關(guān)方案的實現(xiàn)過程。 本書適合作為高等院校計算機及相關(guān)專業(yè)的教材和教學(xué)參考書,也可作為相關(guān)開發(fā)人員的自學(xué)用書和參考手冊。

作者簡介

  弗蘭克·瓦斯奎茲是一位專注于消費電子產(chǎn)品的獨立軟件顧問。他在設(shè)計和構(gòu)建嵌入式Linux系統(tǒng)方面擁有十多年的經(jīng)驗。在此期間,他完成了許多設(shè)備的開發(fā),包括機架式DSP音頻服務(wù)器、潛水員手持式聲納攝像機和消費者物聯(lián)網(wǎng)熱點。在成為嵌入式Linux開發(fā)工程師之前,F(xiàn)rank曾經(jīng)是IBM的數(shù)據(jù)庫內(nèi)核開發(fā)人員,他在該公司主要從事DB2方面的工作。他目前住在硅谷。

圖書目錄

第1篇  嵌入式Linux的要素
第1章  初識嵌入式Linux開發(fā) 3
1.1  選擇Linux的原因 4
1.2  不選擇Linux的原因 5
1.3  找到合適的玩家 5
1.4  穿越項目生命周期 7
1.4.1  篇章內(nèi)容概述 7
1.4.2  嵌入式Linux的4個基本要素 7
1.5  開源的意義 8
1.5.1  開源和免費有區(qū)別 8
1.5.2  開源許可機制 8
1.6  為嵌入式Linux開發(fā)選擇硬件 10
1.7  獲取本書所需硬件 11
1.7.1  Raspberry Pi 4 11
1.7.2  BeagleBone Black 12
1.7.3  QEMU 13
1.8  配置開發(fā)環(huán)境 15
1.9  小結(jié) 15
第2章  關(guān)于工具鏈 17
2.1  技術(shù)要求 17
2.2  工具鏈簡介 18
2.2.1  工具鏈的類型 20
2.2.2  CPU架構(gòu) 21
2.2.3  選擇C庫 22
2.3  尋找工具鏈 24
2.4  使用crosstool-NG構(gòu)建工具鏈 26
2.4.1  安裝crosstool-NG 26
2.4.2  為BeagleBone Black構(gòu)建工具鏈 27
2.4.3  為QEMU構(gòu)建工具鏈 28
2.5  工具鏈剖析 29
2.5.1  了解你的交叉編譯器 30
2.5.2  sysroot、庫和頭文件 31
2.5.3  工具鏈中的其他工具 32
2.5.4  查看C庫的組件 33
2.6  與庫鏈接—靜態(tài)和動態(tài)鏈接 34
2.6.1  靜態(tài)庫 34
2.6.2  共享庫 35
2.6.3  了解共享庫版本號 36
2.7  交叉編譯的技巧 37
2.7.1  相對簡單的makefile 38
2.7.2  Autotools 38
2.7.3  編譯示例—SQLite 40
2.7.4  包配置 42
2.7.5  交叉編譯帶來的問題 43
2.7.6  CMake 44
2.8  小結(jié) 46
2.9  延伸閱讀 46
第3章  引導(dǎo)加載程序詳解 47
3.1  技術(shù)要求 47
3.2  引導(dǎo)加載程序的作用 48
3.3  引導(dǎo)順序 48
3.3.1  階段1—ROM代碼 49
3.3.2  階段2—SPL 51
3.3.3  階段3—TPL 52
3.4  從引導(dǎo)加載程序轉(zhuǎn)移到內(nèi)核中 53
3.5  設(shè)備樹簡介 54
3.5.1  有關(guān)設(shè)備樹的基礎(chǔ)知識 54
3.5.2  reg屬性 55
3.5.3  標簽和中斷 56
3.5.4  設(shè)備樹包含文件 57
3.5.5  編譯設(shè)備樹 59
3.6  U-Boot 60
3.6.1  構(gòu)建U-Boot 60
3.6.2  安裝U-Boot 62
3.6.3  使用U-Boot 64
3.6.4  環(huán)境變量 65
3.6.5  引導(dǎo)鏡像格式 65
3.6.6  加載鏡像 67
3.6.7  引導(dǎo)Linux 69
3.6.8  使用U-Boot腳本自動化引導(dǎo)過程 69
3.6.9  將U-Boot移植到新板上 69
3.6.10  與特定開發(fā)板相關(guān)的文件 71
3.6.11  配置頭文件 73
3.6.12  構(gòu)建和測試 74
3.6.13  Falcon模式 75
3.7  小結(jié) 76
第4章  配置和構(gòu)建內(nèi)核 77
4.1  技術(shù)要求 77
4.2  內(nèi)核的作用 78
4.3  選擇內(nèi)核 80
4.3.1  內(nèi)核開發(fā)周期 80
4.3.2  穩(wěn)定和長期支持版本 81
4.3.3  供應(yīng)商支持 82
4.3.4  許可機制 82
4.4  構(gòu)建內(nèi)核 83
4.4.1  獲取源 83
4.4.2  了解內(nèi)核配置—Kconfig 84
4.4.3  使用LOCALVERSION識別內(nèi)核 88
4.4.4  使用內(nèi)核模塊的時機 89
4.5  編譯—Kbuild 90
4.5.1  找出要構(gòu)建的內(nèi)核目標 90
4.5.2  構(gòu)建工件 91
4.5.3  編譯設(shè)備樹 93
4.5.4  編譯模塊 93
4.5.5  清理內(nèi)核源 94
4.5.6  為Raspberry Pi 4構(gòu)建64位內(nèi)核 94
4.5.7  為BeagleBone Black構(gòu)建內(nèi)核 96
4.5.8  為QEMU構(gòu)建內(nèi)核 97
4.6  引導(dǎo)內(nèi)核 97
4.6.1  引導(dǎo)Raspberry Pi 4 97
4.6.2  引導(dǎo)BeagleBone Black 98
4.6.3  引導(dǎo)QEMU 99
4.6.4  內(nèi)核恐慌 100
4.6.5  早期用戶空間 100
4.6.6  內(nèi)核消息 101
4.6.7  內(nèi)核命令行 101
4.7  將Linux移植到新板上 102
4.7.1  新的設(shè)備樹 103
4.7.2  設(shè)置開發(fā)板的兼容屬性 104
4.8  小結(jié) 106
4.9  延伸閱讀 107
第5章  構(gòu)建根文件系統(tǒng) 109
5.1  技術(shù)要求 110
5.2  根文件系統(tǒng)中應(yīng)該包含的東西 110
5.3  目錄布局 111
5.3.1  暫存目錄 112
5.3.2  POSIX文件訪問權(quán)限 113
5.3.3  暫存目錄中的文件所有權(quán)權(quán)限 115
5.4  根文件系統(tǒng)的程序 115
5.4.1  init程序 115
5.4.2  shell 115
5.4.3  實用程序 116
5.4.4  關(guān)于BusyBox 116
5.4.5  構(gòu)建BusyBox 117
5.4.6  ToyBox—BusyBox的替代品 118
5.5  根文件系統(tǒng)的庫 119
5.5.1  選擇需要的庫 119
5.5.2  通過剝離減小尺寸 120
5.6  設(shè)備節(jié)點 121
5.7  proc和sysfs文件系統(tǒng) 122
5.7.1  proc和sysfs文件系統(tǒng)的功能 123
5.7.2  掛載文件系統(tǒng) 123
5.7.3  內(nèi)核模塊 124
5.8  將根文件系統(tǒng)傳輸?shù)侥繕?124
5.9  創(chuàng)建引導(dǎo)initramfs 125
5.9.1  獨立的initramfs 126
5.9.2  引導(dǎo)initramfs 126
5.9.3  使用QEMU引導(dǎo) 126
5.9.4  引導(dǎo)BeagleBone Black 127
5.9.5  掛載proc 127
5.9.6  將initramfs構(gòu)建到內(nèi)核鏡像中 128
5.9.7  使用設(shè)備表構(gòu)建initramfs 129
5.9.8  舊的initrd格式 130
5.10  init程序 130
5.10.1  BusyBox的init程序 131
5.10.2  啟動守護進程 132
5.11  配置用戶賬戶 132
5.11.1  配置賬戶 132
5.11.2  將用戶賬戶添加到根文件系統(tǒng)中 134
5.12  管理設(shè)備節(jié)點的更好方法 134
5.12.1  使用devtmpfs的示例 135
5.12.2  使用mdev的示例 135
5.12.3  靜態(tài)設(shè)備節(jié)點的優(yōu)劣 136
5.13  配置網(wǎng)絡(luò) 136
5.13.1  BusyBox中的網(wǎng)絡(luò)配置 136
5.13.2  glibc的網(wǎng)絡(luò)組件 137
5.14  使用設(shè)備表創(chuàng)建文件系統(tǒng)鏡像 138
5.14.1  安裝和使用genext2fs工具 138
5.14.2  引導(dǎo)BeagleBone Black 139
5.15  使用NFS掛載根文件系統(tǒng) 140
5.15.1  使用QEMU進行測試 141
5.15.2  使用BeagleBone Black進行測試 142
5.15.3  文件權(quán)限問題 142
5.16  使用TFTP加載內(nèi)核 143
5.17  小結(jié) 144
5.18  延伸閱讀 144
第6章  選擇構(gòu)建系統(tǒng) 145
6.1  技術(shù)要求 145
6.2  比較構(gòu)建系統(tǒng) 146
6.3  分發(fā)二進制文件 148
6.4  Buildroot簡介 148
6.4.1  Buildroot的背景知識 149
6.4.2  穩(wěn)定版本和長期支持版本 149
6.4.3  安裝Buildroot 149
6.4.4  配置Buildroot 150
6.4.5  運行 151
6.4.6  以真實硬件為目標 153
6.4.7  創(chuàng)建自定義BSP 154
6.4.8  U-Boot配置 154
6.4.9  Linux配置 155
6.4.10  構(gòu)建系統(tǒng)鏡像 157
6.4.11  添加自己的代碼 159
6.4.12  覆蓋層 160
6.4.13  添加包 160
6.4.14  許可合規(guī)性 162
6.5  Yocto Project簡介 162
6.5.1  Yocto Project的背景知識 163
6.5.2  穩(wěn)定版本和支持 164
6.5.3  安裝Yocto Project 165
6.5.4  配置 165
6.5.5  構(gòu)建 166
6.5.6  運行QEMU目標 167
6.5.7  元層 167
6.5.8  BitBake和配方 170
6.5.9  通過local.conf自定義鏡像 172
6.5.10  編寫鏡像配方 173
6.5.11  創(chuàng)建SDK 174
6.5.12  許可證審核 176
6.6  小結(jié) 176
6.7  延伸閱讀 177
第7章  使用Yocto進行開發(fā) 179
7.1  技術(shù)要求 179
7.2  在現(xiàn)有BSP之上構(gòu)建鏡像 180
7.2.1  構(gòu)建現(xiàn)有的BSP 180
7.2.2  控制Wi-Fi 186
7.2.3  控制藍牙 189
7.2.4  添加自定義層 192
7.3  使用devtool捕獲更改 195
7.3.1  開發(fā)工作流程 195
7.3.2  創(chuàng)建新配方 197
7.3.3  修改由配方構(gòu)建的源 198
7.3.4  將配方升級到較新版本 200
7.4  構(gòu)建自己的發(fā)行版 203
7.4.1  推出發(fā)行版的合適時機 203
7.4.2  創(chuàng)建一個新的發(fā)行層 203
7.4.3  配置發(fā)行版 204
7.4.4  向發(fā)行版添加更多配方 205
7.4.5  運行時包管理 205
7.5  配置遠程包服務(wù)器 207
7.5.1  配置包服務(wù)器 207
7.5.2  配置目標客戶端 208
7.6  小結(jié) 209
7.7  延伸閱讀 209
第8章  Yocto技術(shù)內(nèi)幕 211
8.1  技術(shù)要求 211
8.2  Yocto架構(gòu)和工作流程分解 212
8.2.1  元數(shù)據(jù) 214
8.2.2  構(gòu)建任務(wù) 215
8.2.3  鏡像生成 217
8.3  將元數(shù)據(jù)分層 218
8.4  構(gòu)建失敗故障排除 220
8.4.1  隔離錯誤 220
8.4.2  檢查和轉(zhuǎn)儲環(huán)境值 221
8.4.3  讀取任務(wù)日志 222
8.4.4  添加更多日志記錄 222
8.4.5  從devshell中運行命令 223
8.4.6  查看包的依賴關(guān)系 224
8.5  了解BitBake語法和語義 225
8.5.1  任務(wù) 225
8.5.2  依賴項 226
8.5.3  任務(wù)間依賴項 226
8.5.4  構(gòu)建時依賴項 226
8.5.5  運行時依賴項 227
8.5.6  變量 228
8.5.7  賦值和擴展 228
8.5.8  附加和前置 229
8.5.9  覆蓋 229
8.5.10  內(nèi)聯(lián)Python 230
8.5.11  函數(shù) 231
8.5.12  shell 231
8.5.13  Python 231
8.5.14  純Python函數(shù) 232
8.5.15  BitBake風格的Python函數(shù) 232
8.5.16  匿名Python函數(shù) 233
8.5.17  RDEPENDS 234
8.6  小結(jié) 235
8.7  延伸閱讀 235
第2篇  系統(tǒng)架構(gòu)和設(shè)計決策
第9章  創(chuàng)建存儲策略 239
9.1  技術(shù)要求 239
9.2  存儲選項 240
9.2.1  NOR閃存 241
9.2.2  NAND閃存 241
9.2.3  托管閃存 243
9.2.4  多媒體卡和安全數(shù)字卡 244
9.2.5  eMMC 245
9.2.6  其他類型的托管閃存 245
9.3  從引導(dǎo)加載程序中訪問閃存 245
9.3.1  U-Boot和NOR閃存 246
9.3.2  U-Boot和NAND閃存 246
9.3.3  U-Boot和MMC、SD和eMMC 246
9.4  從Linux中訪問閃存 247
9.4.1  內(nèi)存技術(shù)設(shè)備子系統(tǒng) 247
9.4.2  MTD分區(qū) 248
9.4.3  MTD設(shè)備驅(qū)動程序 251
9.4.4  MTD字符設(shè)備 251
9.4.5  MTD塊設(shè)備mtdblock 252
9.4.6  將內(nèi)核錯誤記錄到MTD上 253
9.4.7  模擬NAND存儲器 253
9.4.8  MMC塊驅(qū)動程序 253
9.5  閃存文件系統(tǒng) 254
9.5.1  閃存轉(zhuǎn)換層的特點 254
9.5.2  閃存轉(zhuǎn)換層的部署方式 255
9.6  NOR和NAND閃存的文件系統(tǒng) 255
9.6.1  JFFS2 256
9.6.2  摘要節(jié)點 257
9.6.3  干凈標記 257
9.6.4  創(chuàng)建JFFS2文件系統(tǒng) 257
9.6.5  YAFFS2 258
9.6.6  創(chuàng)建YAFFS2文件系統(tǒng) 259
9.6.7  UBI和UBIFS 260
9.6.8  UBI 260
9.6.9  UBIFS 263
9.7  托管閃存的文件系統(tǒng) 264
9.7.1  Flashbench 265
9.7.2  丟棄和修剪 266
9.7.3  Ext4 267
9.7.4  F2FS 268
9.7.5  FAT16/32 268
9.8  只讀壓縮文件系統(tǒng) 269
9.8.1  SquashFS 269
9.8.2  在NAND閃存上使用SquashFS 269
9.9  臨時文件系統(tǒng) 270
9.10  將根文件系統(tǒng)設(shè)為只讀 271
9.11  文件系統(tǒng)選擇 272
9.12  小結(jié) 273
9.13  延伸閱讀 273
第10章  現(xiàn)場更新軟件 275
10.1  技術(shù)要求 275
10.2  啟動更新的方法 276
10.3  更新的內(nèi)容 276
10.3.1  引導(dǎo)加載程序 277
10.3.2  內(nèi)核 277
10.3.3  根文件系統(tǒng) 278
10.3.4  系統(tǒng)應(yīng)用程序 278
10.3.5  與特定設(shè)備相關(guān)的數(shù)據(jù) 278
10.3.6  需要更新的組件 279
10.4  有關(guān)軟件更新的基礎(chǔ)知識 279
10.4.1  使更新穩(wěn)定可靠 279
10.4.2  使更新不受故障影響 280
10.4.3  確保更新安全 282
10.5  更新機制的類型 283
10.5.1  對稱鏡像更新 283
10.5.2  非對稱鏡像更新 285
10.5.3  原子文件更新 286
10.6  OTA更新 288
10.7  使用Mender進行本地更新 288
10.7.1  構(gòu)建Mender客戶端 289
10.7.2  安裝更新 291
10.8  使用Mender進行OTA更新 294
10.8.1  設(shè)置更新服務(wù)器 294
10.8.2  上傳工件 297
10.8.3  部署更新 299
10.9  使用balena進行本地更新 301
10.9.1  創(chuàng)建一個賬戶 302
10.9.2  創(chuàng)建應(yīng)用程序 303
10.9.3  添加設(shè)備 304
10.9.4  啟用本地模式 306
10.9.5  安裝CLI 307
10.9.6  推送一個項目 309
10.9.7  修改和更新項目 310
10.10  小結(jié) 311
第11章  連接設(shè)備驅(qū)動程序 313
11.1  技術(shù)要求 313
11.2  設(shè)備驅(qū)動程序的作用 314
11.3  字符設(shè)備 315
11.4  塊設(shè)備 317
11.5  網(wǎng)絡(luò)設(shè)備 318
11.6  在運行時查找驅(qū)動程序 320
11.6.1  從sysfs中獲取信息 322
11.6.2  設(shè)備 322
11.6.3  驅(qū)動程序 323
11.6.4  塊驅(qū)動程序 324
11.7  尋找合適的設(shè)備驅(qū)動程序 325
11.8  用戶空間中的設(shè)備驅(qū)動程序 325
11.8.1  通用輸入/輸出接口 326
11.8.2  處理來自GPIO的中斷 327
11.8.3  LED 329
11.8.4  I2C 330
11.8.5  SPI 332
11.9  編寫內(nèi)核設(shè)備驅(qū)動程序 333
11.9.1  設(shè)計字符設(shè)備驅(qū)動程序接口 333
11.9.2  對于設(shè)備驅(qū)動程序的剖析 335
11.9.3  編譯內(nèi)核模塊 338
11.9.4  加載內(nèi)核模塊 339
11.10  發(fā)現(xiàn)硬件配置 339
11.10.1  設(shè)備樹 340
11.10.2  平臺數(shù)據(jù) 340
11.10.3  將硬件與設(shè)備驅(qū)動程序鏈接在一起 341
11.11  小結(jié) 343
11.12  延伸閱讀 344
第12章  使用分線板進行原型設(shè)計 345
12.1  技術(shù)要求 345
12.2  將原理圖映射到設(shè)備樹的源中 346
12.2.1  閱讀原理圖和數(shù)據(jù)表 347
12.2.2  在BeagleBone Black上安裝Debian 352
12.2.3  啟用spidev 353
12.2.4  自定義設(shè)備樹 359
12.3  使用分線板進行原型設(shè)計 367
12.3.1  閉合SPI跳線 368
12.3.2  安裝GNSS天線 370
12.3.3  附加SPI接頭 370
12.3.4  連接SPI跳線 371
12.4  使用邏輯分析儀探測SPI信號 375
12.4.1  連接邏輯分析儀 376
12.4.2  配置Logic 8 377
12.5  通過SPI接收NMEA消息 383
12.6  小結(jié) 387
12.7  延伸閱讀 387
第13章  init程序 389
13.1  技術(shù)要求 389
13.2  內(nèi)核引導(dǎo)后的操作 390
13.3  init程序簡介 391
13.4  BusyBox init 392
13.4.1  BusyBox init解析 392
13.4.2  Buildroot init腳本 393
13.5  System V init 393
13.5.1  inittab 395
13.5.2  init.d腳本 397
13.5.3  添加新的守護進程 398
13.5.4  啟動和停止服務(wù) 399
13.6  systemd 400
13.6.1  使用Yocto Project和Buildroot構(gòu)建systemd 400
13.6.2  關(guān)于目標、服務(wù)和單元 401
13.6.3  單元 401
13.6.4  服務(wù) 402
13.6.5  目標 402
13.6.6  systemd引導(dǎo)系統(tǒng)的方式 403
13.6.7  添加自己的服務(wù) 404
13.6.8  添加看門狗 405
13.6.9  對嵌入式Linux的影響 406
13.7  小結(jié) 406
13.8  延伸閱讀 407
第14章  使用BusyBox runit啟動 409
14.1  技術(shù)要求 409
14.2  獲取BusyBox runit 410
14.3  創(chuàng)建服務(wù)目錄和文件 416
14.3.1  服務(wù)目錄布局 417
14.3.2  服務(wù)配置 418
14.4  服務(wù)監(jiān)督 425
14.4.1  runsv腳本運行的服務(wù) 425
14.4.2  控制服務(wù) 427
14.5  服務(wù)依賴 429
14.5.1  啟動依賴項 429
14.5.2  自定義啟動依賴項 431
14.5.3  簡單總結(jié) 431
14.6  專用服務(wù)日志記錄 432
14.6.1  專用日志記錄器的工作方式 432
14.6.2  向服務(wù)中添加專用日志記錄 433
14.6.3  日志輪轉(zhuǎn) 434
14.7  發(fā)出服務(wù)信號 435
14.8  小結(jié) 436
14.9  延伸閱讀 437
第15章  管理電源 439
15.1  技術(shù)要求 439
15.2  測量用電量 440
15.3  調(diào)整時鐘頻率 443
15.3.1  CPUFreq驅(qū)動程序 444
15.3.2  使用CPUFreq 446
15.4  選擇最佳空閑狀態(tài) 448
15.4.1  CPUIdle驅(qū)動程序 449
15.4.2  無滴答操作 452
15.5  關(guān)閉外圍設(shè)備 452
15.6  使系統(tǒng)進入休眠狀態(tài) 454
15.6.1  電源狀態(tài) 454
15.6.2  喚醒事件 455
15.6.3  從實時時鐘定時喚醒 456
15.7  小結(jié) 458
15.8  延伸閱讀 458
第3篇  編寫嵌入式應(yīng)用程序
第16章  打包Python程序 461
16.1  技術(shù)要求 461
16.1.1  安裝venv 462
16.1.2  安裝Docker 462
16.2  追溯Python打包的起源 463
16.2.1  distutils 463
16.2.2  setuptools 463
16.2.3  setup.py 464
16.3  使用pip安裝Python包 466
16.3.1  pip和pip3 466
16.3.2  requirements.txt 469
16.4  使用venv管理Python虛擬環(huán)境 471
16.4.1  venv 472
16.4.2  創(chuàng)建虛擬環(huán)境 473
16.4.3  激活和驗證虛擬環(huán)境 473
16.4.4  在虛擬環(huán)境中安裝測試庫 474
16.5  使用conda安裝預(yù)編譯的二進制文件 475
16.5.1  環(huán)境管理 475
16.5.2  驗證根環(huán)境 476
16.5.3  創(chuàng)建conda環(huán)境 477
16.5.4  包管理 478
16.5.5  導(dǎo)出虛擬環(huán)境 479
16.6  使用Docker部署Python應(yīng)用程序 480
16.6.1  Dockerfile解析 481
16.6.2  構(gòu)建Docker鏡像 483
16.6.3  運行Docker鏡像 484
16.6.4  提取Docker鏡像 485
16.6.5  發(fā)布Docker鏡像 485
16.6.6  刪除Docker容器 486
16.6.7  刪除Docker鏡像 487
16.6.8  Docker應(yīng)用總結(jié) 487
16.7  小結(jié) 488
16.8  延伸閱讀 488
第17章  了解進程和線程 489
17.1  技術(shù)要求 489
17.2  進程和線程的抉擇 490
17.3  進程 492
17.3.1  創(chuàng)建新進程 492
17.3.2  終止進程 493
17.3.3  運行不同的程序 494
17.3.4  守護進程 497
17.3.5  進程間通信 497
17.3.6  基于消息的IPC 498
17.3.7  UNIX套接字 498
17.3.8  FIFO和命名管道 499
17.3.9  POSIX消息隊列 499
17.3.10  基于消息的IPC總結(jié) 499
17.3.11  基于共享內(nèi)存的IPC 500
17.3.12  POSIX共享內(nèi)存 500
17.4  線程 503
17.4.1  創(chuàng)建一個新線程 503
17.4.2  終止線程 505
17.4.3  用線程編譯程序 505
17.4.4  線程間通信 505
17.4.5  互斥鎖 506
17.4.6  不斷變化的條件 506
17.4.7  進程和線程應(yīng)用規(guī)則 508
17.5  ZeroMQ 509
17.5.1  獲取pyzmq 510
17.5.2  進程之間的消息傳遞 510
17.5.3  進程內(nèi)的消息傳遞 512
17.6  調(diào)度 514
17.6.1  公平與確定性 514
17.6.2  分時策略 515
17.6.3  nice值 516
17.6.4  實時策略 516
17.6.5  選擇策略 517
17.6.6  選擇實時優(yōu)先級 518
17.7  小結(jié) 518
17.8  延伸閱讀 518
第18章  管理內(nèi)存 521
18.1  技術(shù)要求 521
18.2  虛擬內(nèi)存基礎(chǔ)知識 522
18.3  內(nèi)核空間內(nèi)存布局 523
18.3.1  內(nèi)核日志消息分析 523
18.3.2  內(nèi)核的內(nèi)存使用情況 524
18.4  用戶空間內(nèi)存布局 526
18.5  進程內(nèi)存映射 528
18.6  交換 529
18.6.1  交換的利弊 529
18.6.2  交換到壓縮內(nèi)存 530
18.7  使用mmap映射內(nèi)存 530
18.7.1  使用mmap分配私有內(nèi)存 531
18.7.2  使用mmap共享內(nèi)存 531
18.7.3  使用mmap訪問設(shè)備內(nèi)存 532
18.8  應(yīng)用程序的內(nèi)存使用情況 532
18.9  每個進程的內(nèi)存使用情況 533
18.9.1  使用top和ps 534
18.9.2  使用smem 534
18.9.3  其他工具 536
18.10  識別內(nèi)存泄漏 537
18.10.1  mtrace 537
18.10.2  Valgrind 538
18.11  內(nèi)存不足 540
18.12  小結(jié) 541
18.13  延伸閱讀 542
第4篇  調(diào)試和優(yōu)化性能
第19章  使用GDB進行調(diào)試 545
19.1  技術(shù)要求 545
19.2  GNU調(diào)試器 546
19.3  準備調(diào)試 547
19.4  調(diào)試應(yīng)用程序 547
19.4.1  使用gdbserver進行遠程調(diào)試 548
19.4.2  設(shè)置Yocto Project以進行遠程調(diào)試 549
19.4.3  為遠程調(diào)試設(shè)置Buildroot 550
19.5  啟動調(diào)試 550
19.5.1  連接GDB和gdbserver 550
19.5.2  設(shè)置sysroot 551
19.5.3  GDB命令文件 553
19.5.4  GDB命令概述 554
19.5.5  運行到斷點 555
19.5.6  用Python擴展GDB 556
19.5.7  構(gòu)建包含Python支持的GDB 556
19.5.8  使用GDB遠程調(diào)試bsdiff 559
19.6  本機調(diào)試 560
19.6.1  Yocto Project 560
19.6.2  Buildroot 561
19.7  即時調(diào)試 561
19.8  調(diào)試分叉和線程 562
19.9  核心文件 562
19.9.1  觀察核心文件 563
19.9.2  使用GDB查看核心文件 564
19.10  GDB用戶界面 565
19.10.1  終端用戶界面 565
19.10.2  數(shù)據(jù)顯示調(diào)試器 566
19.11  Visual Studio Code 567
19.11.1  安裝Visual Studio Code 567
19.11.2  安裝工具鏈 567
19.11.3  安裝CMake 569
19.11.4  創(chuàng)建一個Visual Studio Code項目 569
19.11.5  安裝Visual Studio Code擴展 569
19.11.6  配置CMake 570
19.11.7  配置項目設(shè)置 571
19.11.8  配置遠程調(diào)試的啟動設(shè)置 573
19.12  調(diào)試內(nèi)核代碼 574
19.12.1  使用kgdb調(diào)試內(nèi)核代碼 575
19.12.2  調(diào)試會話示例 576
19.12.3  調(diào)試早期代碼 577
19.12.4  調(diào)試模塊 578
19.12.5  使用kdb調(diào)試內(nèi)核代碼 579
19.12.6  查看內(nèi)核Oops消息 580
19.12.7  保存Oops消息 583
19.13  小結(jié) 584
19.14  延伸閱讀 585
第20章  性能分析和跟蹤 587
20.1  技術(shù)要求 588
20.2  觀察者效應(yīng) 588
20.2.1  關(guān)于觀察者效應(yīng) 588
20.2.2  符號表和編譯標志 589
20.3  開始性能分析 589
20.4  使用top進行性能分析 590
20.5  窮人的性能分析器 591
20.6  perf簡介 592
20.6.1  為perf配置內(nèi)核 593
20.6.2  使用Yocto Project構(gòu)建perf 593
20.6.3  使用Buildroot構(gòu)建perf 594
20.6.4  使用perf進行性能分析 594
20.6.5  調(diào)用圖 596
20.6.6  perf annotate 597
20.7  跟蹤事件 598
20.8  Ftrace簡介 599
20.8.1  準備使用Ftrace 599
20.8.2  使用Ftrace 600
20.8.3  動態(tài)Ftrace和跟蹤過濾器 602
20.8.4  跟蹤事件 603
20.9  使用LTTng 604
20.9.1  LTTng和Yocto Project 605
20.9.2  LTTng和Buildroot 605
20.9.3  使用LTTng進行內(nèi)核跟蹤 606
20.10  使用BPF 608
20.10.1  為BPF配置內(nèi)核 608
20.10.2  使用Buildroot構(gòu)建BCC工具包 611
20.10.3  使用BPF跟蹤工具 612
20.11  使用Valgrind 615
20.11.1  Callgrind 615
20.11.2  Helgrind 616
20.12  使用strace 616
20.13  小結(jié) 619
20.14  延伸閱讀 619
第21章  實時編程 621
21.1  技術(shù)要求 621
21.2  關(guān)于實時 622
21.3  識別非確定性的來源 624
21.4  了解調(diào)度延遲 625
21.5  內(nèi)核搶占 626
21.5.1  實時Linux內(nèi)核(PREEMPT_RT) 627
21.5.2  線程化中斷處理程序 628
21.6  可搶占內(nèi)核鎖 630
21.6.1  獲取PREEMPT_RT補丁 631
21.6.2  Yocto Project和PREEMPT_RT 632
21.7  高分辨率定時器 632
21.8  避免頁面錯誤 633
21.9  中斷屏蔽 634
21.10  測量調(diào)度延遲 634
21.10.1  cyclictest 635
21.10.2  使用Ftrace 638
21.10.3  結(jié)合cyclictest和Ftrace 639
21.11  小結(jié) 640
21.12  延伸閱讀 641
 

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) rgspecialties.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號