会员   密码 您忘记密码了吗?
1,572,652 本书已上架      购物流程 | 常见问题 | 联系我们 | 关于我们 | 用户协议

有店 App


当前分类

商品分类

浏览历史

当前位置: 首页 > 简体书 > 奔跑吧Linux內核·入門篇
奔跑吧Linux內核·入門篇
上一张
下一张
prev next

奔跑吧Linux內核·入門篇

作者: 張天飛
出版社: 人民郵電出版社
出版日期: 2019-02-01
商品库存: 点击查询库存
以上库存为海外库存属流动性。
可选择“空运”或“海运”配送,空运费每件商品是RM14。
配送时间:空运约8~12个工作天,海运约30个工作天。
(以上预计配送时间不包括出版社库存不足需调货及尚未出版的新品)
定价:   NT534.00
市场价格: RM96.00
本店售价: RM85.44
促销价: RM84.48
剩余时间: 请稍等, 正在载入中...
购买数量:
collect Add to cart Add booking
详细介绍 商品属性 商品标记
內容簡介

本書是一本介紹Linux內核實踐的入門書,基於Linux4.0內核,重點講解Linux內核的理論和實驗。本書分為12章,包括Linux系統入門、Linux內核基礎知識、內核編譯和調試、內核模塊、簡單的字元設備驅動、系統調用、內存管理、進程管理、同步管理、中斷管理、調試和性能優化,以及如何參與開源社區等內容。此外,本書還介紹了Linux內核社區常用的開發工具和理論,如Vim8和git工具等。書中包括70多個實驗,幫助讀者深入理解Linux內核。


作者介紹

張天飛,筆名「笨叔叔」,Linux內核愛好者,從事Linux內核和驅動開發十余年,曾在多家晶元公司從事過手機晶元底層軟體開發和客戶支持工作。著有《奔跑吧 Linux內核》一書。


目錄

第1章  Linux系統入門 1
1.1 Linux的發展歷史 1
1.2 Linux發行版本 2
1.2.1 Red Hat Linux 2
1.2.2 Debian Linux 3
1.2.3 SuSE Linux 4
1.2.4 優麒麟Linux 4
1.3 Linux內核 5
1.3.1 宏內核和微內核 5
1.3.2 Linux內核概貌 6
1.4 如何學xiLinux內核 9
1.5 Linux內核實驗入門 10
1.5.1 實驗1:在虛擬機器中安裝優麒麟Linux 18.04系統 10
1.5.2 實驗2:給優麒麟Linux系統更換“心臟” 14
1.5.3 實驗3:使用定制的內核runninglinuxkernel 15
1.5.4 實驗4:如何編譯和運行一個ARM Linux內核 19

第2章 Linux內核基礎知識 22
2.1 Linux常用的編譯工具 22
2.1.1 GCC工具 22
2.1.2 ARM GCC 23
2.1.3 GCC編譯 24
2.2 Linux內核中常用的C語言技巧 25
2.3 Linux內核中常用的資料結構和演算法 31
2.3.1 鏈表 31
2.3.2 紅黑樹 34
2.3.3 無鎖環形緩衝區 36
2.4 Vim工具的使用 38
2.4.1 Vim 8介紹 38
2.4.2 Vim的基本模式 38
2.4.3 Vim中3種模式的切換 39
2.4.4 Vim游標的移動 40
2.4.5 刪除、複製和粘貼 41
2.4.6 查找和替換 41
2.4.7 檔相關 41
2.5 git工具的使用 42
2.5.1 安裝git 43
2.5.2 git基本操作 43
2.5.3 分支管理 46
2.6 實驗 48
2.6.1 實驗1:GCC編譯 48
2.6.2 實驗2:內核鏈表 51
2.6.3 實驗3:紅黑樹 52
2.6.4 實驗4:使用Vim工具 52
2.6.5 實驗5:把Vim打造成一個強大的IDE編輯工具 52
2.6.6 實驗6:建立一個git本地倉庫 60
2.6.7 實驗7:解決合併分支衝突 62
2.6.8 實驗8:利用git來管理Linux內核開發 65
2.6.9 實驗9:利用git來管理專案代碼 67

第3章 內核編譯和調試 73
3.1 內核配置 73
3.1.1 內核配置工具 73
3.1.2 .config文件 74
3.2 實驗1:通過QEMU調試ARM Linux內核 76
3.3 實驗2:通過QEMU調試ARMv8的Linux內核 78
3.4 實驗3:通過Eclipse+QEMU單步調試內核 81
3.5 實驗4:在QEMU中添加檔案系統的支持 85

