ARM嵌入式Linux系統開發詳解

ARM嵌入式Linux系統開發詳解

本書適合廣大從事嵌入式linux系統開發人員、對嵌入式linux系統開發有興趣的計算機愛好者,以及大中專院校學生閱讀。

基本信息

內容簡介

嵌入式系統是目前最流行的計算機套用技術之一。本書由淺入深地講解基於arm體系結構的嵌入式linux系統開發,內容包括嵌入式系統的基本概念、套用領域等基礎知識;arm處理器的體系結構和功能特點;linux系統核心結構和移植方法、bootloader功能和移植;linux應用程式開發,包括如何操作檔案、管理記憶體、訪問串口、多執行緒和多進程技術,並且剖析了應用程式的結構和工作流程;linux系統設備驅動程式開發,包括如何編寫核心模組、驅動程式分類和功能特點,並且給出了網路設備驅動、flash設備驅動和usb設備驅動的實例分析。

本書附帶1張dvd光碟,內容為專門為本書錄製的9小時視頻、本書涉及的原始碼、ubuntu安裝光碟的鏡像檔案和另外贈送的35小時linux專題學習視頻。

作者簡介

弓雷 在電信行業從事嵌入式系統軟體開發5年。致力於計算機作業系統核心及底層技術的研究。技術涉獵廣泛,擅長計算機通信技術。熟悉Intel IXA架構網路處理器、ARM體系結構、MIPS體系結構、TCP/IP網路協定棧。曾經移植過Linux 2.6核心到嵌入式設備。曾經參與研發某部隊火控武器通信系統、無人駕駛汽車項目通信系統及10GE/POS骨幹網流量管理系統。目前擔任嵌入式軟體研發工程師和微碼軟體研發工程師,從事某公司骨幹網P2P流量管理設備的研發。

目錄

第1篇Linux嵌入式開發基礎篇

第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未來嵌入式系統發展的方向 6

1.4典型的嵌入式系統組成 6

1.5小結 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匯流排系統 12

2.2.5輸入輸出系統 12

2.3軟體基礎知識 12

2.3.1什麼是軟體 13

2.3.2軟體開發流程 13

2.3.3常見的軟體開發模型 14

2.3.4計算機程式語言 14

2.3.5數據結構 15

2.4作業系統知識 15

2.4.1什麼是作業系統 16

2.4.2作業系統的發展歷史 16

2.4.3作業系統由什麼組成 16

2.4.4幾種作業系統的設計思路 17

2.4.5作業系統分類 17

2.5小結 18

第3章ARM處理器 19

3.1微處理器和微控制器 19

3.2ARM處理器介紹 19

3.2.1ARM微處理器的套用領域 20

3.2.2ARM的功能特點 20

3.3ARM指令集 21

3.3.1算術運算指令 21

3.3.2邏輯運算指令 22

3.3.3分支指令 23

3.3.4數據傳送指令 23

3.4ARM的結構 24

3.4.1ARM體系結構的命名方法 24

3.4.2處理器系列劃分 25

3.4.3處理器工作模式 25

3.4.4存儲系統 26

3.4.5定址方式 27

3.5ARM的功能選型 29

3.5.1ARM的選型原則 29

3.5.2幾種常見的ARM核處理器選型參考 32

3.6小結 32

第4章嵌入式Linux 33

4.1常見的嵌入式作業系統 33

4.1.1VxWorks 33

4.1.2WindowsCE 34

4.1.3PalmOS 34

4.1.4Symbian 34

4.2嵌入式Linux作業系統 34

4.2.1什麼是Linux 35

4.2.2Linux與UNIX的不同——GPL著作權協定介紹 35

4.2.3Linux發行版 36

4.2.4常見的嵌入式Linux系統 37

4.3小結 37

第5章建立軟體開發環境 38

5.1獨立的Linux系統 38

5.1.1安裝UbuntuLinux 38

5.1.2關鍵一步——系統的網路設定 46

5.1.3其他必要的設定 46

5.1.4怎樣安裝卸載軟體 48

5.1.5怎樣配置系統服務 48

5.1.6安裝主要的開發工具 48

5.1.7安裝其他的開發工具和文檔 49

5.2運行在Windows上的Linux系統 50

5.2.1什麼是Cygwin 50

