新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ARM7核處理器VxWorks系統BSP設計

        基于ARM7核處理器VxWorks系統BSP設計

        作者: 時間:2005-03-22 來源:網絡 收藏


        2
        硬件圖

        主要以S3C4510B為核心,外圍集成了以太網卡、SDRAM、FLASH、UART以及HDLC等。圖2是以S3C4510B為核心的最小圖。

        SDRAM選用HY57V653220(8Mbyte)、兩片FLASH分別為AM29F040(存放bootrom)和T28F160BT(作為文件系統用)。

        3 操作系統下構建

        在完成板上基本硬件的測試后,下面我就開始對vxWorks操作系統下進行開發,開發前需要做一些準備工作,如準備開發工具等。

        ① 開發工具用的是Tornado2.2 for ARM;

        ② 參考資料有 Kit、S3C4510B DataSheet;

        ③ 參考Tornado2.2 for ARM下自帶的wrSBCArm7 BSP;

        ④ 燒寫程序采用編程器。

        通常在開發BSP的時候,我們需要在Tornado原帶BSP目錄下找一個與我們所用的相同或相近。與BSP相關的文件有:romInit.s、sysAlib.s、bootInit.c、bootConfig.c、sysLib.c、config.h、configNet.h、makefile以及與我們硬件相關的,如串口sysSerial.c等。由于篇幅所限,具體的文件作用在此就不說了。下面主要根據S3C4510B來闡述一下BSP開發步驟。

        (1)拷貝BSP

        將wrSBCArm7 BSP拷貝一份并命名為4510BSP,接下來的工作就是修改該目錄下的文件,從而得到自己的BSP。

        (2)修改MakeFile文件

        修改4510BSP目錄下的makefile文件,修改如下幾行:

        TARGET_DIR = 4510BSP # changed by caiyang

        VENDOR = CAI # changed by caiyang

        BOARD = MyArmBoard # changed by caiyang

        ROM_TEXT_ADRS = 01000000 # ROM entry address

        ROM_WARM_ADRS = 01000004 # ROM warm entry address

        ROM_SIZE = 00080000 # number of bytes of ROM space

        RAM_LOW_ADRS = 00006000 # RAM text/data address (bootrom)

        RAM_HIGH_ADRS = 00486000 # RAM text/data address (bootrom)

        MACH_EXTRA =

        注解:ROM_TEXT_ADRS:BOOT ROM的入口地址。對大多數板來說,這就是ROM地址區的首地址,然而也有的硬件配置使用ROM起始的一部分地址區作為復位向量,因此需要根據此設置偏移量作為它的地址。這個偏移量因CPU結構而定。

        ROM_WARM_ADRS:BOOT ROM熱啟動入口地址。它通常位于固定的ROM_TEXT_ADRS+4的地方。當需要熱啟動時,sysLib.c文件中sysToMonitor( )函數代碼明確的跳轉到ROM_WARM_ADRS地址處開始執行。

        ROM_SIZE:ROM實際大小。

        RAM_LOW_ADRS:裝載Vxworks的地址。

        RAM_HIGH_ADRS:將Boot Rom Image拷貝到RAM的目的地址。

        注意:RAM_LOW_ADRS 和 RAM_HIGH_ADRS 都是絕對地址,通常位于DRAM起始地址的偏移量處,該偏移量取決于CPU結構,這需要參考內存分布。對于ARM的內存分布請看圖3,從圖3可以看出RAM_LOW_ADRS在DRAM+0x1000處。這些地址對于S3C4510B來說都應該是重映射后的地址。

        (3)修改config.h文件

        主要是修改ROM_BASE_ADRS、ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS和undef掉不需要的部分。注意這些應該和makefile文件中設置的一致。

        (4)修改romInit.s文件

        CPU一上電就開始執行romInit( )函數,因此在romInit.s代碼段中它必須是第一個函數。對于熱啟動,將會執行romInit( )加上4后的代碼(具體參考sysLib.c中的sysToMonitor( )函數)。更多的硬件初始化在sysLib.c中sysHwInit( )函數中,romInit( )的工作就是做較少的初始化并把控制權交給romStart( )(在bootInit.c文件)。

        在S3C4510B中,romInit.s文件主要做了以下幾個工作:

        ① 禁止CPU中斷并切換到SVC32模式;

        ② 禁止中斷控制器;

        ③ 初始化SYSCFG、EXTDBWTH、ROMCON0、ROMCON1、DRAMCON0等寄存器,同時初始化了FLASH、SDRAM、DM9008等外圍設備;

        ④ 將FLASH的內容拷貝到SDRAM中;

        ⑤ 改變FLASH和SDRAM的基地址,將SDRAM基地址改為0;

        ⑥ 初始化堆棧指針;

        ⑦ 跳轉到C程序romStart( )函數中。

        在這里,只需要修改SYSCFG、EXTDBWTH、ROMCON0、ROMCON1、DRAMCON0等寄存器來設置FLASH、SDRAM、DM9008的基地址和大小即可。這需要根據板上的配置來修改,修改的內容在wrSbcArm7.h文件中。

        BSP基本部分就已經修改完成,至于bootInit.c和bootConfig.c文件,我們一般不需要修改它,只是在調試過程中為了方便調試,可以將他們拷貝到BSP目錄下,然后修改makefile文件,在makefile文件中添加如下兩句。

        BOOTCONFIG = bootConfig.c

        BOOTINIT = bootInit.c

        (5)利用tsfs(target server file system)下載

        要利用tsfs下載,首先需要配置以下內容:

        ① 在config.h文件中添加如下內容

        /* Serial port configuration */

        #define INCLUDE_SERIAL

        #undef NUM_TTY

        #define NUM_TTY N_SIO_CHANNELS

        #undef CONSOLE_TTY

        #define CONSOLE_TTY 0

        #undef CONSOLE_BAUD_RATE

        #define CONSOLE_BAUD_RATE 38400

        /*** WDB ***/

        #ifdef SERIAL_DEBUG

        #define WDB_NO_BAUD_AUTO_CONFIG

        #undef WDB_COMM_TYPE

        #undef WDB_TTY_BAUD

        #undef WDB_TTY_CHANNEL

        #undef WDB_TTY_DEV_NAME

        #define WDB_COMM_TYPE WDB_COMM_SERIAL /* WDB in Serial mode */

        #define WDB_TTY_BAUD 38400 /* Baud rate for WDB Connection */

        #define WDB_TTY_CHANNEL 1 /* COM PORT #2 */

        #define WDB_TTY_DEV_NAME "/tyCo/1" /* default TYCODRV_5_2 device name */

        #endif /* SERIAL_DEBUG */

        /* tsfs added by caiyang */

        #define INCLUDE_TSFS_BOOT

        并修改引導行為

        #define DEFAULT_BOOT_LINE par "tsfs(0,0)host:vxWorks f=8 h=169.254.72.67 e=169.254.72.68 u=caiyang pw=caiyang"

        注:串口1用來顯示引導信息,相當于PC機中的顯示器,串口2用來下載VxWorks和調試。同時串口2波特率不能太高,經測試115200好像不行。

        ② 配置target server

        啟動Tornado開發環境,選擇Tool->target server菜單。在下拉菜單中選“target server file system”并選中Enable File System,然后目錄指向Vxworks所在的地方。同時注意要把Tornado Registry打開,這樣配置完后點擊Launch按鈕即可連接成功,此后就可以通過串口2下載VxWorks和調試。

        一般情況下,我們首先調試好BSP,然后在調試網卡。所以在調試網卡前,我們需要用串口來下載VxWorks映像。

        至此,我們的BSP就開發完成。

        4 結論

        在沒有調試BSP的硬件工具如仿真器的時候,我們只能通過點燈或者串口輸出來定位程序執行的正確性。這大大增加了調試難度和進程。對于BSP開發,一般需要從一個模板來修改。BSP開發的正確性直接影響到VxWorks系統運行的穩定性。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 普兰店市| 淮南市| 库尔勒市| 阿尔山市| 布尔津县| 梁山县| 霸州市| 浙江省| 广水市| 井陉县| 兴安盟| 密山市| 乌兰察布市| 柘城县| 诸城市| 繁昌县| 蛟河市| 黄骅市| 秦安县| 荔浦县| 尤溪县| 玛多县| 京山县| 正蓝旗| 白水县| 友谊县| 城固县| 七台河市| 久治县| 濉溪县| 荣昌县| 宣武区| 安徽省| 舞钢市| 荥经县| 达孜县| 民勤县| 平罗县| 伊宁市| 金塔县| 白沙|