第4章 內核模組 86
4.1 從一個內核模組開始 86
4.2 模組參數 90
4.3 符號共用 92
4.4 實驗 93
4.4.1 實驗1:編寫一個簡單的內核模組 93
4.4.2 實驗2:向內核模組傳遞參數 95
4.4.3 實驗3:在模組之間匯出符號 95

第5章 簡單的字元設備驅動 96
5.1 實驗1:從一個簡單的字元設備開始 97
5.2 字元設備驅動詳解 102
5.2.1 字元設備驅動的抽象 102
5.2.2 設備號的管理 104
5.2.3 設備節點 104
5.2.4 字元設備操作方法集 105
5.3 實驗2:使用misc機制來創建設備 107
5.4 一個簡單的虛擬裝置 109
5.4.1 實驗3:為虛擬裝置編寫驅動 109
5.4.2 實驗4:使用KFIFO改進設備驅動 112
5.5 阻塞I/O和非阻塞I/O 115
5.5.1 實驗5:把虛擬裝置驅動改成非阻塞模式 115
5.5.2 實驗6:把虛擬裝置驅動改成阻塞模式 118
5.6 I/O多工 122
5.6.1 Linux的I/O多工 122
5.6.2 實驗7:向虛擬裝置中添加I/O多工支持 123
5.7 實驗8:為什麼不能喚醒讀寫進程 128
5.8 實驗9:向虛擬裝置中添加非同步通知 129
5.9 本章小結 133

第6章 系統調用 134
6.1 系統調用概念 134
6.1.1 系統調用和POSIX標準 135
6.1.2 系統調用表 135
6.1.3 用程式訪問系統調用 136
6.1.4 新增系統調用 137
6.2 實驗 137
6.2.1 實驗1:在ARM32機器上新增一個系統調用 137
6.2.2 實驗2:在優麒麟Linux機器上新增一個系統調用 138
 
第7章 記憶體管理 139
7.1 從硬體角度看記憶體管理 139
7.1.1 記憶體管理的“遠古時代” 139
7.1.2 分段機制 141
7.1.3 分頁機制 142
7.1.4 虛擬位址到物理位址的轉換 143
7.2 從軟體角度看記憶體管理 144
7.2.1 free命令 144
7.2.2 從應用程式設計角度看記憶體管理 145
7.2.3 從記憶體布ju圖角度看記憶體管理 146
7.2.4 從進程角度看記憶體管理 150
7.3 實體記憶體管理 154
7.3.1 物理頁面 155
7.3.2 記憶體管理區 159
7.3.3 分配和釋放頁面 162
7.3.4 分配小塊記憶體 170
7.4 虛擬記憶體管理 177
7.4.1 進程位址空間 177
7.4.2 記憶體描述符mm_struct 178
7.4.3 VMA管理 180
7.4.4 malloc分配函數 183
7.4.5 mmap 185
7.5 缺頁異常 188
7.5.1 do_page_fault函數 189
7.5.2 匿名頁面缺頁異常 190
7.5.3 文件映射缺頁中斷 190
7.5.4 寫時複製缺頁異常 191
7.5.5 缺頁異常小結 192
7.6 記憶體短缺 193
7.6.1 頁面回收演算法 193
7.6.2 OOM Killer機制 194
7.7 記憶體管理實驗 195
7.7.1 實驗1:查看系統記憶體信息 195
7.7.2 實驗2:獲取系統的實體記憶體資訊 197
7.7.3 實驗3:分配記憶體 199
7.7.4 實驗4:slab 200
7.7.5 實驗5:VMA 201
7.7.6 實驗6:mmap 203
7.7.7 實驗7:映射使用者記憶體 203
7.7.8 實驗8:OOM 204

第8章 進程管理 205
8.1 進程 205
8.1.1 進程的來由 205
8.1.2 進程描述符 207
8.1.3 進程的生命週期 209
8.1.4 進程標識 212
8.1.5 進程間的家族關係 212
8.1.6 獲取當前進程 214
8.2 進程的創建和終止 216
8.2.1 寫時複製技術 216
8.2.2 fork()函數 217
8.2.3 vfork()函數 218
8.2.4 clone()函數 218
8.2.5 內核執行緒 219
8.2.6 do_fork()函數 219
8.2.7 終止進程 221
8.2.8 僵屍進程和托孤進程 222
8.2.9 進程0和進程1 222
8.3 進程調度 223
8.3.1 進程分類 224
8.3.2 進程優先順序 224
8.3.3 時間片 225
8.3.4 經典調度演算法 225
8.3.5 Linux O(n)調度演算法 228
8.3.6 Linux O(1)調度演算法 228
8.3.7 Linux CFS調度演算法 228
8.3.8 進程切換 233
8.3.9 與調度相關的資料結構 239
8.4 多核調度 241
8.4.1 調度域和調度組 241
8.4.2 負載計算 244
8.4.3 負載均衡演算法 245
8.5 實驗 246
8.5.1 實驗1:fork和clone 246
8.5.2 實驗2:內核執行緒 247
8.5.3 實驗3:後臺守護進程 247
8.5.4 實驗4:進程許可權 247
8.5.5 實驗5:設置優先順序 247
8.5.6 實驗6:per-cpu變數 248

