久久中文视频-久久中文网-久久中文亚洲国产-久久中文字幕久久久久-亚洲狠狠成人综合网-亚洲狠狠婷婷综合久久久久

以文本方式查看主題

-  曙海教育集團論壇  (http://www.xinguifushi.cn/bbs/index.asp)
--  Linux驅(qū)動開發(fā)  (http://www.xinguifushi.cn/bbs/list.asp?boardid=33)
----  嵌入式設(shè)計及Linux驅(qū)動開發(fā)指南——基于ARM9處理器  (http://www.xinguifushi.cn/bbs/dispbbs.asp?boardid=33&id=1698)

--  作者:wangxinxin
--  發(fā)布時間:2010-11-24 8:33:09
--  嵌入式設(shè)計及Linux驅(qū)動開發(fā)指南——基于ARM9處理器
我也是剛剛接觸嵌入式Linux開發(fā),感覺這門技術(shù)相對而言需要軟件知識(操作系統(tǒng)、C編程)比硬件知識更多些。所以這幾個星期來,作為一個自動化專業(yè)的學(xué)生,我深深感覺到自己軟件知識的匱乏。但畢設(shè)又不能不按時完成,為了更快掌握嵌入式開發(fā)的知識,同時記錄下自己學(xué)習(xí)的歷程,我把讀過的這本書摘要記錄下來。一方面便于自己對知識的整理回顧,另一方面也方便和大家學(xué)習(xí)交流。

這本書由孫天澤、袁文菊、張海峰編著。雖稱不上經(jīng)典,但電子工業(yè)出版社(我最信賴的出版社)的字號擺在那。而且,我把這份筆記貼出來,并不是想以一個老鳥的身份現(xiàn)身說法,而是希望和大家創(chuàng)造一個寫讀書筆記的氛圍,對初學(xué)者(包括我自己)的入門以及大家選擇圖書有所幫助。

《嵌入式設(shè)計及Linux驅(qū)動開發(fā)指南--基于ARM9處理器》

讀書筆記

第一章嵌入式系統(tǒng)基礎(chǔ)

1、 嵌入式系統(tǒng)定義:

"嵌入式系統(tǒng)是用來控制或者監(jiān)視機器、裝置、工廠等大規(guī)模系統(tǒng)的設(shè)備。"

--電氣工程師協(xié)會

  "嵌入到對象體系中的專用計算機系統(tǒng)"

--北京航空航天大學(xué)何立民教授

  "嵌入性"、"專用性"與"計算機系統(tǒng)"是嵌入式系統(tǒng)的三個基本要素。

2、 嵌入式操作系統(tǒng):

硬實時系統(tǒng)有一個剛性的、不可改變的時間限制,它不允許任何超出時限的錯誤超時錯誤會帶來損害甚至導(dǎo)致系統(tǒng)失敗、或者導(dǎo)致系統(tǒng)不能實現(xiàn)它的預(yù)期目標(biāo)。

軟實時系統(tǒng)的時限是柔性靈活的,它可以容忍偶然的超時錯誤。失敗造成的后果并不嚴(yán)重,僅僅是輕微地降低了系統(tǒng)的吞吐量。

我們可以認(rèn)為至少嵌入式系統(tǒng)都是軟實時系統(tǒng),所有的嵌入式系統(tǒng)都是實時系統(tǒng),但并不是所有的實時系統(tǒng)都是嵌入式系統(tǒng)。

常用的嵌入式操作系統(tǒng)有:Linux, uC/OS, Windows CE, VxWorks, Palm OS, QNX等。

3、 選擇Embedded OS的原則:

* 系統(tǒng)成本;

* 市場進(jìn)入時間及技術(shù)支持;

* 可移植性;

* 可利用資源;

* 系統(tǒng)定制能力。

第二章 基于ARM9處理器的硬件開發(fā)平臺

1、 ARM的歷史:

ARM(Advanced RISC Machine)公司于1990年11月在英國劍橋成立。

1991年,ARM推出第一個嵌入式RISC核心--ARM6系列處理器,VLSI、夏普、GEC Plessey、德州儀器、Cirrus Logic等公司相繼同ARM公司簽署了授權(quán)協(xié)議。

1998年4月,ARM在倫敦證券交易所和納斯達(dá)克交易所上市。

ARM中國安謀咨詢上海有限公司于2002年7月在中國上海成立。

目前基于ARM核的處理器有以下幾類:

* ARM7家族;

* ARM9家族;

* ARM9E家族;

* ARM10E家族;

* ARM11家族;

* SecurCore家族;

* OptimoDE數(shù)據(jù)引擎內(nèi)核;

* MPCore多處理器家族;

* Intel公司的StrongARM/XScale。

  2、ARM7和ARM9處理器的主要區(qū)別:

  指令流水線:

ARM7:三級,(取指令,譯碼,執(zhí)行);

ARM9:五級,(取指,譯碼,執(zhí)行,緩沖/數(shù)據(jù),回寫)。

3、三星S3C2410X處理器:

基于ARM920T核(由ARM9TDMI、存儲管理單元MMU和高速緩存三部分組成),片上資源包括:

* 1個LCD控制器(支持STN和TFT帶有觸摸屏的液晶顯示屏);

* SDRAM控制器;

* 3個通道的UART;

* 4個通道的DMA;

* 4個具有PWM功能的計時器和1個內(nèi)部時鐘;

* 8通道的10位ADC;

* 觸摸屏接口;

* I2S總線接口;

* 2個USB主機接口,1個USB設(shè)備接口;

* 2個SPI接口;

* SD接口和MMC卡接口;

* 看門狗計數(shù)器;

* 117位通用I/O口和24位外部中斷源;

第三章 調(diào)試嵌入式系統(tǒng)程序

1、 嵌入式系統(tǒng)調(diào)試方法:

1) 實時在線仿真(In-Circuit Emulator, ICE)

* 優(yōu)點:功能非常強大,軟硬件均可做到完全實時在線調(diào)試。

* 缺點:價格昂貴。

2) 模擬調(diào)試

* 優(yōu)點:簡單方便,不需要目標(biāo)板,成本低。

* 缺點:功能非常有限,無法實時調(diào)試。

3) 軟件調(diào)試

