《ARM Linux嵌入式系統開發詳解》

ChinaUnix.net是一個以討論作業系統、軟體開發、資料庫技術、網路技術及伺服器存儲等技術為主的大型IT技術社區網站。ChjnaUnix.net的宗旨是給所有愛好IT技術、開源技術的朋友提供一個自由、開放和免費的交流空間。ChinaUniX.net的目標是建成中國最好的開源技術共享社區,為宣傳和推動開源技術及自由軟體在中國的套用發展做出貢獻。

基本信息

圖書信息

《ARM Linux嵌入式系統開發詳解》 《ARM Linux嵌入式系統開發詳解》

叢書名:Linux典藏大系

作者:弓雷

出版社:清華大學出版社

出版日期:2010-01

ISBN:9787302207290

版次:1

頁數:478

開本:16開

包裝:平裝

內容簡介

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

《ARM嵌入式Linux系統開發詳解》附帶1張DVD光碟,內容為專門為《ARM嵌入式Linux系統開發詳解》錄製的9小時視頻、《ARM嵌入式Linux系統開發詳解》涉及的原始碼、Ubuntu安裝光碟的鏡像檔案和另外贈送的35小時Linux專題學習視頻。

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

編輯推薦

一線技術人員全力打造,分享嵌入式開發技術盛宴!

《ARM嵌入式Linux系統開發詳解》以主流的ARM9硬體平台為基礎,結合大量的套用實例,從初學者的角度出發,全面、系統也闡述了嵌入式Linux統開發所涉及的方方面面知識。

《ARM嵌入式Linux系統開發詳解》先對嵌入式系統開發的基本概念和軟硬體平台進行了必要介紹,然後進一步分析了ARM處哩器的體系結構及功能特點

《ARM嵌入式Linux系統開發詳解》比較詳細地介紹了Linux系統的檔案操作、記憶體管理、網路通信、串口通信、多進程與多執行緒開發,Qt編程等內容另外,《ARM嵌入式Linux系統開發詳解》對Linux系統的軟體管理也作了必要介紹。

《ARM嵌入式Linux系統開發詳解》結合典型實例,深入剖析了Bootloader功能及移植方法、Linux檔案系統工作原理、嵌入式Linux啟動流程、Linux核心結構及移植方法等內容,《ARM嵌入式Linux系統開發詳解》結合字元設備驅動開發、dm9000網路適配器驅動開發、NORFIash設備驅動開發、NANDFlash設備驅動開發、USB驅動開發5個典型案例,介紹了Linux嵌入式驅動開發的相關技術。

《ARM嵌入式Linux系統開發詳解》作者長期致力於嵌入式Linux系統的開發和研究,有豐富的開發經驗和獨到見解。《ARM嵌入式Linux系統開發詳解》總結了他多年的嵌入式Linux系統開發的經驗

特別提示

《ARM嵌入式Linux系統開發詳解》適合培訓機構和大中專院校作為教材使用 為了方便教學,《ARM嵌入式Linux系統開發詳解》專門配備了教學PPT。

目錄

第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章嵌入式Linux33
4.1常見的嵌入式作業系統33
4.1.1VxWorks33
4.1.2WindowsCE34
4.1.3PalmOS34
4.1.4Symbian34
4.2嵌入式Linux作業系統34
4.2.1什麼是Linux35
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安裝UbuntuLinux38
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什麼是Cygwin50
5.2.2如何安裝Cygwin50
5.2.3安裝開發環境54
5.3Linux常用工具54
5.3.1Linuxshell和常用命令55
5.3.2文本編輯工具vi56
5.3.3搜尋工具find和grep57
5.3.4FTP工具61
5.3.5串口工具minicom63
5.4Windows常用工具65
5.4.1代碼編輯管理工具SourceInsight65
5.4.2串口工具XShell71
5.5ARM集成開發環境ADS72
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什麼是Makefile87
6.4.2它是如何工作的87
6.4.3如何使用Makefile87
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常見的嵌入式GUI173
11.2開發圖形界面程式174
11.2.1安裝Qt開發環境174
11.2.2建立簡單的Qt程式176
11.2.3Qt庫編程結構178
11.3深入Qt編程179
11.3.1使用Widget179
11.3.2對話框程式設計181
11.3.3信號與槽系統185
11.4移植QtopiaARM開發板186
11.4.1需要的資源186
11.4.2準備工作187
11.4.3編譯主機Qt工具187
11.4.4交叉編譯qtopia189
11.5小結190
第12章軟體項目管理191
12.1原始碼管理191
12.1.1什麼是軟體的版本191
12.1.2版本控制的概念192
12.2版本控制系統Subversion193
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安裝trac201
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跟蹤Bug208
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點亮LED226
13.5小結227
第14章深入Bootloader228
14.1初識Bootloader228
14.1.1PC(個人電腦)上的Bootloader228
14.1.2什麼是嵌入式系統的Bootloader229
14.1.3嵌入式系統常見的Bootloader229
14.2U-Boot分析230
14.2.1獲取U-Boot230
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初始化RAMDisk301
16.9.1RAMDisk介紹301
16.9.2如何使用RAMDisk302
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編譯安裝binutils330
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章強大的命令系統busybox337
19.1BusyBox簡介337
19.1.1簡單易懂的BusyBox337
19.1.2BusyBox工作原理338
19.1.3安裝BusyBox339
19.2交叉編譯BusyBox341
19.3使用BusyBox343
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什麼是MTD432
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

前言

隨著超大規模積體電路的發展,計算機處理器技術不斷提高,計算機晶片的處理能力越來越強,體積越來越小,計算機技術套用到生活的方方面面。與人們日常生活打交道最多的就是嵌入式系統,從目前廣泛使用的手機、MP3播放器到家用電器,嵌入式系統的套用無處不在。嵌入式系統的開發占整個計算機系統開發的比重也越來越高。

嵌入式系統開發與傳統的PC程式開發不同。嵌入式系統開發涉及軟體硬體的開發,是一個協同工作的統一體。目前,已經有許多的嵌入式系統硬體和作業系統軟體,其中套用最廣泛的是ARM嵌入式處理器和Linux系統,本書也將以ARM處理器和Linux作為講解對象,幫助讀者進入嵌入式開發領域。

目前嵌入式開發的書籍種類繁多,但是內容都比較有針對性。主要可以分成3類,一類是側重嵌入式硬體開發;一類側重嵌入式作業系統原理和設備驅動開發;還有一類是針對嵌入式系統應用程式開發。由於以上3類圖書都是針對某個特定領域編寫的,內容針對性強,不便於初學者學習。

本書從嵌入式初學者的角度出發,力求由淺入深地介紹嵌入式系統開發的各部分知識,幫助初學者快速進入嵌入式開...

相關詞條

相關搜尋

熱門詞條

聯絡我們