<dfn id="is4kg"></dfn>
  • <ul id="is4kg"></ul>
  • <abbr id="is4kg"></abbr>
  • <ul id="is4kg"></ul>
    <bdo id="is4kg"></bdo>

    曙海教育集團(tuán)論壇Linux專區(qū)Linux驅(qū)動(dòng)開(kāi)發(fā) → 嵌入式設(shè)計(jì)及Linux驅(qū)動(dòng)開(kāi)發(fā)指南——基于ARM9處理器


      共有5342人關(guān)注過(guò)本帖樹(shù)形打印

    主題:嵌入式設(shè)計(jì)及Linux驅(qū)動(dòng)開(kāi)發(fā)指南——基于ARM9處理器

    美女呀,離線,留言給我吧!
    wangxinxin
      1樓 個(gè)性首頁(yè) | 博客 | 信息 | 搜索 | 郵箱 | 主頁(yè) | UC


    加好友 發(fā)短信
    等級(jí):青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊(cè):2010-11-12 11:08:23
    嵌入式設(shè)計(jì)及Linux驅(qū)動(dòng)開(kāi)發(fā)指南——基于ARM9處理器  發(fā)帖心情 Post By:2010-11-24 8:33:09

    我也是剛剛接觸嵌入式Linux開(kāi)發(fā),感覺(jué)這門技術(shù)相對(duì)而言需要軟件知識(shí)(操作系統(tǒng)、C編程)比硬件知識(shí)更多些。所以這幾個(gè)星期來(lái),作為一個(gè)自動(dòng)化專業(yè)的學(xué)生,我深深感覺(jué)到自己軟件知識(shí)的匱乏。但畢設(shè)又不能不按時(shí)完成,為了更快掌握嵌入式開(kāi)發(fā)的知識(shí),同時(shí)記錄下自己學(xué)習(xí)的歷程,我把讀過(guò)的這本書(shū)摘要記錄下來(lái)。一方面便于自己對(duì)知識(shí)的整理回顧,另一方面也方便和大家學(xué)習(xí)交流。

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

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

    讀書(shū)筆記

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

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

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

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

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

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

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

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

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

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

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

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

    3、 選擇Embedded OS的原則:

    * 系統(tǒng)成本;

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

    * 可移植性;

    * 可利用資源;

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

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

    1、 ARM的歷史:

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

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

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

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

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

    * ARM7家族;

    * ARM9家族;

    * ARM9E家族;

    * ARM10E家族;

    * ARM11家族;

    * SecurCore家族;

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

    * MPCore多處理器家族;

    * Intel公司的StrongARM/XScale。

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

      指令流水線:

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

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

    3、三星S3C2410X處理器:

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

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

    * SDRAM控制器;

    * 3個(gè)通道的UART;

    * 4個(gè)通道的DMA;

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

    * 8通道的10位ADC;

    * 觸摸屏接口;

    * I2S總線接口;

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

    * 2個(gè)SPI接口;

    * SD接口和MMC卡接口;

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

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

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

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

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

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

    * 缺點(diǎn):價(jià)格昂貴。

    2) 模擬調(diào)試

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

    * 缺點(diǎn):功能非常有限,無(wú)法實(shí)時(shí)調(diào)試。

    3) 軟件調(diào)試

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

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

    4) JTAG調(diào)試

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

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

    2、 ARM仿真器工作原理:

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

    3、 JTAG接口:

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

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

    1、交叉編譯步驟:

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

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

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

      首先要安裝的軟件包使binutils。這非常重要,因?yàn)間libc和gcc會(huì)針對(duì)可用的連接器和匯編器進(jìn)行多種測(cè)試,以決定打開(kāi)某些特性。

      

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

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

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

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

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

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

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

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

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

    * 庫(kù)文件路徑是否正確;

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

    第五章 Bootloader

    1、 Bootloader(引導(dǎo)加載程序)是系統(tǒng)加電后運(yùn)行的第一段代碼。一般它只在系統(tǒng)啟動(dòng)時(shí)運(yùn)行非常短的一段時(shí)間,但對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),這是一個(gè)非常重要的系統(tǒng)組成部分。

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

    (1) 引導(dǎo)加載程序。包括固化在固件(Firmware)中的啟動(dòng)代碼(可選)和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)用程序的良好的運(yùn)行環(huán)境的載體。

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

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

    1) 啟動(dòng)加載(Bootloading)模式;

    2) 下載(Downloading)模式。

    4、 Bootloader的啟動(dòng)流程:

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

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

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

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

    * 設(shè)置堆棧

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

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

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

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

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

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

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

    5、 常用U-Boot命令:

    命令名

    功能

    help / ?

    幫助命令。用于查詢U-Boot支持的命令并列出簡(jiǎn)單說(shuō)明,和"?"是同一個(gè)命令

    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

    寫(xiě)內(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 [起始地址]

    從某個(gè)地址啟動(dòng)內(nèi)核

    tftpboot [起始地址 鏡像名]

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

    reset

    復(fù)位

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

    1、 使某一個(gè)平臺(tái)的代碼運(yùn)行在其它平臺(tái)上的過(guò)程就叫做移植。

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

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

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

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

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

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

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

    * math-emu:模擬FPU的代碼。對(duì)于ARM處理器來(lái)說(shuō),此目錄用mach-xxx代替。

    顯然,移植工作的重點(diǎn)就是移植arch目錄下的文件。

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

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

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

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

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

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

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

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

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

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

    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


    支持(0中立(0反對(duì)(0單帖管理 | 引用 | 回復(fù) 回到頂部

    返回版面帖子列表

    嵌入式設(shè)計(jì)及Linux驅(qū)動(dòng)開(kāi)發(fā)指南——基于ARM9處理器








    簽名
    主站蜘蛛池模板: 国产女主播喷水视频在线观看| 毛片女人毛片一级毛片毛片| 女人被躁免费视频| 亚洲精品人成在线观看| 色吊丝av中文字幕| 天天干天天摸天天操| 亚洲大香人伊一本线| 精品人妻大屁股白浆无码| 成年午夜性视频| 国产精品公开免费视频| 亚洲AV无码一区二区二三区软件| 车文里的冰块棉签是干啥用的| 天使a中文在线观看| 亚洲三级在线观看| 精品国产一区二区三区在线观看| 国产精品林美惠子在线播放| 国产美女口爆吞精普通话| 久久综合九色综合欧洲| 爽新片xxxxxxx| 国产嗯嗯叫视频| 99精品久久久中文字幕| 无码国产精品一区二区免费式芒果 | 午夜dj在线观看免费高清在线| 韩国xxxxhd性| 在线观看日韩电影| 中文字幕天天干| 日本www视频| 亚洲一区二区三区在线观看网站| 欧美日韩国产成人高清视频| 再深点灬舒服灬太大了短文d| 美女脱了内裤打开腿让人桶网站o| 国产日韩欧美久久久| 992tv国产人成在线观看| 天堂а√在线官网| 中文字幕久久久久一区| 无码精品人妻一区二区三区av| 亚洲av永久无码嘿嘿嘿| 欧美国产激情二区三区| 人妻有码中文字幕| 男女啪啪高清无遮挡免费| 国产aaaaaa|