* 優(yōu)點:純軟件,價格較低,簡單,軟件調(diào)試能力較強。

* 缺點:需要事先燒制監(jiān)控程序(Monitor)(往往需多次實驗才能成功)且目標(biāo)板工作正常,功能有限,特別是硬件調(diào)試能力較差。

4) JTAG調(diào)試

* 優(yōu)點:方便、簡單,無需制作Monitor,軟硬件均可調(diào)適。

* 缺點:需要工作基本正常(至少CPU工作正常)的目標(biāo)板,僅適用于有調(diào)試接口的芯片。

2、 ARM仿真器工作原理:

利用高速JTAG(Joint Test Action Group)串行掃描鏈,通過調(diào)試通信通道(Debug Communication Channel, DCC)連接ARM核心內(nèi)嵌的名為"Embedded-ICE"的調(diào)試邏輯,調(diào)試邏輯實時監(jiān)測ARM核心的寄存器、數(shù)據(jù)總線和地址總線。調(diào)試器設(shè)置Breakpoint及Watchpoint后,程序在ARM內(nèi)核全速運行,調(diào)試程序?qū)崟r監(jiān)測地址與數(shù)據(jù)總線并與預(yù)設(shè)值比較,在吻合時產(chǎn)生異常中斷通知內(nèi)核并把控制權(quán)交給調(diào)試器。這樣,在程序全速運行時,可以在斷點處停止,可以設(shè)置條件斷點、條件觀測斷點等,而又不占用CPU時間及內(nèi)存資源。

3、 JTAG接口:

1985年制定的檢測PCB和IC的一個標(biāo)準(zhǔn),1990年被修改后成為IEEE的一個標(biāo)準(zhǔn),及IEEE1149.1-1990。通過這個標(biāo)準(zhǔn),可對具有JTAG接口芯片的電路進(jìn)行邊界掃描和故障檢測。

第四章 創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境

1、交叉編譯步驟:

(1) 創(chuàng)建編譯環(huán)境。在這個過程中,將設(shè)置一些環(huán)境變量,創(chuàng)建安裝目錄,安裝內(nèi)核源代碼和頭文件等。

(2) 創(chuàng)建binutils。這個過程結(jié)束后,會創(chuàng)建類似arm-linux-ld等工具。

  Binutils是一組開發(fā)工具,包括鏈接器、匯編器以及其他用于目標(biāo)文件和檔案的工具

  首先要安裝的軟件包使binutils。這非常重要,因為glibc和gcc會針對可用的連接器和匯編器進(jìn)行多種測試,以決定打開某些特性。

  

(3) 創(chuàng)建一個交叉編譯版本的gcc。注意:在這個過程中只能編譯C程序,而不能編譯C++程序。

  創(chuàng)建交叉編譯版本的gcc,需要交叉編譯版本的glibc及其頭文件,而交叉編譯版本的glibc是通過交叉編譯版本的gcc創(chuàng)建的。面對這個先有雞還是先有蛋的問題,解決辦法是先只編譯對C語言的支持,并禁止支持線程。