5.2.2如何安裝Cygwin 50

5.2.3安裝開發環境 54

5.3Linux常用工具 54

5.3.1Linuxshell和常用命令 55

5.3.2文本編輯工具vi 56

5.3.3搜尋工具find和grep 57

5.3.4FTP工具 61

5.3.5串口工具minicom 63

5.4Windows常用工具 65

5.4.1代碼編輯管理工具SourceInsight 65

5.4.2串口工具XShell 71

5.5ARM集成開發環境ADS 72

5.5.1ADS集成開發環境介紹 73

5.5.2配置ADS調試環境 73

5.5.3建立自己的工程 75

5.6小結 78

第6章第一個Linux應用程式 79

6.1向世界問好--Hello,World! 79

6.1.1用vi編輯原始碼檔案 79

6.1.2用gcc編譯程式 80

6.1.3執行程式 80

6.2程式背後做了什麼 80

6.2.1程式執行的過程 81

6.2.2窺視程式執行中的秘密 82

6.2.3動態庫的作用 83

6.3程式如何來的--編譯的全部過程 84

6.3.1編譯原始碼 84

6.3.2連線目標檔案到指定的庫 85

6.4更簡單的辦法--用Makefile管理工程 86

6.4.1什麼是Makefile 87

6.4.2它是如何工作的 87

6.4.3如何使用Makefile 87

6.4.4好的原始碼管理習慣 88

6.5小結 88

第2篇Linux嵌入式開發套用篇

第7章Linux應用程式編程基礎 90

7.1記憶體管理和使用 90

7.1.1堆和棧的區別 90

7.1.2記憶體管理函式malloc()和free() 93

7.1.3實用的記憶體分配函式calloc()和realloc() 93

7.1.4記憶體管理編程實例 94

7.2ANSIC檔案管理 97

7.2.1檔案指針和流 97

7.2.2存儲方式 98

7.2.3標準輸入、標準輸出和標準錯誤 98

7.2.4緩衝 98

7.2.5打開關閉檔案 99

7.2.6讀寫檔案 100

7.2.7檔案流定位 103

7.2.8ANSIC檔案編程實例 103

7.3POSIX檔案I/O編程 104

7.3.1底層的檔案I/O操作 104

7.3.2檔案描述符 104

7.3.3創建/打開/關閉檔案 105

7.3.4讀寫檔案內容 108

7.3.5檔案內容定位 109

7.3.6修改已打開檔案的屬性 110

7.3.7POSIX檔案編程實例 110

7.4小結 112

第8章開發多進程/執行緒程式 113

8.1多進程開發 113

8.1.1什麼是進程 113

8.1.2進程環境和屬性 114

8.1.3創建進程 115

8.1.4等待進程結束 117

8.1.5退出進程 118

8.1.6常用進程間通信的方法 120

8.1.7進程編程實例 124

8.2多執行緒開發 125

8.2.1執行緒的概念 126

8.2.2進程和執行緒對比 126

8.2.3創建執行緒 127

8.2.4取消執行緒 128

8.2.5等待執行緒 129

8.2.6使用pthread庫執行緒操作實例 129

8.3小結 131

第9章網路通信套用 132

9.1網路通信基礎 132

9.1.1TCP/IP協定族 132

9.1.2IP協定 133

9.1.3TCP協定 135

9.1.4UDP協定 135

9.1.5學習分析協定的方法 135

9.2Socket通信基本概念 137

9.2.1創建socket對象 138

9.2.2面向連線的Socket通信實現 138

9.2.3面向連線的Echo服務編程實例 140

9.2.4無連線的Socket通信實現 144

9.2.5無連線的時間服務編程實例 145

9.3Socket高級套用 148

9.3.1Socket逾時處理 148

9.3.2使用Select機制處理多連線 149

9.3.3使用Poll機制處理多連線 151

9.3.4多執行緒環境Socket編程 152

9.4小結 152

第10章串列口通信編程 154

10.1串口介紹 154

10.1.1什麼是串口 154

10.1.2串口工作原理 154

10.1.3串口流量控制 155

10.2開發串口應用程式 156

10.2.1操作串口需要用到的頭檔案 156

10.2.2串口操作方法 157

10.2.3串口屬性設定 157

