《嵌入式系統設計從入門到精通——基於S3C2410和Linux》

《嵌入式系統設計從入門到精通——基於S3C2410和Linux》,作者覃朝東,北京航空航天大學出版社2009年3月出版。

基本信息

內容簡介

封面封面

本書介紹了以ARM處理器(S3C2410)為核心的嵌入式系統設計,由淺到深介紹嵌入式系統的硬體和軟體設計。首先介紹如何建立嵌入式開發的軟體、硬體環境,接著介紹引導程式和作業系統的移植。通過一個簡單的“Hello,World!”程式,讓讀者了解最基本的嵌入式系統。嵌入式系統開發很大一部分工作是設備驅動程式的編寫,本書詳細講解Linux系統下I2C、串口、乙太網口、LCD和Flash等設備驅動程式。最後簡單介紹嵌入式系統最基本的電磁兼容設計。本書適合從事嵌入式系統設計、研究的工程技術人員用作參考書,也可供嵌入式系統相關專業的本科生或研究生作為教材或參考書。

前言

很多年前,實驗室里有位老師經常和我們說起“嵌入式系統”,大家有很多疑問:“嵌入式系統”到底是什麼?32位單片機和8位單片機的差別是什麼?32位單片機系統的開發能不能像8位單片機一樣方便?經過多年實際從事嵌入式系統開發工作之後,仍然不能給出一個完美的答案,說明什麼是“嵌入式系統”。而與此同時,幾乎生活中的所有電器設備都和嵌入式系統有關,如掌上PDA、移動計算設備、電視機頂盒、手機上網、數位電視、多媒體、汽車、微波爐、數位相機、家庭自動化系統、電梯、空調、安全系統、自動售貨機、蜂窩式電話、消費電子設備、工業自動化儀表與醫療儀器等。其實,基於8051單片機的系統也都納入了“嵌入式系統”的範疇。ARM處理器在嵌入式系統領域占據重要的地位,2008年ARM公司宣布由其合作夥伴出貨的處理器總量已超過100億個,年出貨量已接近30億個。因此,學習基於ARM處理器的嵌入式系統設計就比較有實用的意義。Linux是一個原始碼開放、免費的作業系統,並且支持包括ARM在內的多種處理器。目前有很多關於Linux核心分析、設備驅動的書籍。因此,Linux無論是在商業套用上還是在教學使用中都有巨大的優勢。本書的例子多數基於S3C2410處理器和Linux2.6.22作業系統。在實際工作中,選擇哪種處理器和哪一個作業系統會有多方面的考慮,包括成本、供貨和開發周期等。因此,學習嵌入式系統開發,最重要的是掌握一種方法,即面對一個新的硬體平台和作業系統,應該從哪裡著手進行考慮,抓住問題的關鍵點。在學習過程中,經常要考慮的問題是:“如果這是另外一個晶片,應該怎么辦?”任何一本書,都只能在某一個特定的硬體和軟體的平台上分析、討論問題。例如本書中大部分例子所使用的S3C2410處理器,儘管目前仍在大量使用,但總會有新型號的產品替代它(也許是S3C2440或是其他)。本書的第1章簡單介紹基於ARM處理器的嵌入式系統開發的基礎知識。第2章介紹嵌入式系統開發的硬體和軟體環境。要真正地理解嵌入式系統,就要親自動手做實驗,而建立實驗的工作環境就是邁出了第一步。第3章介紹在一個最小系統的硬體平台上實現一個“Hello,World!”程式。說明只要你願意,就可以像8051單片機的開發一樣去寫程式。同時,也讓讀者從一個簡單的例子去學習如何使用開發環境。第4章詳細介紹了引導程式BootLoader的移植。BootLoader是嵌入式系統很重要的組成部分,是系統開發首先要完成的代碼,也是系統運行時運行的第一段代碼。同時,BootLoader是相對獨立的一個小程式,值得深入研究,可以加深對嵌入式系統的理解。第5章介紹Linux作業系統的移植,列出了移植時需要編寫、修改的代碼檔案及其所在目錄。Linux是一個複雜的作業系統,如果要深入理解核心的原理,讀者可以參考本書列出的參考文獻。第6~11章介紹了常見設備驅動程式,包括驅動程式的結構及進行具體開發時需要做的工作。Linux對常用設備的驅動程式給出了很好的架構,理解了這種架構,可以大大減少開發工作量。這部分並不希望全面介紹Linux驅動程式,而是著重在於從硬體工作原理的角度去學習設備驅動程式。從應用程式到作業系統標準接口,再到設備驅動程式,最後到設備,可以根據數據的流向去理解系統的工作原理,理解硬體和軟體是如何結合在一起的。第12章簡單介紹了嵌入式系統設計時需要考慮的電磁兼容問題。電磁兼容是工程師必須面對的問題,必須認真對待。從事嵌入式系統開發的工程師需要具備硬體和軟體兩方面的知識。儘管大多數的公司都會有硬體工程師和軟體工程師,大家有不同的職責。但如果硬體工程師只懂硬體,軟體工程師只懂軟體,在嵌入式系統開發過程中,就必然有解決不了的問題。本書包括了嵌入式系統開發的硬體和軟體兩部分內容。8051單片機開發的工程師,通常都熟悉整個系統的硬體和軟體設計。基於32位處理器的嵌入式系統開發工程師同樣也可以熟悉系統的硬體和軟體,但是需要付出更多的努力,需要學習作業系統的知識。隨著CPU速度的提高,還需要學習高速數字電路的知識,以及由此引進的信號完整性和電磁兼容等問題。而這些問題的任何一個分支都值得專門研究,也許花費一生的精力,也未必談得上是精通。雖然僅僅通過學習這本書並不能使你達到精通嵌入式系統開發的程度,但是希望讀者通過本書能夠了解嵌入式系統開發在實際套用中需要做哪些工作,以便得到一些新的啟發,對產品開發、科研工作有所幫助;通過深入學習硬體設計、Linux作業系統核心等知識,逐步達到精通嵌入式系統設計的程度。書中難免有錯誤存在,敬請廣大讀者批評指正,可以傳送郵件至[email protected],就各種技術問題進行探討。