(4) 創(chuàng)建一個交叉編譯版本的glibc。這里最容易出現(xiàn)問題。

glibc是一個提供系統(tǒng)調(diào)用和基本函數(shù)的C語言庫,比如open,malloc和printf等,所有動態(tài)鏈接的程序都要用到它。創(chuàng)建glibc需要的時間更長。

(5) 創(chuàng)建一個交叉編譯版本的gdb。在這個過程結(jié)束后,會創(chuàng)建ARM-Linux-gdb。

(6) 重新創(chuàng)建gcc。前面創(chuàng)建gcc的過程沒有編譯C++編譯器,現(xiàn)在glibc已經(jīng)準(zhǔn)備好了,所以這個步驟將完善gcc的交叉編譯。

(7) 重新創(chuàng)建glibc。如果成功執(zhí)行了這個過程,那么你就擁有了一套屬于自己的交叉編譯工具鏈。

2、如果在交叉編譯過程中出現(xiàn)錯誤,那么請檢查:

* 版本選擇是否正確,以及是否安裝了相應(yīng)的補丁;

* 庫文件路徑是否正確;

* 系統(tǒng)環(huán)境變量是否設(shè)置正確。

第五章 Bootloader

1、 Bootloader(引導(dǎo)加載程序)是系統(tǒng)加電后運行的第一段代碼。一般它只在系統(tǒng)啟動時運行非常短的一段時間,但對于嵌入式系統(tǒng)來說,這是一個非常重要的系統(tǒng)組成部分。

2、 嵌入式Linux系統(tǒng)從軟件的角度看通常可以分成4個層次:

(1) 引導(dǎo)加載程序。包括固化在固件(Firmware)中的啟動代碼(可選)和Bootloader兩大部分。

(2) 內(nèi)核。特定于嵌入式板子的定制內(nèi)核以及控制內(nèi)核引導(dǎo)系統(tǒng)的參數(shù)。

(3) 文件系統(tǒng)。包括根文件系統(tǒng)和建立于Flash內(nèi)存設(shè)備之上的文件系統(tǒng)。通常用Ramdisk作為根文件系統(tǒng)。它是提供管理系統(tǒng)的各種配置文件以及系統(tǒng)執(zhí)行用戶應(yīng)用程序的良好的運行環(huán)境的載體。

(4) 用戶應(yīng)用程序。特定于用戶的應(yīng)用程序。有時在用戶應(yīng)用程序和內(nèi)核層之間可能還會包括一個嵌入式圖形用戶界面。

3、 Bootloader包含兩種不同的操作模式:

1) 啟動加載(Bootloading)模式;

2) 下載(Downloading)模式。

4、 Bootloader的啟動流程:

第一階段:主要包含依賴于CPU的體系結(jié)構(gòu)硬件初始化的代碼,通常都用匯編實現(xiàn)。這個階段的任務(wù)有:

* 基本的硬件設(shè)備初始化(屏蔽所有的中斷、關(guān)閉處理器內(nèi)部指令/數(shù)據(jù)Cache等)

* 為第二階段準(zhǔn)備RAM空間

* 如果是從某個固態(tài)存儲媒質(zhì)中,則復(fù)制Bootloader的第二段代碼到RAM

* 設(shè)置堆棧

* 跳轉(zhuǎn)到第二階段的程序入口點

第二階段:通常用C語言完成,以便實現(xiàn)更復(fù)雜的功能,也使程序有更好的可讀性和可移植性。這個階段的任務(wù)有:

* 初始化本階段要使用到的硬件設(shè)備

* 檢測系統(tǒng)內(nèi)存映射

* 將內(nèi)核映像和根文件系統(tǒng)映像從FLASH讀到RAM

* 為內(nèi)核設(shè)置啟動參數(shù)

* 調(diào)用內(nèi)核

5、 常用U-Boot命令:

命令名

功能

help / ?

幫助命令。用于查詢U-Boot支持的命令并列出簡單說明,和"?"是同一個命令

bdinfo

察看目標(biāo)系統(tǒng)參數(shù)和變量、目標(biāo)板的硬件配置、各種變量參數(shù)

setenv

設(shè)置環(huán)境變量。比較常用的有:

setenv ipaddr *.*.*.*

setenv severip *.*.*.*

setenv gatewayip *.*.*.*

setenv ethaddr *.*.*.*.*.*

printenv

查看環(huán)境變量

saveenv

保存設(shè)置的環(huán)境變量到Flash

mw

寫內(nèi)存

md

察看內(nèi)存

mm

修改內(nèi)存

flinfo

察看Flash的信息

