內容簡介
全書分3篇共19章,第1篇為基礎知識篇,介紹了Linux的移植、開發環境平台、Linux程式設計基礎及常用開發工具,引導讀者技術入門。第2篇為Linux驅動程式開發與實例篇,第3篇為Linux系統開發實例篇,實戰和商業價值高,利於讀者舉一反三,快速掌握Linux系統設計的流程,提高實際設計能力。本書適合計算機、自動化、電子及通信等相關專業的大學生,以及從事Linux開發的科研人員使用。
編輯推薦
工程技術的電子化、集成化和系統化促進了電子工程技術的發展,同時也促進了電子工程技術在社會各行業中的廣泛套用,從近年的人才招聘市場來看,電子工程師的人才需求更是一路走高。電子工程師如此緊俏,除需求不斷走高,人才供不應求外,另一重要原因則是電子工程師的門檻相對而言比較高,這個高門檻則來自於工程師的“經驗”和“實踐”!因此,為了滿足讀者學習和工作需要,解決各種工作中的專業問題,我們緊緊圍繞“經驗”和“實踐”,精心策劃組織了此套叢書。
1.叢書範圍
現代電子科學技術的一個特點是多學科交叉,因此,工程師應當了解、掌握兩門以上的相關學科,知識既精深又廣博是優秀的工程師成長為某領域專家的重要標誌。本叢書內容涉及軟體開發、研發電子及嵌入式項目開發等,包括單片機、USB接口、ARM、CPLD/FPGA、DSP和移動通信系統等。
2.讀者對象
本套書面向各領域的初、中級用戶,具體為高校計算機、電子信息、通信工程、自動化控制專業在校大學生,以及從事電子開發和套用行業的科研人員。
3.內容組織形式
本套書緊緊圍繞“經驗”和“實踐”,首先介紹一些相關的基礎知識,然後根據不同的模組或套用領域,分篇安排應用程式實例的精講。基礎知識用來為一些初級讀者打下一定的知識功底;基礎好一點的讀者則可以跳過這一部分,直接進入實例的學習。
4.實例特色
在套用實例的安排上,著重突出“套用”和“實用”兩個基本原則,安排具有代表性、技術領先性,以及套用廣泛的典型實例,讓讀者學習借鑑。這些實例是從作者多年程式開發項目中挑選出來的,也是經驗的歸納與總結。
在套用實例的講解上,既介紹了設計原理、基本步驟和流程,也穿插了一些經驗、技巧與注意事項。特別在程式設計思路上,在決定項目開發的質量和成功與否的細節上,儘可能地用簡潔的語言來清晰闡述大眾易於理解的概念和思想;同時,程式代碼部分做了很詳細的中文注釋,有利於讀者舉一反三,快速套用和提高。
5.光碟內容
本套書的光碟中包含了豐富的實例原圖檔案和程式原始碼,讀者稍加修改便可套用於自己的工作中或者完成自己的課題(畢業設計),物超所值。讀者使用之前,最好先將光碟內容全部複製到電腦硬碟中,以便於以後可以直接調用,而不需要反覆使用光碟,提高操作速度和學習效率。
6.學習指南
對於有一定基礎的讀者,建議直接從實例部分入手,邊看邊上機練習,這樣印象會比較深,效果更好。基礎差一點的讀者請先詳細學習書中基礎部分的理論知識,然後再進行套用實例的學習。在學習中,儘量做到反覆理解和演練,以達到融會貫通、舉一反三的功效;特別希望儘量和自己的工作設計聯繫起來,以達到“即學即會,學以致用”的最大化境界。
本套叢書主要偏重於實用性,具有很強的工程實踐指導性。期望讀者在學習中順利、如意!
圖書目錄
第1篇 Linux基礎知識
第1章 嵌入式基礎入門 2
1.1 嵌入式作業系統簡介 2
1.1.1 嵌入式系統的基本概念 2
1.1.2 嵌入式系統的核心介紹 3
1.1.3 嵌入式系統的套用領域 4
1.2 Linux作業系統概述 5
1.2.1 嵌入式Linux發展現狀 5
1.2.2 Linux相關的常用術語 6
1.3 Linux作業系統的移植 8
1.3.1 BootLoader技術詳解 8
1.3.2 Linux核心基本結構 17
1.3.3 移植Linux作業系統 28
1.4 本章總結 32
第 2章 Linux系統開發環境平台 33
2.1 進程/執行緒管理 33
2.1.1 進程/執行緒的概念 33
2.1.2 進程基本操作 37
2.1.3 進程通信與同步 49
2.1.4 執行緒基本操作 57
2.1.5 簡單的多執行緒編程 59
2.2 檔案系統結構和類型 62
2.2.1 FAT檔案系統 62
2.2.2 RAMFS核心檔案系統 66
2.2.3 JFFS與YAFFS檔案系統 68
2.2.4 EXT2/EXT3檔案系統 71
2.2.5 /proc檔案系統 74
2.2.6 Linux檔案操作函式 75
2.3 存儲管理 79
2.3.1 MTD記憶體管理 79
2.3.2 Linux記憶體管理 83
2.4 設備管理 84
2.4.1 概述 84
2.4.2 字元設備與塊設備 84
2.4.3 主設備號和次設備號 87
2.5 本章總結 88
第3章 嵌入式Linux程式設計基礎 89
3.1 建立嵌入式Linux交叉編譯環境 89
3.1.1 編譯環境概述 89
3.1.2 建立交叉編譯環境流程 92
3.2 工程管理器make 97
3.2.1 make概述 97
3.2.2 Makfile檔案書寫規則 101
3.3 Linux C/C++程式設計 104
3.3.1 C/C++程式結構 104
3.3.2 C/C++數據類型 107
3.3.3 表達式/語句、函式 108
3.3.4 C/C++設計注意事項 111
3.4 Linux彙編程式設計 117
3.4.1 Linux彙編語法格式 118
3.4.2 彙編程式實例 119
3.5 Linux Shell語言編程 120
3.5.1 Shell環境變數及配置檔案 121
3.5.2 Shell編程實例 123
3.6 Linux Perl語言編程 124
3.6.1 Perl基本程式 124
3.6.2 Perl變數 125
3.6.3 檔案句柄和檔案操作 128
3.6.4 循環結構 129
3.6.5 條件結構 130
3.7 本章總結 131
第4章 Linux常用開發工具 132
4.1 GCC編譯器 132
4.1.1 GCC版本信息 132
4.1.2 GCC目錄結構 132
4.1.3 GCC執行過程 133
4.1.4 GCC的基本用法和選項 134
4.1.5 g++ 134
4.2 gdb調試器 135
4.2.1 基本用法和選項 135
4.2.2 gdb常用命令 135
4.3 Linux彙編工具 136
4.3.1 彙編器 136
4.3.2 連結器 136
4.3.3 調試器 137
4.3.4 系統調用 137
4.3.5 命令行參數 137
4.3.6 GCC內聯彙編 138
4.4 Linux調試工具 139
4.4.1 JTAG調試工具 139
4.4.2 kgdb核心調試環境 144
4.5 Linux圖形開發工具 149
4.5.1 GUI圖形界面開發 149
4.5.2 GTK圖形開發工具 157
4.5.3 QT圖形開發工具 161
4.6 本章總結 167
第2篇 Linux驅動程式開發與實例
第5章 Linux設備驅動基礎 170
5.1 驅動程式基本概念 170
5.1.1 驅動程式與應用程式的區別 170
5.1.2 核心版本與編譯器的版本依賴 171
5.2 設備驅動模組概述 171
5.2.1 模組的基本概念 171
5.2.2 模組的初始化和退出 172
5.2.3 Linux核心模組載入 174
5.3 Linux設備驅動結構分析 176
5.3.1 核心和用戶接口 176
5.3.2 inode節點 177
5.3.3 File結構 178
5.4 常用接口函式介紹 181
5.5 驅動程式的調試 187
5.6 本章總結 189
第6章 網卡驅動程式開發 190
6.1 網卡概述 190
6.2 RTL8193網卡驅動 190
6.2.1 網卡驅動的初始化 191
6.2.2 網卡數據收發 197
6.3 典型實例——Ralink無線網卡驅動開發 198
6.3.1 Ralink無線網卡 198
6.3.2 802.11無線通信協定的選用 199
6.3.3 設備驅動關鍵數據結構 200
6.3.4 rt2500無線網卡驅動分析 202
6.3.5 rt2500程式原始碼 207
6.4 本章總結 215
第7章 顯示卡驅動程式開發 216
7.1 顯示卡驅動概述 216
7.1.1 Linux framebuffer 216
7.1.2 幀緩衝設備數據結構 220
7.2 典型實例——顯示卡Framebuffer驅動實現 225
7.2.1 Framebuffer驅動框架程式 225
7.2.2 NVDIA顯示卡設備驅動檔案 231
7.3 本章總結 233
第8章 音效卡驅動程式開發 234
8.1 音效卡驅動概述 234
8.2 OSS音效卡驅動 234
8.3 ALSA音效卡驅動 235
8.4 典型實例——AC97音效卡驅動實現 237
8.4.1 AC97驅動分析 237
8.4.2 Realtek音效卡驅動配置 241
8.5 本章總結 243
第9章 USB驅動程式開發 244
9.1 USB設備驅動概述 244
9.2 USB驅動設備示例 245
9.2.1 Linux驅動程式概述 245
9.2.2 驅動程式分析 246
9.3 典型實例——單片機的主從通信實例 253
9.3.1 主從通信介紹 253
9.3.2 USB設備驅動程式 254
9.3.3 主機程式原始碼 260
9.4 本章總結 261
第10章 快閃記憶體Flash驅動程式開發 262
10.1 Flash快閃記憶體基礎 262
10.2 Flash MTD技術 264
10.3 典型實例1——NAND Flash驅動實例 265
10.3.1 NAND Flash驅動設備 265
10.3.2 NAND Flash驅動原始碼 266
10.4 典型實例2——NOR Flash驅動實例 270
10.4.1 晶片驅動與MTD原始設備 270
10.4.2 NOR Flash驅動分析 270
10.4.3 NOR Flash驅動原始碼 274
10.5 本章總結 276
第3篇 Linux系統開發實例
第11章 嵌入式系統開發的模式與流程 278
11.1 嵌入式系統的結構 278
11.1.1 嵌入式系統的硬體架構 278
11.1.2 嵌入式系統的軟體結構 278
11.2 嵌入式開發的模式及流程 279
11.2.1 嵌入式系統開發模式 279
11.2.2 嵌入式系統開發流程 280
11.3 本章總結 282
第12章 工業溫度監控設備開發實例 283
12.1 套用環境與硬體設計概要 283
12.1.1 嵌入式Linux在工業控制領域的套用 283
12.1.2 工控串列通信協定標準 286
12.2 相關開發技術——異步串列通信接口 288
12.2.1 異步串列通信標準 288
12.2.2 設定串口控制信號 290
12.2.3 讀入串口控制信號 291
12.2.4 檔案Open()系統調用 292
12.3 實例——基於DS1820的實時溫度監控系統 292
12.3.1 系統基本結構 293
12.3.2 系統工作流程 296
12.3.3 系統模組原始碼實現 298
12.4 本章總結 306
第13章 實時視頻採集系統開發實例 307
13.1 套用環境與硬體設計概要 307
13.2 相關開發技術 308
13.2.1 視頻圖像壓縮技術 308
13.2.2 視頻採集驅動 310
13.2.3 視頻驅動載入運行 313
13.3 實例——基於MV86S02實時視頻採集系統設計 313
13.3.1 系統基本結構 313
13.3.2 系統工作流程 316
13.3.3 系統模組原始碼實現 319
13.3.4 視頻數據比較及分析 335
13.4 本章總結 336
第14章 指紋識別門禁系統開發實例 337
14.1 套用環境與硬體設計概要 338
14.2 相關開發技術 340
14.2.1 指紋識別原理 340
14.2.2 設備驅動編寫框架 344
14.2.3 指紋晶片驅動 346
14.3 實例——基於ARM Linux的指紋識別門禁系統 347
14.3.1 系統基本結構 347
14.3.2 系統工作流程 349
14.3.3 系統模組原始碼實現 350
14.4 本章總結 360
第15章 基於RTL8019的乙太網套用系統開發實例 361
15.1 乙太網套用技術概述 361
15.2 相關開發技術 362
15.2.1 基於RTL8019的乙太網幀傳輸原理 362
15.2.2 RTL8019的初始化 363
15.2.3 RTL8019驅動程式的框架 364
15.2.4 數據結構和函式 365
15.2.5 RTL8109驅動程式的載入 368
15.3 實例——基於RTL8019的乙太網套用系統設計 368
15.3.1 系統基本結構 368
15.3.2 系統工作流程 371
15.3.3 系統模組原始碼實現 372
15.3.4 系統調試 380
15.4 本章總結 381
第16章 無線網路數據傳輸系統開發實例 382
16.1 無線網路傳輸系統簡介 382
16.2 相關開發技術 383
16.2.1 無線網路接入技術 383
16.2.2 基於PCMCIA的無線網卡接口 385
16.2.3 PCMCIA驅動程式 386
16.3 實例——基於PCMCIA的
16.3 無線網路嵌入式前端系統設計 387
16.3.1 系統基本結構 387
16.3.2 系統工作流程 389
16.3.3 系統模組原始碼實現 391
16.3.4 系統調試 398
16.4 本章總結 398
第17章 基於PDIUSBD12的數據傳輸系統實例 399
17.1 USB套用環境與硬體設計概要 400
17.2 相關開發技術——USB系統與匯流排驅動 401
17.2.1 USB系統組成 401
17.2.2 USB Host匯流排驅動 402
17.2.3 USB Device匯流排驅動 403
17.3 實例——基於PDIUSBD12的數據傳輸設計 406
17.3.1 系統基本結構 406
17.3.2 系統工作流程 412
17.3.3 系統模組原始碼實現 412
17.4 本章總結 424
第18章 家庭安全監控系統設計實例 425
18.1 套用環境與硬體設計概要 425
18.1.1 系統功能和組成 425
18.1.2 系統模組功能描述 426
18.2 系統硬體結構 430
18.2.1 Linux客戶端系統硬體結構 430
18.2.2 感測器系統硬體結構 433
18.3 系統軟體結構 435
18.3.1 Linux客戶端系統軟體結構 435
18.3.2 感測器系統軟體結構 438
18.4 Linux客戶端系統設計實現 440
18.4.1 系統數據結構設計 440
18.4.2 通信模組設計說明 441
18.4.3 顯示模組設計說明 442
18.4.4 用戶管理模組設計說明 443
18.4.5 系統設定模組設計說明 445
18.4.6 客戶端主要代碼與注釋 445
18.5 系統主要模組設計實現 447
18.5.1 紅外監控模組設計說明 447
18.5.2 報警模組(warnning) 448
18.5.3 觸發監控模組 449
18.5.4 管理模組 450
18.5.5 主要代碼與注釋 453
18.6 本章總結 459
第19章 移動校園系統設計實例 460
19.1 套用環境與硬體設計概要 460
19.1.1 系統功能和組成 460
19.1.2 系統模組功能和軟體圖 460
19.2 系統硬體結構 462
19.3 系統軟體結構 463
19.3.1 軟體整體結構 463
19.3.2 軟體模組結構 464
19.3.3 接口設計 467
19.3.4 運行過程設計 468
19.3.5 系統數據結構設計 469
19.3.6 搭建開發環境 470
19.4 系統模組程式代碼 472
19.4.1 主函式 472
19.4.2 Syllabus課表模組 472
19.4.3 BBS論壇模組 474
19.4.4 Map地圖模組 476
19.4.5 Message系統訊息模組 478
19.5 本章總結 478
圖書前言
Linux是一套免費使用和自由傳播的類UNIX作業系統,這個系統是由世界各地成千上萬的程式設計師設計和實現的。它以高效性和靈活性著稱,並且能夠在PC上實現全部的UNIX特性,具有多任務、多用戶的能力。Linux現在受到了廣大計算機愛好者的喜愛,原因主要有兩個:一是Linux屬於自由軟體,用戶不用支付任何費用就可以獲得它及其原始碼,並且可以根據自己的需要進行必要的修改;另一個原因是它具有UNIX的全部功能。
隨著Linux在我國政府、金融、電信、消費電子等行業的廣泛套用,企業對Linux人才的需求也開始持續升溫。目前IT業內許多著名大企業都有急劇擴招Linux人才的傾向。巨大的人才需求將使更多的人參與到Linux學習的行列中來。
Linux套用領域比較多,比較常用的有伺服器配置與套用、驅動設備開發、嵌入式系統開發等。目前市場上雖存在一些Linux驅動程式與嵌入式系統設計圖書,但大多以介紹基礎理論為主,缺乏商業套用案例的實踐指導。本書就是為了彌補這種不足而精心組織編寫的。
本書內容
全書以理論為輔、實踐為主,重點以典型實例的形式,詳細介紹嵌入式Linux驅動程式與系統開發的思路、方法與實際套用案例。全書分3篇共19章,具體內容如下:
第1~4章為基礎知識篇,主要講述了嵌入式基礎入門、Linux環境開發平台、C程式設計基礎、Linux常用開發工具。通過本部分學習,初級讀者可以具備一定的Linux程式設計功底;基礎好一點的讀者則可以跳過這一部分。
第5~10章為Linux驅動程式開發與實例篇,結合6個實際案例闡述了網卡驅動、音效卡驅動、顯示卡驅動、USB驅動、快閃記憶體Flash驅動的開發原理技術和套用。
第11~19篇為Linux系統開發實例篇,安排了8個實際套用系統實例,涵蓋工業設備、視頻處理、指紋識別、網路傳輸通信、攝像監控、移動校園系統等領域,這些實例具有代表性、技術領先性、套用廣泛性及熱門性的特點,全部調試通過並進入商品化,是作者多年開發經驗的歸納與總結。
本書特色
與同類型書相比,本書主要具備以下一些特色。
(1)整體講解思路:首先簡要講述了Linux嵌入式系統開發的環境平台、程式基礎和常用開發工具,然後是驅動程式與系統開發典型實例的介紹,並穿插了一些經驗、技巧與注意事項,符合讀者循序漸進的學習過程。
(2)包括GUI、QT圖形工具、驅動程式開發及系統實例的介紹,使本書在內容上更加完美、全面。
(3)本書6個驅動程式實例和8個套用系統實例,全部典型實用,涉及Linux開發的諸多熱門與核心技術,工程實戰價值高。
(4)本書不但提供了程式設計的詳細思路與流程,而且對實例的程式代碼做了詳細注釋,利於讀者理解和鞏固知識點,學會舉一反三。
(5)光碟中包含了豐富的實例硬體電路圖檔案和程式原始碼,讀者稍加修改,便可套用於自己的工作中或者完成自己的課題設計,物超所值。
光碟的內容說明 該光碟為實例素材檔案,按照章節序號來組織,每章包括電路圖、程式代碼兩部分內容。其中,“電路圖”資料夾中的內容為各章的電路圖,多用Protel軟體製作。
光碟的使用說明 光碟中的程式需要採用C語言的編譯軟體打開閱讀,也可以使用“UltraEdit”等軟體打開閱讀或者編輯。
系統要求 該光碟運行只需一般的PC就可以。系統配置推薦為256MB以上記憶體,1280×1024解析度,32MB以上顯存。
本書讀者對象為計算機、電子信息及相關專業的在校大學生,還有從事Linux嵌入式開發的初、中級設計人員。
本書主要由羅苑棠編寫。另外參加編寫的人員還有唐清善、邱寶良、周克足、劉 斌、李亞捷、李永懷、李寧宇、劉偉捷、黃小歡、嚴劍忠、黃小寬、李彥超、付軍鵬、張廣安、賈素龍、王艷波、金平、徐春林、謝正義、鄭貞平、張小紅等。他們在資料收集、整理和技術支持方面做了大量的工作,在此一併向他們表示感謝!
由於時間倉促,再加之作者的水平有限,書中難免存在一些不足之處,歡迎廣大讀者批評和指正,聯繫方式[email protected]。
編 者
2008年11月