10.2.4與Windows串口終端通信 161

10.3串口套用實例--手機簡訊傳送 163

10.3.1PC與手機連線傳送簡訊的物理結構 164

10.3.2AT指令介紹 164

10.3.3GSMAT指令集 165

10.3.4PDU編碼方式 165

10.3.5建立與手機的連線 167

10.3.6使用AT指令傳送簡訊 167

10.4小結 171

第11章嵌入式GUI程式開發 172

11.1LinuxGUI介紹 172

11.1.1LinuxGUI的發展 172

11.1.2常見的嵌入式GUI 173

11.2開發圖形界面程式 174

11.2.1安裝Qt開發環境 174

11.2.2建立簡單的Qt程式 176

11.2.3Qt庫編程結構 178

11.3深入Qt編程 179

11.3.1使用Widget 179

11.3.2對話框程式設計 181

11.3.3信號與槽系統 185

11.4移植Qtopia到ARM開發板 186

11.4.1需要的資源 186

11.4.2準備工作 187

11.4.3編譯主機Qt工具 187

11.4.4交叉編譯qtopia 189

11.5小結 190

第12章軟體項目管理 191

12.1原始碼管理 191

12.1.1什麼是軟體的版本 191

12.1.2版本控制的概念 192

12.2版本控制系統Subversion 193

12.2.1在Linux系統下使用Subversion服務端 193

12.2.2在Windows系統下使用TortoiseSVN客戶端 195

12.3開發文檔管理--常見的開發文檔 199

12.3.1可行性研究報告 200

12.3.2項目開發計畫 200

12.3.3軟體需求說明書 200

12.3.4概要設計 200

12.3.5詳細設計 200

12.3.6用戶手冊 201

12.3.7其他文檔 201

12.4使用trac管理軟體開發文檔 201

12.4.1安裝trac 201

12.4.2配置trac基本設定 202

12.4.3配置trac全局腳本 204

12.4.4設定trac的Web界面 205

12.5Bug跟蹤系統 208

12.5.1Bug管理的概念和作用 208

12.5.2使用Bugzilla跟蹤Bug 208

12.6小結 211

第3篇Liux系統篇

第13章ARM體系結構及開發實例 214

13.1ARM體系結構介紹 214

13.1.1ARM體系結構 214

13.1.2ARM指令集介紹 215

13.2編程模型 216

13.2.1數據類型 216

13.2.2處理器模式 216

13.2.3暫存器 217

13.2.4通用暫存器 217

13.2.5程式狀態暫存器 219

13.2.6異常處理 219

13.2.7記憶體和記憶體I/O映射 220

13.3記憶體管理單元 221

13.3.1記憶體管理介紹 221

13.3.2記憶體訪問順序 222

13.3.3地址翻譯過程 222

13.3.4訪問許可權 223

13.4常見接口和控制器 223

13.4.1GPIO接口 223

13.4.2中斷控制器 224

13.4.3RTC控制器 224

13.4.4看門狗定時器 225

13.4.5試驗:使用GPIO點亮LED 226

13.5小結 227

第14章深入Bootloader 228

14.1初識Bootloader 228

14.1.1PC(個人電腦)上的Bootloader 228

14.1.2什麼是嵌入式系統的Bootloader 229

14.1.3嵌入式系統常見的Bootloader 229

14.2U-Boot分析 230

14.2.1獲取U-Boot 230

14.2.2U-Boot工程結構分析 230

14.2.3U-Boot總體工作流程 232

14.3U-Boot啟動流程分析 233

14.3.1_start標號 233

14.3.2reset標號 235

14.3.3cpu_init_crit標號 237

14.3.4lowlevel_init標號 238

14.3.5relocate標號 239

14.3.6start_armboot()函式 240

14.3.7main_loop()函式 244

14.4移植U-Boot到開發板 248

14.4.1U-Boot移植的一般步驟 248

14.4.2移植U-Boot到目標開發板 249

14.4.3移植U-Boot的常見問題 250

14.5小結 251

第15章解析Linux核心 252

15.1基本知識 252

15.1.1什麼是Linux核心 252

15.1.2Linux核心版本 253

15.1.3如何獲取Linux核心代碼 253

15.1.4編譯核心 253

15.2Linux核心的子系統 260

