ARM嵌入式Linux系統開發詳解(第3版)

弓雷

  • 出版商: 清華大學
  • 出版日期: 2024-09-01
  • 售價: $714
  • 貴賓價: 9.5$678
  • 語言: 簡體中文
  • ISBN: 7302670870
  • ISBN-13: 9787302670872
  • 相關分類: 嵌入式系統Linux
  • 立即出貨

  • ARM嵌入式Linux系統開發詳解(第3版)-preview-1
  • ARM嵌入式Linux系統開發詳解(第3版)-preview-2
  • ARM嵌入式Linux系統開發詳解(第3版)-preview-3
ARM嵌入式Linux系統開發詳解(第3版)-preview-1

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

相關主題

商品描述

"《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