第9章 同步管理 250
9.1 原子操作與記憶體屏障 251
9.1.1 原子操作 251
9.1.2 記憶體屏障 253
9.2 自旋鎖機制 254
9.2.1 自旋鎖定義 254
9.2.2 自旋鎖變種 256
9.2.3 自旋鎖和raw_spin_lock 257
9.2.4 自旋鎖的改進 257
9.3 信號量 258
9.4 互斥體 259
9.5 讀寫鎖 261
9.5.1 讀寫鎖定義 261
9.5.2 讀寫信號量 262
9.6 RCU 264
9.7 等待佇列 267
9.7.1 等待佇列頭 267
9.7.2 等待佇列節點 268
9.8 實驗 269
9.8.1 實驗1:自旋鎖 269
9.8.2 實驗2:互斥鎖 269
9.8.3 實驗3:RCU 269

第10章 中斷管理 270
10.1 Linux中斷管理機制 270
10.1.1 ARM中斷控制器 271
10.1.2 硬體中斷號和Linux中斷號的映射 275
10.1.3 註冊中斷 276
10.2 軟中斷和tasklet 278
10.2.1 SoftIRQ軟中斷 279
10.2.2 tasklet 280
10.2.3 local_bh_disable/local_bh_enable 281
10.2.4 本節小結 282
10.3 工作隊列機制 282
10.3.1 工作隊列類型 283
10.3.2 使用工作隊列 285
10.3.3 本節小結 285
10.4 實驗 286
10.4.1 實驗1:tasklet 286
10.4.2 實驗2:工作隊列 286
10.4.3 實驗3:計時器和內核執行緒 287

第11章 調試和性能優化 288
11.1 printk和動態輸出 289
11.1.1 printk輸出函數 289
11.1.2 動態輸出 290
11.1.3 實驗1:printk 292
11.1.4 實驗2:動態輸出 292
11.2 proc和debugfs 293
11.2.1 proc檔案系統 293
11.2.2 sys檔案系統 295
11.2.3 debugfs 296
11.2.4 實驗3:procfs 297
11.2.5 實驗4:sysfs 298
11.2.6 實驗5:debugfs 300
11.3 ftrace 301
11.3.1 irqs跟蹤器 302
11.3.2 preemptoff跟蹤器 304
11.3.3 preemptirqsoff跟蹤器 305
11.3.4 function跟蹤器 306
11.3.5 動態ftrace 307
11.3.6 事件跟蹤 308
11.3.7 實驗6:使用frace 310
11.3.8 實驗7:添加一個新的跟蹤點 311
11.3.9 實驗8:使用示蹤標誌 314
11.3.10 實驗9:使用kernelshark來分析資料 317
11.4 實驗10:分析oops錯誤 319
11.5 perf性能分析工具 323
11.5.1 實驗11:使用perf工具來進行性能分析 328
11.5.2 實驗12:採集perf資料生成火焰圖 329
11.6 記憶體檢測 329
11.6.1 實驗13:使用slub_debug檢查記憶體洩漏 330
11.6.2 實驗14:使用kmemleak檢查記憶體洩漏 335
11.6.3 實驗15:使用kasan檢查記憶體洩漏 337
11.6.4 實驗16:使用valgrind檢查記憶體洩漏 340
11.7 實驗17:kdump 342
11.8 性能和測試 348
11.8.1 性能測試概述 348
11.8.2 實驗18:使用lkp-tests工具進行性能測試 349

第12章 開源社區 350
12.1 什麼是開源社區 350
12.1.1 開源軟體的發展歷史 350
12.1.2 Linux基金會 351
12.1.3 開源協議 351
12.1.4 Linux內核社區 353
12.1.5 開源社區 354
12.2 參與開源社區 354
12.2.1 參與開源專案的好處 354
12.2.2 如何參與開源專案 355
12.3 實驗1:使用cppcheck檢查代碼 356
12.4 實驗2:提交第 個Linux內核補丁 357
12.5 實驗3:管理和提交多個補丁組成的補丁集 359
12.6 實驗4:在Gitee中創建一個開源項目 363
參考文獻 366