15.2.1系統調用接口 260

15.2.2進程管理子系統 261

15.2.3記憶體管理子系統 262

15.2.4虛擬檔案系統 263

15.2.5網路堆疊 264

15.2.6設備驅動 265

15.2.7依賴體系結構的代碼 266

15.3Linux核心代碼的工程結構 266

15.3.1原始碼目錄布局 266

15.3.2幾個重要的Linux核心檔案 267

15.4核心編譯系統 268

15.4.1核心編譯系統基本架構 269

15.4.2核心頂層Makefile分析 269

15.4.3核心編譯檔案分析 274

15.4.4目標檔案清除機制 278

15.4.5編譯輔助程式 279

15.4.6KBuild變數 281

15.5小結 282

第16章嵌入式Linux啟動流程 283

16.1Linux核心初始化流程 283

16.2PC的初始化流程 284

16.2.1PCBIOS功能和作用 284

16.2.2硬碟的數據結構 285

16.2.3完整的初始化流程 286

16.3嵌入式系統的初始化 286

16.4Linux核心初始化 287

16.4.1解壓縮核心映像 287

16.4.2進入核心代碼 289

16.5啟動init核心進程 291

16.6根檔案系統初始化 292

16.6.1根檔案系統介紹 292

16.6.2掛載虛擬檔案系統 294

16.7核心交出許可權 300

16.8init進程 300

16.9初始化RAMDisk 301

16.9.1RAMDisk介紹 301

16.9.2如何使用RAMDisk 302

16.9.3實例:使用RAMDisk作為根檔案系統 302

16.10小結 303

第17章Linux檔案系統 304

17.1Linux檔案管理 304

17.1.1檔案和目錄的概念 304

17.1.2檔案的結構 305

17.1.3檔案的類型 305

17.1.4檔案系統的目錄結構 307

17.1.5檔案和目錄的存取許可權 308

17.1.6檔案系統管理 310

17.2Linux檔案系統原理 311

17.2.1非日誌檔案系統 311

17.2.2日誌檔案系統 311

17.3常見的Linux檔案系統 312

17.3.1ext2檔案系統 312

17.3.2ext3檔案系統 315

17.3.3ReiserFS檔案系統 315

17.3.4JFFS檔案系統 316

17.3.5cramfs檔案系統 318

17.4其他檔案系統 319

17.4.1網路檔案系統 319

17.4.2/proc影子檔案系統 320

17.5小結 323

第18章建立交叉編譯工具鏈 324

18.1什麼是交叉編譯 324

18.2需要哪些東西 325

18.3手工創建工具鏈 325

18.3.1準備工作——獲取原始碼 326

18.3.2開始了——建立工作環境 326

18.3.3建立Linux核心頭檔案 327

18.3.4編譯安裝binutils 330

18.3.5編譯安裝gcc的C編譯器 331

18.3.6編譯安裝glibc庫 332

18.3.7編譯安裝gcc的C、C++編譯器 333

18.3.8最後的工作 334

18.4使用腳本創建工具鏈 334

18.5更簡便的方法--獲取已編譯好的交叉編譯環境 336

18.6小結 336

第19章強大的命令系統BusyBox 337

19.1BusyBox簡介 337

19.1.1簡單易懂的BusyBox 337

19.1.2BusyBox工作原理 338

19.1.3安裝BusyBox 339

19.2交叉編譯BusyBox 341

19.3使用BusyBox 343

19.3.1BusyBox初始化 344

19.3.2目標板BusyBox安裝 346

19.4小結 348

第20章Linux核心移植 349

20.1Linux核心移植要點 349

20.2平台相關代碼結構 350

20.3建立目標平台工程框架 351

20.3.1加入編譯選單項 352

20.3.2設定宏與代碼檔案的對應關係 352

20.3.3測試工程框架 353

20.4建立目標平台代碼框架 354

20.4.1ARM處理器相關結構 354

20.4.2建立machine_desc結構 356

20.4.3加入處理函式 356

20.4.4加入定時器結構 357

20.4.5測試代碼結構 357

20.5構建目標板代碼 357

20.5.1處理器初始化 358

20.5.2連線埠映射 360

20.5.3中斷處理 361

20.5.4定時器處理 361

20.5.5編譯最終代碼 361

20.6小結 362

