色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          Redboot修改實例

          作者: 時間:2012-07-25 來源:網(wǎng)絡(luò) 收藏

          在通常情況下,嵌入式開發(fā)中都需要對bootload部分的代碼進(jìn)行,以適應(yīng)實際的需求。本文以redboot為例,說明了如何redboot源碼以使其具備

          本文引用地址:http://cafeforensic.com/article/148720.htm

          1. 啟動時提供LOGO圖片顯示

          2. 為實現(xiàn)量產(chǎn),在命令行下提供自動配置網(wǎng)絡(luò)的命令autocONfig

          3. 為實現(xiàn)量產(chǎn),在命令行下提供自動更新文件的命令update

          4. 為實現(xiàn)量產(chǎn),在命令行下提供自動配置腳本的命令autoexec

          適用的運行環(huán)境為基于ARM架構(gòu)的硬件環(huán)境,包括

          運行環(huán)境如下表所示。

          是Red Hat公司開發(fā)的一個獨立運行在嵌入式系統(tǒng)上的BootLoad程序,是目前比較流行的一個功能強(qiáng)大、可移植性好的BootLoad。

          是一個采用eCos開發(fā)環(huán)境開發(fā)的應(yīng)用程序,并采用了eCos的硬件抽象層作為基礎(chǔ),但它完全可以脫離eCos環(huán)境運行,并用來引導(dǎo)人和其他的嵌入式操作系統(tǒng),如Linux、WinCE等。

          eCos實現(xiàn)系統(tǒng)可配置機(jī)制的核心就在于它是由許多個組件構(gòu)成,包括調(diào)度內(nèi)核組件、硬件抽象層、文件系統(tǒng)組件、網(wǎng)絡(luò)協(xié)議棧等,用戶可以根據(jù)不同的需求選擇組件,并對一些特定的配置選項進(jìn)行設(shè)置,就可以構(gòu)造出滿足特定應(yīng)用需求的系統(tǒng)。

          所有的組件都在組件庫中,組件庫其實是一個包含了eCos所有系統(tǒng)組件的文件夾,其路徑對應(yīng)于“/eCos-2.0/packages”,該目錄的內(nèi)容如下所示

          ☆ compat

          包含支持與POSIX和uITRON3.0標(biāo)準(zhǔn)兼容的組件文件包

          ☆ cygmon

          生成Cygmon調(diào)試監(jiān)視器的配置文件包

          ☆ devs

          eCos支持的所有外部設(shè)備驅(qū)動,如串口、以太網(wǎng)等

          ☆ error

          包含各種常見的錯誤和狀態(tài)描述代碼,便于系統(tǒng)調(diào)試時報告錯誤和狀態(tài)

          ☆ fs

          包含ROM和RAM文件系統(tǒng)包

          ☆ hal

          包含所有硬件抽象層的目標(biāo)硬件配置文件包

          ☆ infra

          包含系統(tǒng)定義的基本結(jié)構(gòu),如數(shù)據(jù)類型、宏定義、系統(tǒng)啟動方式選擇

          ☆ io

          I/O子系統(tǒng)文件包,建立在外部設(shè)備驅(qū)動上層從而與特定硬件無關(guān)

          ☆ isoinfra

          包含的文件包提供支持ISO標(biāo)準(zhǔn)C庫和兼容POSIX標(biāo)準(zhǔn)的接口

          ☆ kernel

          提供eCos內(nèi)核功能的配置文件包

          ☆ language

          包含ISO的C庫和math庫

          ☆ net

          提供TCP/IP協(xié)議棧支持的文件包

          ☆ redboot

          包含生成Redboot調(diào)試監(jiān)視器的配置文件包

          ☆ services

          包含提供動態(tài)內(nèi)存分配和文件壓縮與解壓功能的庫文件

          與硬件相關(guān)的文件按照如上所述,分別對應(yīng)以下的子目錄:

          “/eCos-2.0/packages/hal/arm”:Architectur HAL

          “/eCos-2.0/packages/hal/arm/arm9”:Variant HAL

          “/eCos-2.0/packages/hal/arm/arm9/ep93xx”:Platform. HAL

          為了實現(xiàn)本文開頭的四項特殊功能,需要eCos中的部分代碼。修改的文件為:

          “/eCos-2.0/packages/hal/arm/arm9/ep93xx/v2_0/src/ep93xx_misc.c”

          “/eCos-2.0/packages/redboot/v2_0/src/Flash.c”

          “/eCos-2.0/packages/redboot/v2_0/src/io.c”

          “/eCos-2.0/packages/redboot/v2_0/src/main.c”

          ep93xx_misc的修改

          在本例中,開發(fā)平臺上添加了一塊FPGA芯片,通過該FPGA實現(xiàn)了對LCD的控制,因此對于raSTer的初始化過程有所不同。

          該部分的修改,主要目的是提供“啟動時提供logo圖片顯示”的功能。

          增加__FPGA_LCD__宏定義

          增加_RASTER_宏定義

          _RASTER_ 完成Raster設(shè)置并且顯示開機(jī)界面。

          _ FPGA_LCD _ 完成FPGA設(shè)置并且顯示開機(jī)界面。

          Raster:

          initRaster用來初始化LCD controller

          LCD 界面定制在Nor Flash AddrESS 0x60DC0000

          Copy Kernel 到指定Address, Copy zImage 到0x800000(SDRAM Address)

          FPGA:

          1. check chip 分區(qū)是否存在

          2. 如果存在則Copy logo and chip 到指定地址。

          3. 初始化FGPA。

          4. 顯示開機(jī)界面。

          5. Copy Kernel 到指定地址。

          初始化FPGA流程:

          1. Config相關(guān)GPIO

          a) GPIO 0-7===D0~D7為輸出

          b) GPIO 9,11,12===PROG_B,CSI_B,CCLK為輸出 8,10===DONE,INIT_B為輸入

          2. Clear相關(guān)SDRAM

          a) set prog_b low to clear the config data

          b) start the config process

          c) ready to read the init_b status

          3. 寫Chip.bin

          4. 顯示logo

          SDRAM write流程如下圖所示:

          1. 根據(jù)CPU_buffer的使用情況,將準(zhǔn)備寫入SDRAM的數(shù)據(jù),先存入CPU_buffer中。

          2. 然后需要依次配置ADDR1、ADDR0、CONTROL_REG。

          3. cpu_sdram_cmdgen會根據(jù)以上寄存器的設(shè)置,將cpu_buffer中的數(shù)據(jù)發(fā)送至arbiter,后存入SDRAM.

          4. 數(shù)據(jù)請求完成后,cpu_sdram_cmdgen會將CONTROL_REG.ACT自動清除。

          5. CPU可以通過查詢CONTROL_REG.ACT位,得知當(dāng)前寫入SDRAM數(shù)據(jù)的操作是否完成。

          6. 寫SDRAM步驟如下

          a) write (16'h00F0, 16'haaaa);

          b) write (16'h00F1, 16'hbbbb);

          c) write (16'h00F2, 16'hcccc);

          d) write (16'h00F3, 16'hdddd);

          e) write (16'h00F4, 16'heeee);

          f) write (16'h00F5, 16'hffff);

          g) write (16'h00F6, 16'h5555);

          h) write (16'h00F7, 16'h6666);

          i) write (16'h00F8, 16'h9999);

          j) write (16'h00F9, 16'h7777);

          k) write (16'h00Fa, 16'h8888);


          上一頁 1 2 下一頁

          關(guān)鍵詞: 實例 修改 Redboot

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