ARM嵌入式Linux系統開發詳解(第3版)
弓雷
買這商品的人也買了...
-
$1,000$900 -
$880$695 -
$880$695 -
$780$616 -
$720$360 -
$720$562
相關主題
商品描述
"《ARM嵌入式Linux系統開發詳解(第3版)》是獲得大量讀者好評的“Linux典藏大系”中的《ARM嵌入式Linux系統開發詳解》的第3版。本書由淺入深,全面、系統地介紹基於ARM體系結構的嵌入式Linux系統開發涉及的方方面面知識,並給出53個典型實例和5個綜合案例供讀者實戰演練。本書提供707分鐘配套教學視頻、程序源代碼、思維導圖、教學PPT、習題參考答案和軟件工具等超值配套資源,幫助讀者高效、直觀地學習。 本書共25章,分為4篇。第1篇基礎知識,包括嵌入式系統入門、嵌入式軟硬件系統、ARM處理器、嵌入式Linux、軟件開發環境搭建、第一個Linux應用程序;第2篇應用開發,包括Linux應用程序開發基礎、多進程和多線程開發、網絡通信應用、串口通信編程、嵌入式GUI程序開發、軟件項目管理;第3篇系統分析,包括ARM體系結構及開發實例、深入Bootloader、解析Linux內核、嵌入式Linux的啟動流程、Linux文件系統、交叉編譯工具、強大的命令系統BusyBox、Linux內核移植,以及內核和應用程序調試技術;第4篇項目實戰,包括Linux設備驅動開發基礎知識、網絡設備驅動程序開發、Flash設備驅動開發和USB驅動開發。 本書內容豐富,實用性強,適合ARM嵌入式Linux系統開發的初學者、從業者、研究者和愛好者等相關人員閱讀,也適合IT培訓機構和高等院校的相關專業作為教材。 "
目錄大綱
第1篇 基礎知識
第1章 嵌入式系統入門 2
1.1 什麽是嵌入式系統 2
1.2 嵌入式系統的應用領域 2
1.2.1 家用電器和電子類產品 2
1.2.2 交通工具 3
1.2.3 公共電子設施 3
1.3 嵌入式系統的發展 4
1.3.1 嵌入式微控制器 4
1.3.2 嵌入式微處理器 5
1.3.3 嵌入式系統的發展方向 5
1.4 典型嵌入式系統的組成 6
1.5 小結 6
1.6 習題 7
第2章 嵌入式軟硬件系統 8
2.1 電路基礎知識 8
2.1.1 什麽是模擬電路 8
2.1.2 什麽是數字電路 8
2.1.3 數制轉換 9
2.2 電腦基礎知識 10
2.2.1 電腦體系結構的發展 10
2.2.2 中央處理器 10
2.2.3 存儲系統 11
2.2.4 總線系統 11
2.2.5 輸入與輸出系統 12
2.3 軟件基礎知識 12
2.3.1 什麽是軟件 12
2.3.2 軟件的開發流程 13
2.3.3 常見的軟件開發模型 13
2.3.4 電腦編程語言 14
2.3.5 數據結構 15
2.4 操作系統基礎知識 15
2.4.1 什麽是操作系統 15
2.4.2 操作系統的發展歷史 15
2.4.3 操作系統的組成 16
2.4.4 幾種操作系統的設計思路 16
2.4.5 操作系統的分類 17
2.5 小結 17
2.6 習題 17
第3章 ARM處理器 19
3.1 微處理器和微控制器 19
3.2 ARM處理器簡介 19
3.2.1 ARM微處理器的應用領域 20
3.2.2 ARM處理器的優點 20
3.3 ARM指令集 21
3.3.1 算術運算指令 21
3.3.2 邏輯運算指令 22
3.3.3 分支指令 23
3.3.4 數據傳送指令 23
3.4 ARM體系結構 24
3.4.1 ARM體系結構的命名方法 24
3.4.2 處理器的劃分 25
3.4.3 處理器的工作模式 25
3.4.4 存儲系統 26
3.4.5 尋址方式 27
3.5 ARM的功能選型 29
3.5.1 ARM的選型原則 29
3.5.2 幾種常見的ARM核處理器選型參考 31
3.6 小結 32
3.7 習題 33
第4章 嵌入式Linux 34
4.1 常見的嵌入式操作系統 34
4.1.1 VxWorks簡介 34
4.1.2 Windows CE簡介 35
4.1.3 PalmOS簡介 35
4.1.4 Android簡介 35
4.2 嵌入式Linux操作系統 36
4.2.1 什麽是Linux 36
4.2.2 Linux與UNIX的不同——GPL版權協議簡介 36
4.2.3 Linux發行版 37
4.2.4 常見的嵌入式Linux系統 38
4.3 小結 38
4.4 習題 39
第5章 軟件開發環境搭建 40
5.1 安裝Linux系統 40
5.1.1 安裝Ubuntu Linux 40
5.1.2 安裝和卸載軟件 43
5.1.3 配置系統服務 43
5.1.4 安裝主要的開發工具 44
5.1.5 安裝其他開發工具 45
5.2 運行在Windows上的Linux系統 45
5.2.1 什麽是Cygwin 45
5.2.2 安裝Cygwin 46
5.2.3 安裝開發環境 49
5.3 Linux的常用工具 49
5.3.1 Linux Shell及其常用命令 50
5.3.2 文本編輯工具vi 51
5.3.3 搜索工具find和grep 52
5.3.4 FTP工具 56
5.3.5 串口工具minicom 57
5.4 Windows的常用工具 58
5.4.1 代碼編輯管理工具Source Insight 59
5.4.2 串口工具Xshell 64
5.5 ARM的集成開發環境ADS 66
5.5.1 ADS集成開發環境簡介 66
5.5.2 配置ADS調試環境 67
5.5.3 建立自己的工程 68
5.6 小結 70
5.7 習題 70
第6章 第一個Linux應用程序 71
6.1 向世界問好——Hello,World! 71
6.1.1 用vi編輯源代碼文件 71
6.1.2 用gcc命令編譯程序 72
6.1.3 執行程序 72
6.2 程序背後做了什麽 73
6.2.1 程序執行的過程 73
6.2.2 窺視程序執行中的秘密 73
6.2.3 動態庫的作用 75
6.3 程序如何來的——編譯的全過程 75
6.3.1 編譯源代碼 76
6.3.2 鏈接目標文件到指定的庫 77
6.4 更簡單的辦法——用Makefile管理工程 77
6.4.1 什麽是Makefile 77
6.4.2 Makefile是如何工作的 78
6.4.3 如何使用Makefile 78
6.4.4 好的源代碼管理習慣 79
6.5 小結 79
6.6 習題 79
第2篇 應用開發
第7章 Linux應用程序開發基礎 82
7.1 內存管理和使用 82
7.1.1 堆和棧的區別 82
7.1.2 內存管理函數malloc()和free() 84
7.1.3 實用的內存分配函數calloc()和realloc() 85
7.1.4 內存管理編程實例 86
7.2 ANSI C文件管理 89
7.2.1 文件指針和流 89
7.2.2 存儲方式 90
7.2.3 標準輸入、標準輸出和標準錯誤 90
7.2.4 緩沖 90
7.2.5 打開和關閉文件 91
7.2.6 讀寫文件 92
7.2.7 文件流定位 94
7.2.8 ANSI C文件編程實例 95
7.3 POSIX文件I/O編程 96
7.3.1 底層的文件I/O操作 96
7.3.2 文件描述符 96
7.3.3 創建、打開和關閉文件 97
7.3.4 讀寫文件內容 100
7.3.5 文件內容定位 101
7.3.6 修改已打開文件的屬性 102
7.3.7 POSIX文件編程實例 102
7.4 小結 103
7.5 習題 104
第8章 多進程和多線程開發 105
8.1 多進程開發 105
8.1.1 什麽是進程 105
8.1.2 進程環境和屬性 106
8.1.3 創建進程 107
8.1.4 等待進程結束 109
8.1.5 退出進程 110
8.1.6 常用進程間的通信方法 112
8.1.7 進程編程實例 116
8.2 多線程開發 117
8.2.1 線程的概念 117
8.2.2 進程和線程對比 117
8.2.3 創建線程 118
8.2.4 取消線程 119
8.2.5 等待線程 120
8.2.6 使用pthread庫實現多線程操作實例 121
8.3 小結 122
8.4 習題 122
第9章 網絡通信應用 124
9.1 網絡通信基礎 124
9.1.1 TCP/IP簇 124
9.1.2 IP簡介 125
9.1.3 TCP簡介 126
9.1.4 UDP簡介 127
9.1.5 網絡協議分析工具Wireshark 127
9.2 Socket通信的基本概念 128
9.2.1 創建Socket對象 128
9.2.2 面向連接的Socket通信 129
9.2.3 面向連接的echo服務編程實例 131
9.2.4 無連接的Socket通信 135
9.2.5 無連接的時間服務編程實例 136
9.3 Socket高級應用 139
9.3.1 Socket超時處理 139
9.3.2 使用Select機制處理多連接 140
9.3.3 使用poll機制處理多連接 141
9.3.4 多線程環境Socket編程 143
9.4 小結 143
9.5 習題 144
第10章 串口通信編程 145
10.1 串口簡介 145
10.1.1 什麽是串口 145
10.1.2 串口的工作原理 145
10.1.3 串口的流量控制 146
10.2 開發串口應用程序 147
10.2.1 操作串口需要用到的頭文件 147
10.2.2 串口操作方法 148
10.2.3 串口屬性設置 148
10.2.4 與Windows串口終端通信 152
10.3 串口應用案例——發送手機短信 154
10.3.1 PC與手機連接發送短信的物理結構 154
10.3.2 AT指令簡介 155
10.3.3 GSM AT指令集 155
10.3.4 PDU編碼方式 156
10.3.5 建立與手機的連接 157
10.3.6 使用AT指令發送短信 158
10.4 小結 161
10.5 習題 161
第11章 嵌入式GUI程序開發 163
11.1 Linux GUI簡介 163
11.1.1 Linux GUI的發展 163
11.1.2 常見的嵌入式GUI 164
11.2 開發圖形界面程序 165
11.2.1 安裝Qt開發環境 165
11.2.2 建立簡單的Qt程序 167
11.2.3 Qt庫編程結構 170
11.3 深入Qt編程 170
11.3.1 使用Widget 170
11.3.2 對話框程序設計 172
11.3.3 信號與槽系統 176
11.4 將Qt移植到ARM開發板上 177
11.4.1 tslib的移植 177
11.4.2 Qt的移植 178
11.4.3 安裝Qt Creator編譯環境 179
11.4.4 設置Qt Creator編譯環境 184
11.4.5 配置開發板的環境變量 187
11.5 模擬器QEMU 188
11.5.1 使用QEMU搭建ARM嵌入式Linux開發環境 188
11.5.2 使用Qt程序進行測試 191
11.6 小結 191
11.7 習題 191
第12章 軟件項目管理 193
12.1 源代碼管理 193
12.1.1 軟件的版本 193
12.1.2 版本控制的概念 194
12.2 版本控制系統Git 195
12.2.1 在Linux系統中使用Git 195
12.2.2 在Windows系統中使用Git 198
12.3 常見的開發文檔 202
12.3.1 可行性研究報告 202
12.3.2 項目開發計劃 202
12.3.3 軟件需求說明書 202
12.3.4 概要設計 203
12.3.5 詳細設計 203
12.3.6 用戶手冊 203
12.3.7 其他文檔 203
12.4 文檔維護工具 203
12.4.1 Sphinx工具 203
12.4.2 GitHub工具 206
12.5 Bug跟蹤系統 210
12.5.1 Bug管理的概念和作用 210
12.5.2 使用Bugzilla跟蹤Bug 211
12.6 小結 214
12.7 習題 214
第3篇 系統分析
第13章 ARM體系結構及開發實例 216
13.1 ARM體系結構 216
13.1.1 ARM體系結構簡介 216
13.1.2 ARM指令集簡介 217
13.2 編程模型 218
13.2.1 數據類型 218
13.2.2 處理器模式 218
13.2.3 寄存器 219
13.2.4 通用寄存器 219
13.2.5 程序狀態寄存器 221
13.2.6 異常處理 221
13.2.7 內存及其I/O映射 222
13.3 內存管理單元 223
13.3.1 內存管理簡介 223
13.3.2 內存訪問順序 224
13.3.3 地址翻譯過程 224
13.3.4 內存訪問權限 225
13.4 常見的接口和控制器 225
13.4.1 GPIO簡介 225
13.4.2 中斷控制器 226
13.4.3 RTC控制器 226
13.4.4 看門狗定時器 227
13.4.5 使用GPIO點亮LED實例 227
13.5 小結 228
13.6 習題 228
第14章 深入Bootloader 230
14.1 初識Bootloader 230
14.1.1 PC的Bootloader 230
14.1.2 什麽是嵌入式系統的Bootloader 231
14.1.3 嵌入式系統常見的Bootloader 231
14.2 U-Boot分析 232
14.2.1 獲取U-Boot 232
14.2.2 U-Boot工程結構分析 232
14.2.3 U-Boot的工作流程 233
14.3 U-Boot的啟動流程分析 234
14.3.1 _start標號 234
14.3.2 reset標號 237
14.3.3 cpu_init_crit標號 238
14.3.4 lowlevel_init標號 239
14.3.5 main標號 240
14.3.6 board_init_f()函數 243
14.3.7 relocate_code()函數 243
14.3.8 board_init_r()函數 245
14.3.9 main_loop()函數 245
14.4 U-Boot移植 246
14.4.1 U-Boot移植的一般步驟 246
14.4.2 將U-Boot移植到目標開發板上 247
14.4.3 U-Boot移植的常見問題 249
14.5 小結 249
14.6 習題 249
第15章 解析Linux內核 251
15.1 基礎知識 251
15.1.1 什麽是Linux內核 251
15.1.2 Linux內核的版本 252
15.1.3 如何獲取Linux內核代碼 252
15.1.4 編譯內核 252
15.2 Linux內核的子系統 258
15.2.1 系統調用接口 259
15.2.2 進程管理子系統 260
15.2.3 內存管理子系統 261
15.2.4 虛擬文件系統 261
15.2.5 網絡堆棧 262
15.2.6 設備驅動 263
15.2.7 內核體系結構代碼分離設計解析 264
15.3 Linux內核代碼的工程結構 264
15.3.1 源代碼目錄佈局 264
15.3.2 幾個重要的Linux內核文件 266
15.4 內核編譯系統 267
15.4.1 內核編譯系統的基本架構 267
15.4.2 內核的頂層Makefile文件分析 268
15.4.3 內核編譯文件分析 270
15.4.4 目標文件清除機制 273
15.4.5 編譯輔助程序 273
15.4.6 Kbuild變量 274
15.5 小結 275
15.6 習題 275
第16章 嵌入式Linux的啟動流程 277
16.1 Linux內核的初始化流程 277
16.2 PC的初始化流程 278
16.2.1 PC BIOS的功能和作用 279
16.2.2 磁盤的數據結構 279
16.2.3 PC的完整初始化流程 280
16.3 嵌入式系統的初始化 280
16.4 Linux內核的初始化 282
16.4.1 解壓縮內核映像 282
16.4.2 進入內核代碼 284
16.5 啟動init內核進程 287
16.6 根文件系統的初始化 288
16.6.1 根文件系統簡介 288
16.6.2 掛載虛擬文件系統 290
16.7 內核交出權限 295
16.8 systemd進程 295
16.8.1 systemd的Unit 295
16.8.2 配置文件 295
16.8.3 常用命令 297
16.9 初始化RAM Disk 298
16.9.1 RAM Disk簡介 298
16.9.2 如何使用RAM Disk 299
16.9.3 使用RAM Disk作為根文件系統實例 299
16.10 小結 300
16.11 習題 301
第17章 Linux文件系統 302
17.1 Linux文件管理 302
17.1.1 文件和目錄的概念 302
17.1.2 文件的結構 303
17.1.3 文件的類型 303
17.1.4 文件系統的目錄結構 305
17.1.5 文件和目錄的存取權限 307
17.1.6 文件系統管理 308
17.2 Linux文件系統的原理 309
17.2.1 非日誌文件系統 309
17.2.2 日誌文件系統 310
17.3 常見的Linux文件系統 311
17.3.1 Ext2文件系統 311
17.3.2 Ext3文件系統 313
17.3.3 ReiserFS文件系統 314
17.3.4 JFFS文件系統 315
17.3.5 CRAMFS文件系統 317
17.4 其他文件系統 317
17.4.1 網絡文件系統 317
17.4.2 /proc影子文件系統 319
17.5 小結 321
17.6 習題 322
第18章 交叉編譯工具 323
18.1 什麽是交叉編譯 323
18.2 交叉編譯產生的原因 324
18.3 安裝交叉編譯工具的條件 324
18.4 如何安裝交叉編譯工具 324
18.4.1 手動安裝 324
18.4.2 使用apt工具安裝 326
18.4.3 測試 326
18.5 小結 326
18.6 習題 327
第19章 強大的命令系統BusyBox 328
19.1 BusyBox簡介 328
19.1.1 簡單易懂的BusyBox 328
19.1.2 BusyBox的工作原理 329
19.1.3 安裝BusyBox 330
19.2 交叉編譯BusyBox 333
19.3 在目標板上安裝BusyBox 335
19.4 小結 337
19.5 習題 337
第20章 Linux內核移植 338
20.1 Linux內核移植的要點 338
20.2 Linux內核的平臺代碼結構 339
20.3 實現交叉編譯 340
20.3.1 加入編譯菜單項 342
20.3.2 實現編譯 343
20.4 小結 344
20.5 習題 344
第21章 內核和應用程序調試技術 345
21.1 使用gdb調試應用程序 345
21.2 基本的調試技術 345
21.2.1 列出源代碼 348
21.2.2 斷點管理 350
21.2.3 執行程序 352
21.2.4 顯示程序變量 352
21.2.5 信號管理 353
21.2.6 調試實例 354
21.3 多進程調試 354
21.4 調試意外終止的程序 357
21.5 內核調試方法 359
21.5.1 printk打印調試信息 359
21.5.2 動態輸出 360
21.5.3 BUG_ON()和WARN_ON()宏 360
21.5.4 使用/proc虛擬文件系統 363
21.6 小結 364
21.7 習題 364
第4篇 項目實戰
第22章 Linux設備驅動開發基礎知識 366
22.1 設備驅動簡介 366
22.2 Linux內核模塊簡介 367
22.2.1 內核模塊速覽 367
22.2.2 內核模塊的結構 367
22.2.3 內核模塊的加載和卸載 368
22.2.4 編寫一個基本的內核模塊 369
22.2.5 編譯內核模塊 370
22.2.6 為內核模塊添加參數 371
22.3 Linux設備驅動工作方式簡介 372
22.3.1 PCI局部總線簡介 372
22.3.2 Linux設備驅動的基本概念 373
22.3.3 字符設備 374
22.3.4 塊設備 376
22.3.5 網絡設備 377
22.4 字符設備驅動開發案例 377
22.4.1 開發一個基本的字符設備驅動 377
24.4.2 測試字符設備 380
22.5 小結 381
22.6 習題 381
第23章 網絡設備驅動程序開發 382
23.1 網絡基礎知識 382
23.1.1 OSI網絡參考模型 382
23.1.2 Linux系統內核與TCP/IP 383
23.2 以太網基礎 385
23.2.1 工作原理 386
23.2.2 常見的以太網標準 386
23.2.3 拓撲結構 387
23.2.4 工作模式 387
23.3 網卡的工作原理 388
23.4 內核網絡分層結構 389
23.4.1 內核網絡結構 389
23.4.2 與網絡有關的數據結構 390
23.4.3 內核網絡部分的全局變量 391
23.5 內核網絡設備驅動框架 392
23.5.1 net_device結構 392
23.5.2 數據包的接收流程 394
23.5.3 數據包的發送流程 395
23.6 DM9000網卡驅動分析案例 396
23.6.1 DM9000芯片簡介 396
23.6.2 網卡驅動程序框架 396
23.6.3 DM9000網卡驅動的數據結構 397
23.6.4 加載驅動程序 398
23.6.5 停止和啟動網卡 402
23.6.6 發送數據包 403
23.6.7 接收數據包 404
23.6.8 中斷的處理 405
23.7 小結 406
23.8 習題 406
第24章 Flash設備驅動開發 407
24.1 Linux Flash驅動結構 407
24.1.1 什麽是MTD 407
24.1.2 MTD系統結構 408
24.2 Flash設備基礎 409
24.2.1 存儲原理 409
24.2.2 性能比較 410
24.3 內核MTD層 411
24.3.1 mtd_info結構 411
24.3.2 mtd_part結構 415
24.3.3 mtd_partition結構 415
24.3.4 map_info結構 416
24.3.5 nand_chip結構 418
24.4 Flash設備框架 419
24.4.1 NOR Flash設備驅動框架 419
24.4.2 NAND Flash設備驅動框架 420
24.5 NAND Flash設備驅動分析案例 421
24.5.1 S3C2440 NAND控制器簡介 421
24.5.2 數據結構 423
24.5.3 註冊驅動 424
24.5.4 驅動卸載 427
24.5.5 初始化NAND控制器 427
24.5.6 設置芯片操作 429
24.5.7 電源管理 431
24.6 小結 432
24.7 習題 432
第25章 USB驅動開發 433
25.1 USB體系概述 433
25.1.1 USB的設計目標 433
25.1.2 USB體系簡介 434
25.1.3 USB體系的工作流程 435
25.2 USB驅動程序框架 435
25.2.1 Linux內核USB驅動框架簡介 435
25.2.2 主機驅動結構 438
25.2.3 設備驅動結構 442
25.2.4 USB驅動程序框架 445
25.3 USB驅動案例剖析 447
25.3.1 USB串口驅動 447
25.3.2 USB鍵盤驅動 449
25.4 小結 452
25.5 習題 452