第21章核心和應用程式調試技術 363

21.1使用GDB調試應用程式概述 363

21.2基本的調試技術 363

21.2.1列出原始碼 366

21.2.2斷點管理 368

21.2.3執行程式 370

21.2.4顯示程式變數 370

21.2.5信號管理 371

21.2.6調試實例 371

21.3多進程調試 372

21.4調試意外終止的程式 374

21.5核心調試技術 376

21.5.1printk列印調試信息 376

21.5.2使用/proc虛擬檔案系統 377

21.5.3使用KDB調試工具 379

21.5.4KDB調試指令 382

21.6小結 384

第4篇Linux嵌入式驅動開發篇

第22章Linux設備驅動 386

22.1設備驅動介紹 386

22.2Linux核心模組 386

22.2.1核心模組簡介 387

22.2.2核心模組的結構 387

22.2.3核心模組的載入和卸載 388

22.2.4編寫一個基本的核心模組 389

22.2.5編譯核心模組 390

22.2.6為核心模組添加參數 391

22.3Linux設備驅動 392

22.3.1PCI局部匯流排介紹 392

22.3.2Linux設備驅動基本概念 393

22.3.3字元設備 394

22.3.4塊設備 396

22.3.5網路設備 396

22.4字元設備驅動開發實例 396

22.4.1開發一個基本的字元設備驅動 397

22.4.2測試字元設備驅動 399

22.5小結 400

第23章網路設備驅動程式 401

23.1網路基礎知識 401

23.1.1ISO/OSI網路參考模型 401

23.1.2TCP/IP協定 402

23.2乙太網基礎 404

23.2.1工作原理 405

23.2.2常見乙太網標準 405

23.2.3拓撲結構 406

23.2.4工作模式 406

23.3網卡工作原理 407

23.4核心網路分層結構 408

23.4.1核心網路結構 408

23.4.2與網路有關的數據結構 409

23.4.3核心網路部分的全局變數 410

23.5核心網路設備驅動框架 411

23.5.1net_device結構 411

23.5.2數據包接收流程 413

23.5.3數據包傳送流程 415

23.6實例:DM9000網卡驅動分析 416

23.6.1DM9000晶片介紹 416

23.6.2網卡驅動程式框架 416

23.6.3DM9000網卡驅動主要數據結構 417

23.6.4載入驅動程式 418

23.6.5停止和啟動網卡 423

23.6.6傳送數據包 425

23.6.7接收數據包 427

23.6.8中斷和定時器處理 429

23.7小結 431

第24章Flash設備驅動 432

24.1LinuxFlash驅動結構 432

24.1.1什麼是MTD 432

24.1.2MTD系統結構 433

24.2Flash設備基礎 434

24.2.1存儲原理 434

24.2.2性能比較 435

24.3核心MTD層 436

24.3.1mtd_info結構 436

24.3.2mtd_part結構 439

24.3.3mtd_partition結構 440

24.3.4map_info結構 440

24.3.5nand_chip結構 442

24.4Flash設備框架 443

24.4.1NORFlash設備驅動框架 443

24.4.2NANDFlash設備驅動框架 444

24.5Flash設備驅動實例--NORFlash設備驅動剖析 445

24.5.1數據結構 446

24.5.2驅動初始化 446

24.5.3驅動卸載 447

24.6Flash設備驅動實例--NANDFlash設備驅動分析 448

24.6.1S3C2440NAND控制器介紹 448

24.6.2數據結構 450

24.6.3驅動初始化 450

24.6.4驅動卸載 454

24.6.5初始化NAND控制器 455

24.6.6設定晶片操作 456

24.6.7電源管理 458

24.7小結 459

第25章USB驅動開發 460

25.1USB體系介紹 460

25.1.1USB設計目標 460

25.1.2USB體系概述 461

25.1.3USB體系工作流程 462

25.2USB驅動程式框架 462

25.2.1Linux核心USB驅動框架 462

25.2.2主機驅動結構 465

25.2.3設備驅動結構 468

25.2.4USB驅動程式框架 470

25.3USB驅動實例剖析 473

25.3.1USB串口驅動 473

25.3.2USB鍵盤驅動 475

25.4小結 478

相關詞條

相關搜尋

熱門詞條

聯絡我們