覃朝東
2008年11月於廣州

目錄

第1章ARM嵌入式系統概論
1.1ARM處理器系列1
1.2ARM處理器的系統結構2
1.3ARM處理器的選擇2
1.4作業系統的選擇5
1.4.1ARMLinux5
1.4.2μC/OSII6
1.4.3eCos6
1.5ARM嵌入式系統的一般結構7
1.5.1ARM嵌入式系統的硬體結構7
1.5.2ARM嵌入式系統的軟體結構8
1.6硬體基礎知識9
1.6.1電容9
1.6.2電感和磁珠11
1.6.3電阻11
1.6.4電平轉換12
第2章嵌入式開發環境
2.1建立嵌入式系統的硬體開發環境13
2.1.1恆溫烙鐵13
2.1.2熱風槍14
2.1.3萬用表14
2.1.4示波器15
2.2建立嵌入式系統的軟體開發環境16
2.2.1在虛擬機上運行Linux作業系統16
2.2.2其他常用輔助工具(securecrt、超級終端和串口工具)17
2.3研發調試燒寫工具18
2.3.1製作JTAG燒寫下載線18
2.3.2燒寫程式Jflash簡介20
2.4深入分析Jflash20
2.4.1計算機並行口編程20
2.4.2Jflash源檔案22
2.4.3main函式22
2.4.4Jflash中的JTAG技術細節27
2.4.5移植Jflash到新的硬體平台33
2.4.6NorFlash的燒寫過程40
2.4.7NandFlash的燒寫過程43
2.5編譯環境的建立47
第3章嵌入式系統的“Hello,World!”
3.1最小系統硬體設計48
3.2嵌入式系統的“Hello,World!”51
3.3代碼解釋55
第4章引導程式
4.1BootLoader概述65
4.2處理器啟動的硬體設計69
4.3BootLoader(vivi)的代碼分析73
4.4從NandFlash裝載引導程式85
4.5vivi的移植89
第5章Linux作業系統移植
5.1Linux作業系統目錄結構106
5.2引導程式與Linux作業系統108
5.3移植到新平台的相關代碼分析110
5.4編譯核心124
5.5製作根檔案系統127
第6章linux設備驅動程式
6.1概述131
6.2Linux設備驅動模型132
6.2.1sysfs檔案系統132
6.2.2核心相關數據結構133
6.3一個簡單的設備驅動程式136
6.4設備驅動程式與硬體142
6.5用戶程式和核心之間傳遞數據144
6.6中斷處理146
6.7軟中斷和tasklets149
6.8/proc檔案系統154
第7章I2C匯流排設備
7.1I2C匯流排接口設計157
7.2簡單的I2C設備驅動程式165
7.3Linux的I2C驅動程式結構170
7.4用戶模式下訪問I2C設備178
7.5I2C接口的實時時鐘設備驅動179
第8章串列通信接口
8.1串列通信接口規範189
8.2RS485規範192
8.3串列接口硬體設計193
8.4RS485接口硬體設計197
8.5Linux串口設備驅動程式198
第9章Flash存儲設備
9.1概述220
9.2Flash硬體接口設計221
9.3MTD驅動程式結構223
9.4NorFlash設備驅動程式230
9.5NandFlash設備驅動程式232
9.6Yaffs2檔案系統239
第10章乙太網接口
10.1概述251
10.2乙太網接口硬體設計253
10.3Linux網路設備驅動程式結構255
10.4dm9000驅動程式267
第11章液晶顯示屏接口設計
11.1概述282
11.2液晶屏接口設計283
11.3通用I/O接口驅動液晶屏294
11.4Linux幀緩衝設備驅動程式結構296
11.5S3C2410液晶顯示設備驅動程式302
第12章嵌入式系統的電磁兼容基本設計
12.1概述314
12.2浪涌防護設計316
12.3電快速瞬變脈衝群防護設計320
12.4靜電防護設計323
參考文獻330

相關詞條

相關搜尋

熱門詞條

聯絡我們