erase [起始地址 結(jié)束地址]

搽除Flash內(nèi)容,必須以扇區(qū)為單位進(jìn)行搽除

cp [源地址 目標(biāo)地址 大小]

內(nèi)存復(fù)制,可以在Flash和ram中交換數(shù)據(jù)

imi [起始地址]

察看內(nèi)核映像文件

bootm [起始地址]

從某個地址啟動內(nèi)核

tftpboot [起始地址 鏡像名]

通過ftp從主機系統(tǒng)下載內(nèi)核映像文件

reset

復(fù)位

第六章 Linux系統(tǒng)在ARM平臺的移植

1、 使某一個平臺的代碼運行在其它平臺上的過程就叫做移植。

2、 Linux內(nèi)核結(jié)構(gòu):

* /arch包含了所有硬件結(jié)構(gòu)特定的內(nèi)核代碼。

Linux系統(tǒng)能支持如此多平臺的部分原因是因為內(nèi)河把原程序代碼清晰的劃分為體系結(jié)構(gòu)無關(guān)部分和體系結(jié)構(gòu)相關(guān)部分。對于任何平臺,都必須包含以下幾個目錄:

* boot:包括啟動內(nèi)核所使用的部分或全部平臺特有代碼。

* kernel:存放支持體系結(jié)構(gòu)特有的(如信號處理和SMP)特征的實現(xiàn)。

* lib:存放高速體系結(jié)構(gòu)特有的(如strlen和memcpy)同用函數(shù)的實現(xiàn)。

* mm:存放體系結(jié)構(gòu)特有的內(nèi)存管理程序的實現(xiàn)。

* math-emu:模擬FPU的代碼。對于ARM處理器來說,此目錄用mach-xxx代替。

顯然,移植工作的重點就是移植arch目錄下的文件。

* /drivers包含了內(nèi)核中所有的設(shè)備驅(qū)動程序。

* /fs包含了所有的文件系統(tǒng)的代碼。

* /include包含了建立內(nèi)核代碼時所需的大部分庫文件,這個模塊利用其他模塊重建內(nèi)核。該目錄也包含了不同平臺需要的庫文件。比如,asm-arm是arm平臺需要的庫文件。

* /init包含了內(nèi)核的初始化代碼,內(nèi)核從此處工作。

不是系統(tǒng)的引導(dǎo)代碼,由main.c和version.c兩個文件。這是研究核心如何工作的好起點。

* /ipc包含了進(jìn)程間通信代碼。

* /kernel包含了主內(nèi)核代碼。

* /mm包含了所有內(nèi)存管理代碼。

* /net包含了和網(wǎng)絡(luò)相關(guān)的代碼。

3、 在移植過程中,定時器、中斷、CACHE管理、MMU等和硬件密切相關(guān)的地方都是要相關(guān)平臺的底層代碼支持的,要特別注意。

4、 編譯內(nèi)核:

1) 配置內(nèi)核

make ARCH=arm CROSS_COMPILE=arm-Linux- menuconfig

2) 創(chuàng)建內(nèi)核依賴關(guān)系

make dep

3) 創(chuàng)建內(nèi)核鏡像文件

make zImage

4) 創(chuàng)建內(nèi)核模塊

make modules


主站蜘蛛池模板: 久久精品3| 久久黄色精品视频 | 韩国福利影视一区二区三区 | 初爱视频教程在线观看高清 | 草久久久| 天天激情站 | 亚洲三级视频 | 青草青99久久99九九99九九九 | 国产男女免费视频 | 九九视频在线观看视频 | 在线亚洲精品国产成人二区 | 欧美日韩视频二区三区 | 男人又粗又硬桶女人免费 | 久爱午夜精品免费视频 | 香港全黄一级毛片在线播放 | 爱逼综合网 | 久久99精品九九九久久婷婷 | 日本韩国一级片 | 欧美一区二区三区在线观看 | 欧美精品在线视频 | 亚洲最大福利视频 | 国产三级高清 | 国产女人一区二区 | 99国产精品欧美久久久久久影院 | 免费看一级欧美激情毛片 | 深夜爽爽爽gif福利免费 | 午夜亚洲国产成人不卡在线 | 尤蜜网站在线进入免费 | 国产精品一久久香蕉国产线看 | 日本一级特黄啪啪片 | 亚洲视频在线观看网站 | 成人在线视频国产 | 99精品国产成人一区二区 | 国产欧美日韩精品a在线观看 | 华人色| 亚洲美女在线观看亚洲美女 | 亚洲第十色| 国产欧美一区二区三区在线 | 久草视频免费在线播放 | 亚洲成人黄色片 | 一级美女片 |