宅男噜噜噜一区二区三区,日韩免费观看视频,亚洲制服丝袜在线观看http://www.bjzhda.cnzh-cn曙海教育集團(tuán)論壇http://www.bjzhda.cnRss Generator By Dvbbs.Netofficeoffice@126.comimages/logo.gif曙海教育集團(tuán)論壇PowerPC VxWorks BSP分析http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1943&Page=1wangxinxin2010-12-1 10:50:451 PowerPC BSP定制
如圖1,BSP的主要功能在于配置系統(tǒng)硬件使其工作于正常的狀態(tài),以及完成硬件與軟件之間的數(shù)據(jù)交互,為OS及上層應(yīng)用程序提供一個與硬件無關(guān)的軟件平臺。因此從執(zhí)行角度來說,其可以分為兩大部分:
? 目標(biāo)系統(tǒng)啟動時的硬件初始化及操作系統(tǒng)引導(dǎo)例程,它只在系統(tǒng)啟動過程中執(zhí)行一次;
? 目標(biāo)板上控制硬件運行的設(shè)備驅(qū)動程序,由它來完成硬件與軟件之間的銜接。
圖片點擊可在新窗口打開查看
 
圖1 BSP在系統(tǒng)中所處的位置
一般說來,BSP的設(shè)計與開發(fā)可以分為以下幾個步驟:
(1)建立開發(fā)環(huán)境。安裝VxWorks集成開發(fā)環(huán)境(Tornado);選擇合適的開發(fā)工具。目前幾乎每一種處理器都支持JTAG/BDM接口,大多數(shù)處理器都有JTAG/BDM調(diào)試工具支持,如vision ICE等,采用目標(biāo)板供應(yīng)商的DEBUG ROM調(diào)試工具也是一種可以考慮的途徑。
(2)選擇合適的BSP模板。如有可能,所選的模板盡可能與硬件平臺相近,當(dāng)然,實際情況中考慮到費用及充分利用已有的資源,所選的模板可能需要較大的修改才能移植到需要的硬件平臺。
(3)修改或添加WIND內(nèi)核激活前的初始化代碼,包括初始化CPU內(nèi)核、MMU、CACHE禁止/使能等。
(4)內(nèi)核激活以后,連接系統(tǒng)中斷、系統(tǒng)時鐘,修改或添加所需要的設(shè)備驅(qū)動程序等。
(5)測試與驗證。BSP的正確性與穩(wěn)定性對上層軟件和整個系統(tǒng)的穩(wěn)定起著至關(guān)重要的作用。因此BSP完成后要經(jīng)過測試驗證。
BSP主要文件目錄的組成及作用:
圖片點擊可在新窗口打開查看
target/config/All目錄
這個目錄下的文件是所有BSP文件共享的,不是特別需要不要更改里面的任何文件。
configAll.h:
缺省定義了所有VxWorks的設(shè)置,如果不用缺省的設(shè)置,可在BSP目錄下的config.h文件中用#define或#undef方式來更改設(shè)置。
bootInit.c:
在romInit.s后,完成Boot ROM的第二步初始化。程序從romInit.s中的romInit()跳到這個文件中的romStart()來執(zhí)行必要的解壓和ROM image的放置
bootConfig.c: 完成Boot ROM image的初始化和控制
usrConfig.c: VxWorks image的初始化代碼
target/config/comps/src目錄
涉及系統(tǒng)核心的components,主要由target/config/All中usrConfig.c中函數(shù)調(diào)用
target/config/bspname目錄
包含系統(tǒng)或硬件相關(guān)的BSP文件
Makefile
一些命令行控制images的生成
README
BSP發(fā)布紀(jì)錄,版本,總的文檔
config.h
包括所有涉及CPU主板的設(shè)置及定義(includes,definations)
configNet.h
網(wǎng)絡(luò)驅(qū)動的主要設(shè)置文件,主要對END驅(qū)動設(shè)置.
romInit.s
匯編語言文件,是VxWorks Boot ROM和ROM based image的入口,參見系統(tǒng)啟動部分
sysALib.s
匯編語言文件,程序員可以把自己的匯編函數(shù)放在這個文件里,在上層調(diào)用。VxWorks image的入口點_sysInit在這個文件里,是在RAM中執(zhí)行的第一個函數(shù)
sysLib.c
包含一些系統(tǒng)相關(guān)的函數(shù)例程,提供了一個board-level的接口,VxWorks和應(yīng)用程序可以以system-indepent的方式生成。這個文件還能包含目錄target/config/comps/src的驅(qū)動
sysScsi.c
可選文件用于SCSI設(shè)備設(shè)置和初始化
sysSerial.c
可選文件用于所有的串口設(shè)置和初始化
bootrom.hex
ASIC文件包含VxWorks Boot ROM代碼
VxWorks
運行在目標(biāo)機(jī)上,完整的,連結(jié)后的VxWorks二進(jìn)制文件
VxWorks.sym
完全的,連結(jié)后帶有符號表的VxWorks二進(jìn)制文件
VxWorks.st
完全的,連結(jié)后,standalone,帶有符號表的VxWorks二進(jìn)制文件
1.1啟動過程
VxWorks OS有三種映像:
? Loadable Images:由Bootrom引導(dǎo)通過網(wǎng)口或串口下載到RAM
? ROM-based Images(壓縮/沒有壓縮):即將Image直接燒入ROM,運行時將Image拷入RAM中運行。
? ROM-Resident Images:Image的指令部分駐留在ROM中運行,僅將數(shù)據(jù)段部分拷入RAM。
注意這里說的三種映像都是包含真正操作系統(tǒng)VxWorks的映像,其中后兩種可以直接啟動并運行起來,但是第一種不行,它必須借助另一個叫做Boot Image的映像(可以在Tornado中的build->build boot rom中生成)才能運行起來,也就是利用Boot Image引導(dǎo)起來然后通過網(wǎng)口或串口下載真正包含VxWorks的Loadable Image,然后才能運行起來。也就是說Boot Image是和Loadable Image 結(jié)合使用的。
現(xiàn)在看來一共有四種映像文件,讓我們看看它們的組成吧:
? Boot Image:包含一段叫做BootStrap Programs的程序+一段ROM BOOT Program程序。
? Loadable Images:由操作系統(tǒng)VxWorks和應(yīng)用組成的映像。
? ROM-based Images(壓縮/沒有壓縮):包含一段叫做BootStrap Programs的程序+ Loadable Images(即由操作系統(tǒng)VxWorks和應(yīng)用組成的映像)
? ROM-Resident Images:同上
通過上面我們可以看出,ROM-based Images,ROM-Resident Images,Boot Image三種映像都包含一段叫做BootStrap Programs的程序,它具有啟動功能,可以把ROM中的代碼段和數(shù)據(jù)段拷貝到RAM中。
下面我們來看看三種VxWorks OS映像的啟動順序:
Boot Image + Loadable Images
Loadable Images是依靠Boot Image加載啟動的,首先有Boot Image中的程序BootStrap Programs把Boot Program程序加載到RAM中的RAM_HIGH_ADRS處,然后控制權(quán)交給Boot Program,由Boot Program負(fù)責(zé)一系列簡單的硬件初始化(網(wǎng)口,串口等),開始下載Loadable Images(即包含應(yīng)用的VxWorks操作系統(tǒng))到RAM_LOW_ADRS,之后控制權(quán)交給VxWorks操作系統(tǒng)開始執(zhí)行。
圖片點擊可在新窗口打開查看
 
圖2 Loadable Images VxWorks啟動過程
 
如圖2,第一階段的執(zhí)行流程使用的是上圖的左邊的源文件中的那些函數(shù)(romInit();romStart();usrInit();sysHwinit();usrKernelinit();usrRoot());第二階段執(zhí)行流程使用的是上圖中右邊源文件中的那些函數(shù)(sysInit(); usrInit();sysHwinit();usrKernelinit();usrRoot();usrAppInit())。下面具體解釋:
第一階段:
romInit.s:romInit()
? 系統(tǒng)上電之后,首先調(diào)用的函數(shù)就是romInit()
? 禁止中斷
? 把啟動類型(冷啟動/熱啟動)放在堆棧上
? 清除cache
? 初始化CPU基本寄存器,調(diào)用SDRAM初始化函數(shù)初始化UPM
? 直接跳轉(zhuǎn)到bootInit.c:romStart()
bootInit.c:romStart()
? 把代碼段和數(shù)據(jù)段從bootrom復(fù)制到RAM當(dāng)中
? 完成程序映象的解壓縮(如果映象是壓縮版本的)
? 跳轉(zhuǎn)到bootConfig.c:usrInit()
bootConfig.c:usrInit()
? VxWorks OS中第一個C語言完成的代碼。執(zhí)行操作系統(tǒng)內(nèi)核所必須的初始化程序。
? Cache程序庫的初始化
? 清零系統(tǒng)的BSS段
? 初始化中斷向量表
? 使硬件工作在一個“安靜”的狀態(tài),盡量不產(chǎn)生各種中斷或者異常
? 控制權(quán)移交給KernelInit(),產(chǎn)生usrRoot根任務(wù)
? 在usrRoot根任務(wù)中解析Bootline,產(chǎn)生bootCmdLoop任務(wù),用于啟動、加載VxWorks映像
/target/config/all/bootConfig.c是Boot ROM設(shè)置模塊,用于加載VxWorks image。執(zhí)行流程為:
usrRoot();bootCmdLoop(void)命令行選擇,或autobooting;bootLoad(pLine, &entry)加載模塊到內(nèi)存(網(wǎng)絡(luò)、TFFS、TSFS...);netifAttach();go(entry);(entry)()從入口開始執(zhí)行,不返回。
第二階段:
bootConfig.c: bootLoad( )
? 加載VxWorks映像,并轉(zhuǎn)向它的加載地址,從sysInit入口開始執(zhí)行VxWorks映像
sysALib.s: sysInit( )
? 與romInit.s : romInit()的初始化過程類似,但不再初始化Memory(DRAM和Memory控制器通常初始化一次)
usrConfig.c: usrInit( )
? 設(shè)置cache的工作模式,板級硬件初始化,初始化Wind內(nèi)核,啟動usrRoot( )根任務(wù)
usrConfig.c: usrRoot( )
? 初始化內(nèi)存,系統(tǒng)時鐘,I/O系統(tǒng),標(biāo)準(zhǔn)輸入輸出錯,異常處理,添加用戶應(yīng)用程序。
ROM-based Images(壓縮/沒有壓縮)
和上面那種啟動方式相比,這種啟動方式省去了一些步驟,執(zhí)行完romStart()之后就已經(jīng)加載VxWorks 到RAM中了,因此,下一步就是把控制權(quán)交給VxWorks,由VxWorks從sysInit()開始執(zhí)行即可。下面是具體的流程:
圖片點擊可在新窗口打開查看
romInit.s:romInit()
? 系統(tǒng)上電之后,首先調(diào)用的函數(shù)就是romInit()
? 禁止中斷
? 把啟動類型(冷啟動/熱啟動)放在堆棧上
? 清除cache
? 初始化CPU基本寄存器,調(diào)用SDRAM初始化函數(shù)初始化UPM
? 直接跳轉(zhuǎn)到bootInit.c:romStart()
bootInit.c: romStart()
? 把代碼段(如果是VxWorks_romResident映像,則不拷貝代碼段)和數(shù)據(jù)段從bootrom復(fù)制到RAM當(dāng)中
? 完成程序映象的解壓縮(如果映象是壓縮版本的)
? 跳轉(zhuǎn)到sysALib.s: sysInit()
sysALib.s: sysInit()
? 重新進(jìn)行CPU內(nèi)核(主要是cache)的初始化,這些工作在romInit.s:romInit()中曾經(jīng)進(jìn)行
? 是RAM中運行的第一段代碼
? 跳轉(zhuǎn)到usrConfig.c: usrInit()
usrConfig.c: usrInit()
? VxWorks 中第一個C語言完成的代碼。執(zhí)行操作系統(tǒng)內(nèi)核所必須的初始化程序。
? Cache程序庫的初始化
? 清零系統(tǒng)的BSS段
? 初始化中斷向量表
? 使硬件工作在一個“安靜”的狀態(tài),盡量不產(chǎn)生各種中斷或者異常
? 控制權(quán)移交給KernelInit(),產(chǎn)生usrRoot根任務(wù)
ROM-Resident Images
這種映像的加載和上一種是基本相同的,其執(zhí)行順序為:
文件romInit.s中的romInit();文件bootInit.c中的romStart();文件usrConfig.c中的usrInit();sysHwInit();usrKernelInit();KernelInit(usrRoot,...)。
usrRoot()任務(wù)的主要功能包括:
? 初始化內(nèi)存分區(qū)表(memory partition library)
? 初始化系統(tǒng)時鐘(system clock)
? 初始化輸入輸出系統(tǒng)(I/O system)----可選
? Create devices----可選
? 設(shè)置網(wǎng)絡(luò)(Configure network)----可選
? 激活WDB目標(biāo)通信(Activate WDB agent)----可選
? 調(diào)用程序(Activate application
]]>
VxWorks BSP制作概要http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1942&Page=1wangxinxin2010-12-1 10:49:19    要了解vxworks BSP的制作,首先要對vxworks的啟動過程有個大體的了解,下面我們從vxworks的啟動過程開始介紹。
    VxWowks的啟動過程
            一般來說,所有的處理器執(zhí)行相同的邏輯步驟初始化和加載VxWorks,但一些處理器可能會有一些特殊的步驟,而另外一些則可能跳過一些步驟。但它們都要進(jìn)行以下步驟,如:初始化處理器,并在存儲器的特定位置提供一段代碼(可能還有一些表)以供處理器上電或重啟時運行。這段代碼設(shè)置處理器的狀態(tài),初始化存儲器和存儲器地址,關(guān)中斷把控制權(quán)交給啟動代碼(bootstrapping code)。
    
        
        1. 處理器首先跳到ROM的入口地址,設(shè)置狀態(tài)字并創(chuàng)建一個啞堆棧(DUMMY stack);
        2. 跳到C程序的入口地址,根據(jù)啞堆棧中的參數(shù)決定是否清零內(nèi)存RAM(如是冷啟動(cold start)則清零),再把ROM段的剩余部分拷貝到RAM(如果ROM代碼是壓縮的,還要解壓);
        3. 處理器跳到RAM的入口地址(bootConfig.c),使cache無效,清零bss段,初始化向量表,進(jìn)行板級初始化。
        4. 啟動多任務(wù)內(nèi)核。
       VxWorks的boot ROM本身就是一個獨立的應(yīng)用。開發(fā)者可用它來通過網(wǎng)絡(luò)啟動一個VxWorks映像并和應(yīng)用代碼連接。
    
         1  VxWorks啟動流程
            romInit()——》romStart()——》sysInit()——》initVectBaseSet()——》sysHwInit()——》usrKernelInit() ——》kernelInit()——》usrRoot()
    
        2 文件和程序說明
    romInit.S: romInit()
    關(guān)中斷,把啟動類型(cold/warm)入棧,清零cache后跳到romStart的入口。
    
    bootInit.C:romStart()
    把ROM代碼和數(shù)據(jù)段拷貝并重定位到RAM,清零RAM的未用部分,需要的話要進(jìn)行解壓縮,然后跳到sysInir()的入口地址。
    拷貝的過程如下:
    A,代碼段不是駐留在ROM中,要拷貝代碼段和數(shù)據(jù)段;
    B,如代碼段是駐留在ROM中的,則只拷貝數(shù)據(jù)段;
    C,未用的內(nèi)存清零;
    D,需要時,要進(jìn)行解壓縮。
    
    sysALib.S:sysInit()
    sysInit()是VxWorks映像的入口地址,起始地址由RAM-LOW-ADR定義。它首先關(guān)中斷,使cache無效,初始化處理器的寄存器為缺省值,使tracing無效,清除中斷寄存器,初始化usrInit()的堆棧并激活usrInit()。
    注意,在sysInit()中必須重新初始化在romInit()中所做的硬件初始化。
    
    usrConfig.C and bootConfig.C:usrInit()
    它是VxWorks運行的第一個C代碼,在supervisor mode中激活。它關(guān)中斷,存儲有關(guān)啟動類型(boot type)的信息,在VxWorks內(nèi)核運行前進(jìn)行必要的初始化。
    A,初始化cache的模式,設(shè)置為安全狀態(tài),在usrInit()結(jié)束時使cache有效;
    B,清零系統(tǒng)bss段;
    C,初始化中斷向量表,調(diào)用VectBaseSet(),exeVectInit();
    D,初始化系統(tǒng)硬件,但使之無效(Quiescent State),調(diào)用sysHwInit(),這是一個與硬件有關(guān)的過程,是我們要針對不同的目標(biāo)板進(jìn)行修改的重要部分,其中涉及到串口,網(wǎng)口的初始化,CONSOLE的配置等;
    E,調(diào)用usrKernelInit(),并使能cache;
    F,調(diào)用kernelInit(),創(chuàng)建usrRoot()。
    
    usrKernel.C:kernelInit()
    初始化內(nèi)核可選組件(kernel facility)。
    
    kernelLib.C:usrKernelInit()
    初始化多任務(wù)環(huán)境。
    調(diào)用intLockLevelSet(),使時間片(round-robin)方式無效,在內(nèi)存的高端創(chuàng)建中斷堆棧,ROOT堆棧和TCB,創(chuàng)建usrRoot(),中斷usrInit()的運行,然后打開中斷,注意要清除中斷寄存器。
    
    usrConfig.C and bootConfig.C:usrRoot()
   初始化I/O系統(tǒng),驅(qū)動器,設(shè)備(在configAll.h和config.h中指定)。
    
        3 程序列表
         對于硬件初始化的順序,大致可按下表中形式進(jìn)行:
函   數(shù)    函  數(shù)  功  能    所 在 文 件
sysInit()    (a)鎖住中斷;(b)禁用緩沖;
(c)用缺省值初始化系統(tǒng)中斷表(僅i960);
(d)用缺省值初始化系統(tǒng)錯誤表(僅i960);
(e)初始化處理器寄存器到一缺省值;
(f)使回溯失效;(g)清除所有懸置中斷;
(h)激活usrInit(),指明啟動類型。    sysALib.s
usrInit()    (a)對bss賦零;
(b)保存bootType于sysStartType;
(c)調(diào)用excVecInit(),初始化所有系統(tǒng)和缺省中斷向量;
(d)依次調(diào)用sysHwInit(),  usrKernelInit(),kernelInit().    usrConfig.c
usrKernelInit()    依次調(diào)用classLibInit(),taskLibInit(),taskHookInit(),semBLibInit(),semMLibInit(),semCLibInit(),semOLibInit(),wdLibInit(),msgQLibInit(),qInit(),workQInit()    usrKernel.c
kernelInit()    初始化并啟動內(nèi)核。
(a)激活intLockLevelSet();
(b)從內(nèi)存池頂部創(chuàng)建根堆棧和TCB;
(c)調(diào)用taskInit(),taskActivate(),用于usrRoot();
(d)調(diào)用usrRoot().    kernelLib.c
usrRoot()    初始化I/O系統(tǒng),驅(qū)動器,設(shè)備(在configAll.h和config.h中指定)
(a)調(diào)用sysClkConnect(),sysClkRateSet(),
iosInit(),[ttyDrv()];
(b)初始化excInit(),logInit(),sigInit().
(c)初始化管道,pipeDrv();
(d)stdioInit(),mathSoftInit()或mathHardInit()
(e)wdbConfig():配置并初始化目標(biāo)代理機(jī)    usrConfig.c

        在大多數(shù)目標(biāo)板的板級支持包中,VxWorks的入口點由兩個函數(shù):romInit()和romStart()來完成,而非sysInit()。具體基于ROM的VxWorks的初始化過程如下表所示:
函數(shù)    函數(shù)功能    所在文件
1.romInit()




2.romStart()




3.usrInit()

4.usrKernelInit()
5.kernelInit()

6.usrRoot()

7.Application routine    (a)禁止中斷;
(b)保存啟動類型;
(c)硬件初始化;
(d)調(diào)用romStart();

(a)將數(shù)據(jù)段從ROM拷貝到RAM,清內(nèi)存;
(b)將代碼段從ROM拷貝到RAM,有必要的話解    壓縮;
(c)調(diào)用usrInit();

初始化程序

如果相應(yīng)的配置文件被定義,對應(yīng)函數(shù)被調(diào)用

初始化并啟動內(nèi)核

初始化I/O系統(tǒng),驅(qū)動器,創(chuàng)建設(shè)備

應(yīng)用程序代碼    romInit.s




bootInit.c




usrConfig.c

usrKernel.c

kernelLib.c

usrConfig.c

Application source file

    BSP的結(jié)構(gòu)
        BSP是一系列文件的集合,這些文件按功能大致可分為三個部分:一是操作系統(tǒng)載體的硬件初始化文件;二是操作系統(tǒng)初始化文件;三是生成BSP目標(biāo)代碼所需的工具文件,如各種編譯連接文件等。

        BSP的文件構(gòu)成如下:
        1,硬件初始化文件:處理器初始化程序。
        2,操作系統(tǒng)初始化文件:各類頭文件,驅(qū)動程序,操作系統(tǒng)內(nèi)核初始化程序,創(chuàng)建多任務(wù)環(huán)境程序。
        3,工具文件:各類make文件,制作系統(tǒng)引導(dǎo)文件的工具。
  BSP的工作
        1,單板硬件初始化,主要是CPU的初始化,為整個軟件系統(tǒng)提供底層的硬件]]>
基于ARM7核處理器VxWorks系統(tǒng)BSP設(shè)計http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1941&Page=1wangxinxin2010-12-1 10:44:44關(guān)鍵詞:ARM7TDMI S3C4510B VxWorks BSP

1 介紹

S3C4510B是三星公司推出的針對嵌入式應(yīng)用的16/32 位嵌入式處理器,該微控制器專為以太網(wǎng)通信系統(tǒng)的集線器和路由器而設(shè)計,具有低成本和高性能的特點, S3C4510B中內(nèi)置了設(shè)計的16/32位ARM7TDMI處理器, 可以執(zhí)行32位的ARM指令,也可執(zhí)行16位的THUMB指令, 并集成了多種外圍部件,主要有

● 時鐘頻率50MHz

● 內(nèi)核/IO電壓3.3V

● 8KB的Cache/SRAM

● 一個10/100Mbps 以太網(wǎng)控制器,MII接口

● 兩個HDLC通道,每個通道可支持10Mbps

● 兩個UART通道

● 兩個DMA通道

● 兩個32位定時/計數(shù)器

● 18個可編程I/O口

● 中斷控制器,支持21個中斷源,包括4個外部中斷

● 支持SDRAM,EDO DRAM,SRAM,F(xiàn)lash等

● 具有擴(kuò)展外部總線

● JTAG接口,支持軟件開發(fā) ,硬件調(diào)試

S3C4510B支持目前常用的嵌入式操作系統(tǒng),如VxWorks、pSoS、ucLinux等,本文將主要介紹VxWorks操作系統(tǒng)下的軟件開發(fā)。

ARM7TDMI是ARM家族通用的一款32位微處理器,它主要為用戶提供了高性能、低價格解決方案。

ARM7TDMI具有三級流水線的32位RISC處理器,處理器結(jié)構(gòu)為馮·諾依曼Load/Store。該CPU具有兩種指令集,即ARM和Thumb指令集。ARM指令集是32位,它可以利用CPU最大性能;而Thumb指令集則是16位指令集。

ARM7TDMI內(nèi)核方塊圖如圖1所示。

2 系統(tǒng)硬件圖

該系統(tǒng)主要以S3C4510B為核心,外圍集成了以太網(wǎng)卡、SDRAM、FLASH、UART以及HDLC等。圖2是以S3C4510B為核心的最小系統(tǒng)設(shè)計圖。

SDRAM選用HY57V653220(8Mbyte)、兩片F(xiàn)LASH分別為AM29F040(存放bootrom)和T28F160BT(作為文件系統(tǒng)用)。

3 VxWorks操作系統(tǒng)下BSP構(gòu)建

在完成板上基本硬件的測試后,下面我就開始對vxWorks操作系統(tǒng)下BSP進(jìn)行開發(fā),開發(fā)前需要做一些準(zhǔn)備工作,如準(zhǔn)備開發(fā)工具等。

① 開發(fā)工具用的是Tornado2.2 for ARM;

② 參考資料有BSP Kit、S3C4510B DataSheet;

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

④ 燒寫程序采用編程器。

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

(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的入口地址。對大多數(shù)板來說,這就是ROM地址區(qū)的首地址,然而也有的硬件配置使用ROM起始的一部分地址區(qū)作為復(fù)位向量,因此需要根據(jù)此設(shè)置偏移量作為它的地址。這個偏移量因CPU結(jié)構(gòu)而定。

ROM_WARM_ADRS:BOOT ROM熱啟動入口

]]>
VxWorks在AT91RM9200上的BSP設(shè)計http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1940&Page=1wangxinxin2010-12-1 10:42:00
1 BSP概念

BSP通常是指針對具體的硬件平臺,用戶所編寫的啟動代碼和部分設(shè)備驅(qū)動程序的集合。它所實現(xiàn)的功能包括初始化和驅(qū)動部分設(shè)備。最基本的BSP僅需要支持處理器復(fù)位、初始化、驅(qū)動串口和必要的時鐘處理。BSP是相對于操作系統(tǒng)而言的,不同的操作系統(tǒng)對應(yīng)不同形式的BSP,因此,在寫B(tài)SP時一定要按照要求的操作系統(tǒng)對BSP的定義形式來寫。在VxWorks系統(tǒng)中,BSP是介于底層硬件環(huán)境和VxWorks之間的一個軟件接口,它的主要功能是系統(tǒng)加電后初始化目標(biāo)機(jī)硬件和VxWorks,并提供部分硬件驅(qū)動程序。BSP在VxWorks系統(tǒng)中的層次關(guān)系如圖1所示。

圖片點擊可在新窗口打開查看

BSP為各種板卡的硬件功能提供了統(tǒng)一的軟件接口,包括硬件初始化、中斷的捕捉和處理、硬件時鐘和定時器管理、內(nèi)存地址映射,以及內(nèi)存分配等。每個BSP還包括一個ROM啟動或其他啟動機(jī)制。

2 VxWorks的引導(dǎo)過程

在編寫B(tài)SP之前,首先要了解整個系統(tǒng)的啟動過程。VxWorks的映像由代碼段、數(shù)據(jù)段和BSS段3部分組成。VxWotks內(nèi)核可以分為3種:可加載類型映像、基于ROM的VxWorks映像和RoM駐留型映像。這3種類型的映像組織是不一樣的,因此啟動過程有所區(qū)別。

可加載映像包括VxWorks和Boot ROM兩部分內(nèi)容,兩部分是獨立創(chuàng)建的。首先,由系統(tǒng)引導(dǎo)代碼把ROM引導(dǎo)程序搬到RAM_HIGH_ADRS。然后,ROM引導(dǎo)程序開始運行,將VxWorks映像加載到RAM_LOW_ADRS,之后跳轉(zhuǎn)到VxWorks映像裝入點。

基于ROM的VxWorks映像在BSP初始化時,會把lmage完全搬到RAM中執(zhí)行,包括代碼段和數(shù)據(jù)段。在拷貝執(zhí)行完畢后,系統(tǒng)控制權(quán)轉(zhuǎn)移給RAM中VxWorks映像的初始化代碼。

ROM駐留型映像只是將ROM中VxWorks映像的數(shù)據(jù)段和BSS段拷貝到RAM中,完成后系統(tǒng)控制權(quán)轉(zhuǎn)移給ROM/Flash里VxWorks映像的初始化代碼,代碼段留在ROM中并在ROM中運行。在ROM中運行的VxWorks映像主要足為了節(jié)省RAM空間,帶來的不利則是運行速度慢。

圖2和圖3分別是下載型和ROM型VxWorks映像的初始化流程。

圖片點擊可在新窗口打開查看

下面以ROM型VxWorks內(nèi)核啟動流程為例,說明各文件的作用:

romlnit()保存啟動類型,屏蔽中斷;初始化內(nèi)存和寄存器,屏蔽Cache;初始化CPU,將堆棧指針定位于被拷貝Boot ROM映像在RAM的地址;跳到romStart()。

roraStart()根據(jù)不同的映像類型將VxWorks映像的不同部分解壓縮<如果需要)并加載到RAM中。

usrInit() 對VxWorks映像的BSS段清零;調(diào)用intVecBaseSet()設(shè)置中斷矢量基地址表;調(diào)用excVecInit()初始化異常中斷矢量;調(diào)用sysHwInit()初始化系統(tǒng)硬件;調(diào)用usrKernelInit()初始化wind內(nèi)核;調(diào)用kernellnit()啟動wind內(nèi)核,啟動usrRoot()任務(wù)。

usrRoot()設(shè)置操作系統(tǒng)時鐘,創(chuàng)建設(shè)備,安裝驅(qū)動,調(diào)用sysHwInit2()安裝系統(tǒng)時鐘和輔助時鐘中斷以及串口等設(shè)備的中斷,初始化I/O、文件系統(tǒng)、調(diào)用應(yīng)用程序。

3 VxWorks在AT91RM9200上的BSP設(shè)計

3.1 AT91RM9200簡介

AT91RM9200的片上資源包括:ARM920T處理器棱、16KB的內(nèi)部SRAM和128KB的內(nèi)部ROM存儲器;支持SDRAM、SRAM、Burst Flash和CompactFlash、SmartMedia以及NANDFlash的無縫連接;16KB的數(shù)據(jù)Cache,16KB的指令Cache,完全可編程的外部總線接口EBI,4個32位的PIO控制器可以達(dá)到122個可編程I/O引腳(每個都有輸入控制、可中斷及開路的輸出能力);帶有8個優(yōu)先級、可單獨屏蔽中斷源的先進(jìn)中斷控制器、6組硬件定時器、4個通用同步/異步收發(fā)器USART。

3.2 BSP中幾個重要文件的修改

由于AT91RM9200的內(nèi)核是ARM920T,所以BSP文件主要在VxWorks編澤環(huán)境Tornado的目錄target/config/all和target/config/integrator920t文件夾里。其中,a11文件夾里的文件對于絕大多數(shù)BSP都是共用的,一般來說不需要修改,特別是“configAll.h”;integrator920t文件夾里的文件就是所要編寫的BSP文件,這些文件往往與系統(tǒng)硬件密切相關(guān)。

3.2.1 修改Makeflie

Makefile文件定義編譯和鏈接整個BSP的規(guī)則,如編譯工具的選擇、編譯選項和包含文件路徑等;控制生成VxWorks映像文件的類型,同時含有存儲區(qū)大小的信息,對于存儲區(qū)大小信息的改動必須與Config.h的對應(yīng)改動同步。有些參數(shù)需在該文件中定義,如處理器類型、編譯工具、目標(biāo)地址等。下面介紹一些須修改的參數(shù)和地址:

圖片點擊可在新窗口打開查看

3.2.2 修改Config.h

Config.h文件包含了所有頭文件和與CPU相關(guān)的特殊定義。VxWorks內(nèi)核組件的配置由Config.h文件定義。Config.h中的主要修改內(nèi)容有定義引導(dǎo)行和修改地址。

(1)定義引導(dǎo)行

圖片點擊可在新窗口打開查看

其中,mac(O,0)為AT91RM9200芯片中的EMAC設(shè)備;host為主機(jī)名;VxWorks為要下載的文件名;h為主機(jī)IP地址;e為目標(biāo)板IP地址;u為用戶名;pw為密碼;tn為目標(biāo)板名稱。

(2)修改地址

該文件中的地址定義,如ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADR、SRAM_HIGH_SIZE等要與Makefik文件中的相關(guān)定義一致。本設(shè)計中代碼段存儲在連接ARM芯片外部片選CSO上的Flash里面,基地址為Oxl0000000,因此.定義如下:

圖片點擊可在新窗口打開查看

VxWorks的缺省配置由configAll.h來確定。一般來說,缺省配置的設(shè)置與自行開發(fā)的硬件系統(tǒng)的配置不同,用戶可通過Cotlfig.h來改變?nèi)笔∨渲谩S脩繇毑榭碿onfigAll.h,并在Config.h中將不需要的軟硬件配置和初始化去掉。例如,缺省配置中一般包含浮點處理器,而AT9lRM9200中沒有浮點寄存器,因此就要刪掉相關(guān)配置。]]>
Tornado BSP Developer's Kit for VxWorks User's Guidehttp://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1939&Page=1wangxinxin2010-12-1 10:40:301                   簡介

VxWorks的一個優(yōu)勢就是它為應(yīng)用代碼提供了高度的架構(gòu)和硬件獨立性。這種可移植性得益于VxWorks的模塊化設(shè)計, 而這種模塊化設(shè)計將所有硬件相關(guān)的功能函數(shù)分離到了一套稱為板級支持包(BSP)的庫中。BSP庫為所有開發(fā)板的硬件相關(guān)功能提供了一個一致的接口。 這些功能包括硬件初始化, 中斷處理, 中斷產(chǎn)生, 硬時鐘和Timer管理, 本地和總線內(nèi)存空間的映射, 以及內(nèi)存尺寸控制等等。

總的來說, 有如下幾種類型的VxWorks移植:

A.      宿主移植: 將Tornado和VxWorks的開發(fā)能力移植到一個以前不支持的宿主機(jī)上。

B.      架構(gòu)移植: 將VxWorks 和Tornado 調(diào)試器移植到一個以前不支持的目標(biāo)處理器或架構(gòu)上。

C.     板級移植: 將VxWorks 移植到一個新的目標(biāo)板上, 在此之前應(yīng)該已經(jīng)有了宿主移植和架構(gòu)移植。

D.     升級pre-Tornado BSPs 使之工作于Tornado 平臺。

E.      移植一個可選的部件。

宿主移植和架構(gòu)移植需要訪問全部的VxWorks源代碼, 超出了本文的范圍。 板級移植是我們要討論的重點, 板級移植只需要訪問VxWorks中硬件相關(guān)的那部分源代碼(BSP)和調(diào)試器。

多年以來, 風(fēng)河公司(Wind River)能夠提供給客戶各種BSP, 然而, 隨著許多新的CPU板的大批流行, 尤其是許多客戶自己設(shè)計的CPU板的大量出現(xiàn), 使得風(fēng)河已經(jīng)不能夠跟上市場對于新的BSP的需求。

本書就是為了解決這個問題, 本書旨在幫住你創(chuàng)建、測試新的BSP、部件和項目。 移植VxWorks到一個新的板子上是一件非常有挑戰(zhàn)性的工作, 尤其是只有在移植完成后那些VxWorks開發(fā)工具才能夠被使用的時候。根據(jù)本書的策略可以使移植變得簡單一點。本書提供了移植策略和系統(tǒng)元件如何相互作用的詳細(xì)描述, 本書也包括了基于Tornado2.0來創(chuàng)建和發(fā)布部件或項目所需要的 技術(shù)信息。

本書所涉及的BSP 工具集與Tornado 2.0 或更高版本兼容, 升級早期的BSP 使之工作于Tornado 2.0 是相當(dāng)容易的, 參考A。升級一個BSP到Tornado 下。


1.1          Tornado 2.0 的新特性介紹:

SCSI 1 廢止: 對于SCSI-1 驅(qū)動和庫的支持已經(jīng)被廢止, 雖然這些庫仍然被包括在Tornado2.0 中,但是它們已經(jīng)被列為廢除并且不會被包括在將來的版本中。

宏 TYCO5_2被刪除:TYCO5_2這個宏不再被支持, 客戶應(yīng)當(dāng)使用Tornado 2.0 下的SIO驅(qū)動 。

BSP封裝被變更: 參考10。2  BSP封裝, P???頁以獲得更詳細(xì)的關(guān)于封裝要求的描述。 參考O。BSP產(chǎn)品內(nèi)容以獲得一個典型產(chǎn)品內(nèi)容的的快速總結(jié)。

文檔: 所有的在線文檔現(xiàn)在是以HTML格式提供, 在系統(tǒng)中包含了一個稱為refgen的工具,用來從現(xiàn)存的nroff輸入產(chǎn)生HTML頁。

 VxWorks網(wǎng)絡(luò)協(xié)議棧:VxWorks網(wǎng)絡(luò)協(xié)議棧是Tornado 1.0.1 用戶的可選部件, 現(xiàn)在是唯一被Winriver 支持的協(xié)議棧。 所有的BSP現(xiàn)在都使用為VxWorks網(wǎng)絡(luò)協(xié)議棧而修改的驅(qū)動程序。 VxWorks網(wǎng)絡(luò)協(xié)議棧是基于BSD 44 協(xié)議棧的。在BSP中 BSD44 和 END 驅(qū)動都可被使用。END驅(qū)動是BSP的缺省驅(qū)動。

新的驅(qū)動: 許多新的END網(wǎng)絡(luò)驅(qū)動已經(jīng)被加入到驅(qū)動產(chǎn)品中來以便使盡可能多的產(chǎn)品擁有至少一個可用的END 驅(qū)動。

集成的模擬器: Tornado 2.0包括一個集成的模擬器, 它允許開發(fā)人員在硬件環(huán)境就續(xù)以前就能夠開始應(yīng)用的開發(fā)。

集成的WindView:Tornado 2.0包括一個集成的WindView 工具, 用來檢查運行時的行為, 參考 <<WindView User’s Guide>> 來了解更多關(guān)于WindView的特性。

VTS 測試更新: VTS(驗證測試套件)有了微小的升級以便使它能夠正確地工作于target shell 的新的虛擬輸入輸出特性。

SCSI 測試套件: SCSI性能測試套件在以前的移植工具中被忽略了, 現(xiàn)在可用。

ROM_WARM_ADRS 這個新宏被引入到BSP模板和一些BSP中, 它代表進(jìn)入到boot ROM 代碼的熱啟動入口, 它被用來去除基于不同CPU家族所手工計算出來的入口地址。 正常情況下, ROM_WARM_ADRS是基于一個來自于ROM_TEXT_ADRS的偏移, 例如:

#define  ROM_WARM_ADRS             (ROM_TEXT_ADRS + 8)

新的SIO IOCTLs: 新的SIO IOCTL 代碼用來支持modem控制線路。 IOCTLs  例如SIO_OPEN和SIO_HUP當(dāng)設(shè)備被打開和關(guān)閉時通知驅(qū)動程序。 而SIO_HW_OPTS_SET 和SIO_HW_OPTS_GET允許用戶管理字符長度、奇偶、停止位和modem 控制線路。 可選位 CLOCAL 禁止了modem 控制線路在驅(qū)動程序中的使用, 為了保持向后兼容性, CLOCAL選項在Wind River BSP中默認(rèn)是選擇的。

Target.txt 文件被刪除: 文本格式的target.nr 文件(為Windows 宿主用戶而產(chǎn)生)已經(jīng)被刪除了, 目前UNIX 和WINDOWS平臺均使用瀏覽器來閱讀HTML格式的文檔。 宿主工具refgen取得nroff的輸入并且產(chǎn)生HTML的輸出。

1.2          進(jìn)行BSP開發(fā)的一些先決條件:

首先, 你應(yīng)當(dāng)有底層C和匯編語言的知識, 熟悉設(shè)備驅(qū)動, 熟悉中斷, 最好具有同硬件接口的軟件開發(fā)經(jīng)驗, 另外, 你應(yīng)當(dāng)熟悉Tornado開發(fā)工具或者至少已經(jīng)讀過了Tornado用戶指南。最后, 你應(yīng)當(dāng)有一個基于你的目標(biāo)系統(tǒng)上所用的CPU的參考BSP, 這可以節(jié)省你的大量時間。

你也應(yīng)當(dāng)有一個適用于你的項目架構(gòu)的模板BSP,以及模板驅(qū)動程序, 大部分客戶購買一個或多個設(shè)備驅(qū)動程序的源代碼。


]]>
基于LPC2104的VxWorksBSP設(shè)計http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1938&Page=1wangxinxin2010-12-1 10:34:57關(guān)鍵詞:VxWorks LPC2104 BSP ARM

VxWorks是一種商用嵌入式實時操作系統(tǒng)(RTOS)多年來,風(fēng)河公司為用戶提供了一系列廣泛的板級支持包(BSP)。但是,隨著CPU的發(fā)展,用戶自己設(shè)計的硬件平臺越來越多,分散性越來越大,因此介于硬件平臺和操作系統(tǒng)之間的BSP的自主設(shè)備也日益緊迫。EasyARM開發(fā)板是廣州周立功單片機(jī)有限公司開發(fā)的基于飛利浦LPC2104型ARM7TDMI芯片的低價位學(xué)習(xí)板,具有128KB的Flash,16KB的RAM,滿足VxWorks運行的最低要求。 1 格式說明及格式轉(zhuǎn)換程序的制作

Tornado產(chǎn)生的目標(biāo)代碼的默認(rèn)格式是Motorola開發(fā)板的Flash下載工具只能下載Intel 32bit格式。必須將它們進(jìn)行轉(zhuǎn)換才能將代碼寫入到Flash中去。下面以Motorola的S2格式為例說明格式的轉(zhuǎn)換。

S2的一種實際格式如下:

S0120000626F6F74726F6D5F726532E686578CF

S214000000060000EABD0300EAA50300EAB70300EA1B

S804000000FB

其中第一條是記錄的頭部。第二條是地址和對應(yīng)的數(shù)據(jù)記錄,S2表示24位地址的格式,14表示起始地址000000和對應(yīng)的數(shù)據(jù)及奇偶效驗對的總和。最后兩位表示所有十六進(jìn)制數(shù)對的校驗和。最后一條是記錄的結(jié)束標(biāo)志。 Intel 32 bit的一種實際格式如下:

:020000040000FA

:10000000060000EABD0300EABB50300EAB70300EA20

…………

:00000001FF

其中第一條是記錄的頭部,表示32位地址的高16位為0000。在第二條記錄中,:表示記錄的開始,10表示記錄對的個數(shù),0000表示起始地址的值,最后兩位表示校驗和。最后一條是記錄的結(jié)束標(biāo)志。

了解這兩種格式后,編寫格式轉(zhuǎn)換程序就是很簡單的一件事件。

2 BSP的設(shè)計過程及軟件仿真方法

2.1 駐留ROM/Flash的系統(tǒng)各段分配情況

由于LPC2104只有16KB的RAM,故只能程序代碼和數(shù)據(jù)放在Flash中,開機(jī)后再將數(shù)據(jù)拷貝到RAM內(nèi),而程序依然放在Flash中并在其中運行,即所謂的ROM Resident Image設(shè)計。在Tornado集成開發(fā)環(huán)境下,選取templatARM的BSP生成的bootrom_res.hex文件就是這種ROM_Resident文件,其代碼段、數(shù)據(jù)段、堆棧段分別在Flash和RAM中的情況如圖1。

Flash的分配和對應(yīng)常量的定義

片內(nèi)Flash的地址空間為0x00000000~0x00020000

ROM_TEXT_ADRS=00000000代碼段的起始地址

ROM_SIZE=00020000 Flash的大小

RAM的分配和對應(yīng)常量的定義

片內(nèi)RAM的地址空間為0x40000000~0x40003FFF

0x40000000~0x4000003F共64字節(jié),放中斷向量表LOCAL_MEM_LOCAL_ADRS=0x400000000

RAM_LOW_ADRS=0x40000600

RAM_HIGH_ADRS=0x40000F00

LOCAL_MEM_SIZE=0x00020000

根據(jù)上面的分析,修改Makefile和config.h中相應(yīng)的部分,使兩者一樣。

堆棧的分配

堆棧的地址設(shè)為STACK_ADRS,由系統(tǒng)定義,從RAM_LOW_ADRS開始向下伸展。

2.2 romlnit.s文件

ARM的異常向量表如表1。LPC2104的異常向量表也一樣,只不過它可以重新映射到RAM的頭部,即從0x40000000開始的32個字節(jié)。 表1 ARM異常向量位置

地 址異 常

0x0000 0000復(fù)位0x0000 0004未定義指令0x0000 0008軟件中斷0x0000 000C預(yù)取指中止(從存儲器取指出錯)0x0000 0010數(shù)據(jù)中止(數(shù)據(jù)訪問存儲器出錯)0x0000 0014保留0x0000 0018IRQ0x0000 001CFIQ *在ARM文檔中標(biāo)識為保留,該位置被Boot裝載程序用作者有效的用戶程序關(guān)鍵字。

基于ARM體系結(jié)構(gòu)的VxWorks的其中四個異常 入口函數(shù)為:excEnterUndef、ecxEnterSwi、excEnterPrefetchAbort、excEnterDataAbort。直接在對應(yīng)的位置用B指令跳到對應(yīng)的函數(shù)中即可。代碼如下:_ARM_FUNCTION(romInit)

_romInit:

ARM的異常向量表如表1。LPC2104的異常向量表也一樣,只不過它可以重新映射到RAM的頭部,即從0x40000000開始的32個字節(jié)。

基于ARM體系結(jié)構(gòu)的VxWorks的其中四個異常入口函數(shù)為:excEnterUndef、excEnterSwi、excEnterPrefetchAbort、excEnterDataAbort。直接在對應(yīng)的位置用B指令跳到對應(yīng)的函數(shù)中即可。代碼如下:

_ARM_FUNCTION(romInit)

_romInit:

cold:

B start /*復(fù)位異常*/

B excEnterUndef /*未定義異常 */

B excEnterSwi /*軟中斷*/

B excEnterPreftchAbort/*予取指異常*/

B excEnterDataAbort /*數(shù)據(jù)異常*/

.ascii "20B9" /*保留空間,由格式轉(zhuǎn)換程序超填入0xB9205F80*/

LDR pc,[pc,#-0xFF0]/*IRQ中斷入口函數(shù)*/

B FIQ_Hander /*FIQ中斷入口函數(shù)*/

IRQ中斷函數(shù)的入口函數(shù)是C語言寫的sysClkInt()和sysAuxClkInt(),需要自己保存現(xiàn)場和恢復(fù)現(xiàn)場,代碼為:

_ARM_FUNCTION(TIME0_IRQ_Hander)

_TIME0_IRQ_Hander:

SUB LR,LR,#4 /*計算返回地址*/

STMFD SP!,{R0-R11,R12,LR} /*保存任務(wù)環(huán)境*/

MRS R3,SPSR /*保存狀態(tài)*/

STMFD SP!,{R3}

BL sysClkInt /*調(diào)用C語言的中斷處理程序*/

LDMFD SP!,{R3}

MSR SPSR_cxsf,R3

LDMFD SP!,{R0-R11,R12,PC}

_ARM_FUNCTION(TIME1_IRQ_Hander)

_TIME1_IRQ_Hander:

SUB LR,LR,#4 /*計算返回地址*/

STMFD SP!,{R0-R11,R12,LR} /*保存任務(wù)環(huán)境*/

MRS R3,SPSR /*保存狀態(tài)*/

STMFD SP!,{R3}

BL sysAuxClkInt /*調(diào)用C語言的中斷處理程序*/

LDMFD SP!,{R3}

MSR SPSR_cxsf,R3

LDMFD SP!,{R0-R11,R12,PC}

快速中斷函數(shù)VxWorks不用由用戶自己定義。其框架如下:其中FIQ_Exception()函數(shù)由C語言定義,在文件開始用globl FUNC(FIQ_Exception)聲明。

FIQ_Hander:

STMFD SP!,{R0-R12,LR}

BL FIQ_Exception

LDMFD SP!,{R0-R12,LR}

SUBS PC,LR,#4

當(dāng)系統(tǒng)上電時,如果地址0x00000014內(nèi)的數(shù)據(jù)是0xB9205F80,則從Flash的零地址開始執(zhí)行,也就是執(zhí)行romInit()函數(shù)。此函數(shù)將啟動方式BOOT_COLD放在R0中,作為romStart的參數(shù),將系統(tǒng)設(shè)為SVC32模式,并禁止IRQ和FIR中斷,設(shè)置好系統(tǒng)堆棧指針跳到romStart()執(zhí)行。驗證此部分程序執(zhí)行情況的最簡單的一種方法是用匯編寫一段點燈程序,用以指令程序的執(zhí)行情況。其中常量PINSEL0、PINSEL1、IODIR、SPI_IOCON可以頭文件templatARM.h中用define定義。

#define PINSEL0 0xE002C000

#define PINSEL1 0xE002C004

#define IODIR 0xE0028008

#define SPI_IOCON 0x00003DD0

我們設(shè)計的點燈程序如下。將其放在romInit.s適當(dāng)?shù)奈恢,可以定位程序的運行情況。

LDR r0,=PINSEL0

MOV r1,#0

STR r1,[R0],#4

STR r1,[R0]

LDR r0,=PINSEL1

MOV r1,#0

STR r1,[R0],#4

STR r1,[R0]

LDR r0,=IODIR

LDR r1,SPI_IOCON

STR r1,[R0]

在Tornado集成開發(fā)環(huán)境下,templatARM的BSP生成bootrom_res.bin文件后,可以借助ASD1.2的AXD反匯編調(diào)方式器進(jìn)行單步仿真和調(diào)試。

2.3 sysLib.c文件

在這個文件中,主要是在sysHwInit()函數(shù)內(nèi)實現(xiàn)系統(tǒng)外設(shè)的配置,中斷向量表的拷貝和重映射,系統(tǒng)定時器中斷向量的安裝,串口初始化等功能。在串口還沒有調(diào)通之前,可以借助上面提到的簡單點燈函數(shù)實現(xiàn)程序的定位。其用C語言重新定義如下(將它插入本文件的適當(dāng)?shù)刂,可以指示各個函數(shù)的執(zhí)行情況):

#include “LPC2106.h”

PINSEL0=0x00000000;

PINSEL1=0x00000000;

IODIR=0x00003DD0;

系統(tǒng)的初始化和配置與硬件系統(tǒng)高度相關(guān)。對這部分的代碼不作過多的解釋,請參看代碼注釋。幾個常量定義如下:

#define Fosc 11059200 /*晶振頻率,10MHz~25MHz應(yīng)與實際一致*/

#define Fcclk(Fosc *4)

/*系統(tǒng)頻率,必須為Fosc的整數(shù)倍(1~32),且<=60MHz*/

#define Fcco (Fosc *4)

/*CCO頻率,必須為Fcclk的1、2、4、8倍,范圍為156MHz~320MHz*/

#define Fpclk (Fcclk/4)*2

/*VPB時鐘頻率,只能為(Fcclk/4)的1、2、4倍*/

2.4 templateTimer.c文件

本文件主要實現(xiàn)與系統(tǒng)時鐘和系統(tǒng)輔助時鐘相關(guān)的函數(shù)。關(guān)于系統(tǒng)時鐘的各函數(shù)定義如下(系統(tǒng)輔助時鐘的各函數(shù)與系統(tǒng)時鐘一樣,只須將T0換成T1即可):

/*SysClkInt(),此函數(shù)每個時鐘Tick被調(diào)用一次*/

void sysClkInt(void){

/*通知系統(tǒng)中斷結(jié)束*/

T0IR=0x01;

T0MR0+=(Fpclk/sysClkTicksPerSecond);

VICVectAddr=0;

/*調(diào)用系統(tǒng)中斷函數(shù)*/

if(sysClkRoutine!=NULL)

(*sysClkRoutine)(sysClkArg);

}

/*sysClkDisable()禁止系統(tǒng)時鐘*/

void sysClkDisable(void){

if(sysClkRunning){

/*禁止系統(tǒng)時鐘中斷*/

VICIntEnClr=0x10;

T0TC=0;

SysClkRunning=FLASE;

}

}

/*sysClkEnable()啟動系統(tǒng)時鐘*/

void sysClkEnable(void){

static BOOL connected=FALSE;

if(!connected){

/*定時器0初始化*/

T0TC=0;

T0TCR=0x01;

T0MCR=0x01;

T0MR0=(Fpclk/sysClkTicksPerSecond);

VICIntEnable=0x10;

Connected=TRUE;

}

if(!sysClkRunning){

T0TC=0;

sysClkRunning=TRUE;

}

}

3 應(yīng)用程序設(shè)計

由于EasyARM開發(fā)板本身資源較少,不可能與PC機(jī)連接成宿主機(jī)一目標(biāo)機(jī)的調(diào)試環(huán)境,通過主機(jī)將代碼下載到目標(biāo)機(jī)再執(zhí)行。因此在設(shè)計應(yīng)用程序時,可以修改bootConfig.c文件中的bootCmdLoop()函數(shù),生成bootrom_res.hex文件,格式轉(zhuǎn)換后,下載到Flash中運行,在PC機(jī)上借助串口調(diào)試助手打印調(diào)試信息。具體過程是:在Tornado2.2集成開發(fā)環(huán)境下選取Build->Build Boot Rom,BSP選定templateARM,Image選定bootrom_res.hex,編譯器選gnu,確認(rèn)即可。

4 小結(jié)

VxWorks所需要的唯一的驅(qū)動程序是系統(tǒng)時鐘,本文詳細(xì)給出了系統(tǒng)時鐘源代碼,同時還給出了串口通信的源代碼,使得開發(fā)板與PC機(jī)能正常通信。另外,給出了基于VxWorks的應(yīng)用程序的設(shè)計方法。由于BSP的設(shè)計本身就是一件很具有挑戰(zhàn)性的工作,相信本文對VxWorks的BSP設(shè)計得有所幫助。

]]>
VxWorks在AT91RM9200上的BSP設(shè)計http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1937&Page=1wangxinxin2010-12-1 10:33:20關(guān)鍵詞 VxWorks BSP 映像 ARM AT91RM9200

    VxWorks是美國Wind River公司開發(fā)的嵌入式實時操作系統(tǒng),具有高性能、可裁減性好等特點,能支持多種微處理器(如PowerPC、X85、ARM、SPARC);自問世以來,以其良好的町靠性和卓越的實時性被廣泛地應(yīng)用于通信、航空、航天等高精尖技術(shù)及實時性要求極高的領(lǐng)域中。BSP(Board Support Package,板級支持包)的作用是針對特殊的硬件平臺,為操作系統(tǒng)內(nèi)核提供操作接口,使操作系統(tǒng)能夠獨立于底層硬件。對上層應(yīng)用屏蔽具體硬件,VxWorks的高可移植性就是通過BSP實現(xiàn)的。AT91RM9200是Atmel公司生產(chǎn)的一款A(yù)RM9核芯片,本文重點介紹將VxWorks移植到該芯片過程中BSP的定制過程。

1 BSP概念
    BSP通常是指針對具體的硬件平臺,用戶所編寫的啟動代碼和部分設(shè)備驅(qū)動程序的集合。它所實現(xiàn)的功能包括初始化和驅(qū)動部分設(shè)備。最基本的BSP僅需要支持處理器復(fù)位、初始化、驅(qū)動串口和必要的時鐘處理。BSP是相對于操作系統(tǒng)而言的,不同的操作系統(tǒng)對應(yīng)不同形式的BSP,因此,在寫B(tài)SP時一定要按照要求的操作系統(tǒng)對BSP的定義形式來寫。在VxWorks系統(tǒng)中,BSP是介于底層硬件環(huán)境和VxWorks之間的一個軟件接口,它的主要功能是系統(tǒng)加電后初始化目標(biāo)機(jī)硬件和VxWorks,并提供部分硬件驅(qū)動程序。BSP在VxWorks系統(tǒng)中的層次關(guān)系如圖1所示。

圖片點擊可在新窗口打開查看

   BSP為各種板卡的硬件功能提供了統(tǒng)一的軟件接口,包括硬件初始化、中斷的捕捉和處理、硬件時鐘和定時器管理、內(nèi)存地址映射,以及內(nèi)存分配等。每個BSP還包括一個ROM啟動或其他啟動機(jī)制。

2 VxWorks的引導(dǎo)過程
   
在編寫B(tài)SP之前,首先要了解整個系統(tǒng)的啟動過程。VxWorks的映像由代碼段、數(shù)據(jù)段和BSS段3部分組成。VxWotks內(nèi)核可以分為3種:可加載類型映像、基于ROM的VxWorks映像和RoM駐留型映像。這3種類型的映像組織是不一樣的,因此啟動過程有所區(qū)別。

    可加載映像包括VxWorks和Boot ROM兩部分內(nèi)容,兩部分是獨立創(chuàng)建的。首先,由系統(tǒng)引導(dǎo)代碼把ROM引導(dǎo)程序搬到RAM_HIGH_ADRS。然后,ROM引導(dǎo)程序開始運行,將VxWorks映像加載到RAM_LOW_ADRS,之后跳轉(zhuǎn)到VxWorks映像裝入點。

    基于ROM的VxWorks映像在BSP初始化時,會把lmage完全搬到RAM中執(zhí)行,包括代碼段和數(shù)據(jù)段。在拷貝執(zhí)行完畢后,系統(tǒng)控制權(quán)轉(zhuǎn)移給RAM中VxWorks映像的初始化代碼。

    ROM駐留型映像只是將ROM中VxWorks映像的數(shù)據(jù)段和BSS段拷貝到RAM中,完成后系統(tǒng)控制權(quán)轉(zhuǎn)移給ROM/Flash里VxWorks映像的初始化代碼,代碼段留在ROM中并在ROM中運行。在ROM中運行的VxWorks映像主要足為了節(jié)省RAM空間,帶來的不利則是運行速度慢。

    圖2和圖3分別是下載型和ROM型VxWorks映像的初始化流程。

圖片點擊可在新窗口打開查看

下面以ROM型VxWorks內(nèi)核啟動流程為例,說明各文件的作用:
    romlnit()保存啟動類型,屏蔽中斷;初始化內(nèi)存和寄存器,屏蔽Cache;初始化CPU,將堆棧指針定位于被拷貝Boot ROM映像在RAM的地址;跳到romStart()。
    roraStart()根據(jù)不同的映像類型將VxWorks映像的不同部分解壓縮<如果需要)并加載到RAM中。
    usrInit() 對VxWorks映像的BSS段清零;調(diào)用intVecBaseSet()設(shè)置中斷矢量基地址表;調(diào)用excVecInit()初始化異常中斷矢量;調(diào)用sysHwInit()初始化系統(tǒng)硬件;調(diào)用usrKernelInit()初始化wind內(nèi)核;調(diào)用kernellnit()啟動wind內(nèi)核,啟動usrRoot()任務(wù)。
    usrRoot()設(shè)置操作系統(tǒng)時鐘,創(chuàng)建設(shè)備,安裝驅(qū)動,調(diào)用sysHwInit2()安裝系統(tǒng)時鐘和輔助時鐘中斷以及串口等設(shè)備的中斷,初始化I/O、文件系統(tǒng)、調(diào)用應(yīng)用程序。

3 VxWorks在AT91RM9200上的BSP設(shè)計
3.1 AT91RM9200簡介
    AT91RM9200的片上資源包括:ARM920T處理器棱、16KB的內(nèi)部SRAM和128KB的內(nèi)部ROM存儲器;支持SDRAM、SRAM、Burst Flash和CompactFlash、SmartMedia以及NANDFlash的無縫連接;16KB的數(shù)據(jù)Cache,16KB的指令Cache,完全可編程的外部總線接口EBI,4個32位的PIO控制器可以達(dá)到122個可編程I/O引腳(每個都有輸入控制、可中斷及開路的輸出能力);帶有8個優(yōu)先級、可單獨屏蔽中斷源的先進(jìn)中斷控制器、6組硬件定時器、4個通用同步/異步收發(fā)器USART。

3.2 BSP中幾個重要文件的修改

    由于AT91RM9200的內(nèi)核是ARM920T,所以BSP文件主要在VxWorks編澤環(huán)境Tornado的目錄target/config/all和target/config/integrator920t文件夾里。其中,a11文件夾里的文件對于絕大多數(shù)BSP都是共用的,一般來說不需要修改,特別是“configAll.h”;integrator920t文件夾里的文件就是所要編寫的BSP文件,這些文件往往與系統(tǒng)硬件密切相關(guān)。

3.2.1 修改Makeflie
    Makefile文件定義編譯和鏈接整個BSP的規(guī)則,如編譯工具的選擇、編譯選項和包含文件路徑等;控制生成VxWorks映像文件的類型,同時含有存儲區(qū)大小的信息,對于存儲區(qū)大小信息的改動必須與Config.h的對應(yīng)改動同步。有些參數(shù)需在該文件中定義,如處理器類型、編譯工具、目標(biāo)地址等。下面介紹一些須修改的參數(shù)和地址:

圖片點擊可在新窗口打開查看

4 編譯生成映像
   
系統(tǒng)定制完成后,有兩種編譯方式:一種是在Tornado下進(jìn)行編譯,生成映像文件;另一種是直接用Make工具編譯,但要寫好腳本文件。裝載到目標(biāo)板中的VxWorks映像取決于使用的下載方式,其中主要包括以下幾種:
    ①VxWorks。這是基于RAM的映像,VxWorks需要通過目標(biāo)板上的引導(dǎo)程序從串口或網(wǎng)口把它下載到目標(biāo)板的RAM中運行。在Tornado開發(fā)環(huán)境下,這是一個默認(rèn)選項,主要用在調(diào)試階段。使用宿主機(jī)上的WindSh工具和符號表。
    ②VxWorks.st。這也是基于RAM的映像,需要通過引導(dǎo)ROM把VxWorks映像下載到目標(biāo)機(jī)內(nèi)存中才能執(zhí)行。該對象文件內(nèi)置符號表。
    ③VxWorkS_rom。這是一個非壓縮、基于ROM的映像。在這個對象文件執(zhí)行前,先把自己拷貝到目標(biāo)機(jī)RAM中。這種類型的映像通常在啟動階段速度比較慢,因為代碼在ROM中執(zhí)行,但執(zhí)行階段比ROM駐留型的映像要快。
    ④VxWorks.st_rom。這是基于ROM壓縮的VxWorks映像。它在執(zhí)行前先把自己解壓并拷貝到目標(biāo)機(jī)RAM中執(zhí)行。
    ⑤VxWorks.res_rom。這是ROM駐留型的非壓縮VxWorks的映像。它在執(zhí)行前把數(shù)據(jù)段拷貝到目標(biāo)機(jī)RAM中。這種類型的映像在啟動階段比較快,但在目標(biāo)機(jī)上執(zhí)行的速度比基于ROM類型的映像慢(因為CPU訪問ROM比訪問RAM要慢)。通常在RAM空間比較小的目標(biāo)機(jī)上使用這種類型的映像。

5 需要注意的問題
   
首先,應(yīng)該避免在romInit.s中進(jìn)行過多的初始化操作。該史件中只是進(jìn)行必要的最小硬件初始化,大部分硬件的初始化都是在sysHwInit()中完成的。另外,romTnit.s中的代碼不應(yīng)當(dāng)被其他模塊或函數(shù)調(diào)用。

    其次,應(yīng)該避免sysAlib.s中工作太少。BSP開發(fā)人員通常錯誤地認(rèn)為在romInit.s里初始化過的設(shè)備不需要在sysAlib.s中重新初始化。實際上,VxWorks映像并不認(rèn)為它是由引導(dǎo)映像程序引導(dǎo)的,因此,它必須重新設(shè)置和初始化所有它自己需要使用的設(shè)備。sysInit()是該文件中最主要的一個函數(shù),也是第一個函數(shù)。該例程中很多工作與romInit()是相同的,目的是保證內(nèi)核映像在運行與冷啟動時,軟硬件環(huán)境高度一致。

    最后,對特定的BSF。驅(qū)動程序的修改,只能在特定的BSP目錄下。此設(shè)計中目錄為target/config/integra-tor920t,不要直接在target/src/drv以及target/h/drv中修改。只有風(fēng)河公司的源程序才能存放在這些目錄下。

6 結(jié)論
   
本文在介紹BSP的概念、作用和vxWorks映像分類以及系統(tǒng)啟動流程的基礎(chǔ)上,以Atmel公司生產(chǎn)的ARM9處理器AT91RM9200為例,重點介紹了VxWorks的BSP設(shè)計中需要修改的幾個重要文件,最后提出了需要注意的問題。盡管目標(biāo)板硬件不同,BSP的實現(xiàn)也不盡相同,但基本思想是一樣的。本設(shè)計對各類開發(fā)板的系統(tǒng)移植和后續(xù)的應(yīng)用程序開發(fā)有一定的參考價值。

]]>
基于VmWare的VxWorks BSP定制及調(diào)試環(huán)境構(gòu)建方法http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1936&Page=1wangxinxin2010-12-1 10:31:53

<!--[if !supportLists]-->1          <!--[endif]-->概述

如圖1,嵌入式系統(tǒng)的調(diào)試方法一般為通過PC(宿主機(jī))上的集成開發(fā)環(huán)境交叉編譯針對特定電路板(目標(biāo)機(jī))的程序,然后將程序通過目標(biāo)板的JTAG、串口或網(wǎng)口等途徑下載到目標(biāo)板上運行。因此,為了構(gòu)造一個嵌入式系統(tǒng)的學(xué)習(xí)環(huán)境,擁有一塊包含CPU、存儲器及I/O電路的目標(biāo)電路板往往是必要的。雖然許多集成開發(fā)環(huán)境附帶模擬軟件,但僅限于指令集的模擬,均無法模擬物理的目標(biāo)機(jī)硬件平臺,因而在其上只能進(jìn)行應(yīng)用程序的象征性模擬開發(fā)。但是,并非所有人都能擁有一塊物理的電路板。在這種情況下,我們?nèi)绾螛?gòu)造一個模擬的開發(fā)環(huán)境,其學(xué)習(xí)效果就如同擁有完全真實的電路板一樣呢?本文試圖解答此問題,主體內(nèi)容包括四個方面:

<!--[if !supportLists]-->?         <!--[endif]-->利用VMware等軟件模擬真實的目標(biāo)機(jī);

<!--[if !supportLists]-->?         <!--[endif]-->構(gòu)建VMware虛擬PC上VxWorks BSP,建立Bootrom和OS映像;

<!--[if !supportLists]-->?         <!--[endif]-->修改Tornado相關(guān)設(shè)置,連接宿主機(jī)與目標(biāo)機(jī),建立調(diào)試通道;

<!--[if !supportLists]-->?         <!--[endif]-->寫一個簡單的應(yīng)用程序并下載到目標(biāo)系統(tǒng)運行。

id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">


















o:title="" />
<!--[if !vml]--><!--[endif]-->

圖1 嵌入式系統(tǒng)的調(diào)試

本文工作的最終目標(biāo)為:

(1)VxWorks在VMware啟動成功并順利運行,如圖2;

style='width:267pt;height:195pt'>
o:title="vxworks in vmware" />
<!--[if !vml]--><!--[endif]-->

圖2 在VMware中運行的VxWorks

(2)可在Tornado上針對目標(biāo)板編譯程序并進(jìn)行調(diào)試,如圖3。

style='width:334.5pt;height:231pt'>
o:title="tornado in run" />
<!--[if !vml]--><!--[endif]-->

圖3 與目標(biāo)機(jī)建立調(diào)試通道的Tornado

<!--[if !supportLists]-->2          <!--[endif]-->模擬目標(biāo)機(jī)

PC也具有目標(biāo)機(jī)的所有特點,實際上,我們可以把PC作為嵌入式系統(tǒng)的目標(biāo)機(jī),從而構(gòu)造如圖4所示的開發(fā)模型:

type="#_x0000_t75" style='width:182.25pt;height:59.25pt' o:ole="">
o:title="" />
<!--[if !vml]--><!--[endif]-->

圖4 PC作為目標(biāo)機(jī)

很遺憾,這種方法實際上非常麻煩,同時開動兩臺PC進(jìn)行調(diào)試將使你和你的室友飽受折磨。因此,我們可以借助VMware來在本機(jī)上虛擬出另一PC。

VMware的確是天才的作品!在同一PC上,利用VMware幾乎可以安裝所有的操作系統(tǒng),而且操作系統(tǒng)之間的切換不需要重新啟動電腦。VM的意義是Virtual Machine,即虛擬出一個邏輯的電腦,它可以提供基于Intel CPU的虛擬PC系統(tǒng)環(huán)境,包括CPU、內(nèi)存、BIOS、硬盤和其他外圍硬件設(shè)備。

下面我們講解用VMware來建立一臺虛擬PC的步驟:

(1)下載并安裝VMware;

(2)使用VMware向?qū)Ы⒁粋針對VxWorks的虛擬機(jī);

此步驟中注意在操作系統(tǒng)中選擇“other”,如圖5:

style='width:277.5pt;height:246pt'>
o:title="" />
<!--[if !vml]--><!--[endif]-->

圖5 選擇Other操作系統(tǒng)

由于目標(biāo)機(jī)最終通過軟盤啟動,因此要求你的電腦具有軟驅(qū)。很遺憾,當(dāng)年日常使用的軟盤如今成了古董,很少再有電腦配備軟驅(qū)。因此,我們再來制造一個假冒偽劣產(chǎn)品,虛擬一個軟驅(qū)。又一個天才的工具軟件RamDiskNT為我們提供了這一便利,圖6演示了用RamDiskNT虛擬一個1.44M軟盤的方法。

style='width:289.5pt;height:291.75pt'>
o:title="" />
<!--[if !vml]--><!--[endif]-->

圖6 虛擬軟驅(qū)和軟盤

僅僅虛擬一個軟驅(qū)是不夠的,把這個軟驅(qū)添加到我們建立的虛擬機(jī)中才算修成正果,圖7演示了添加軟驅(qū)后的虛擬機(jī)硬件設(shè)置。

id="_x0000_i1032" type="#_x0000_t75" style='width:414.75pt;height:319.5pt'>
o:title="" />
<!--[if !vml]--><!--[endif]-->

圖7 包含軟驅(qū)的虛擬機(jī)

<!--[if !supportLists]-->3          <!--[endif]-->構(gòu)造BSP

<!--[if !supportLists]-->3.1         <!--[endif]-->下載和編譯網(wǎng)卡驅(qū)動

VMware為運行于其上的操作系統(tǒng)提供虛擬網(wǎng)卡支持,該網(wǎng)卡類型即為AMD的PC-NET。實際上,在Tornado開發(fā)包中已經(jīng)包含了該類型網(wǎng)卡的驅(qū)動程序,但經(jīng)過測試,對于VMware無法正常工作,所以需要從AMD的網(wǎng)站下載最新的驅(qū)動程序。

下載得到的是一個可執(zhí)行的安裝程序,運行該程序?qū)⒌玫揭粋壓縮包和一個幫助文件,按照該幫助的要求,將壓縮包直接釋放到Tornado目錄下。如果提示是否允許覆蓋文件,則選擇允許。

此后按如下步驟完成驅(qū)動程序的編譯和替換:

(1)打開一個控制臺窗口,運行批處理程序:

C:\tornado2.2\host\x86-win32\bin\torVars.bat;

該批處理文件用于設(shè)置環(huán)境變量,其內(nèi)容為:

rem Command line build environments

set WIND_HOST_TYPE=x86-win32

set WIND_BASE=C:\Tornado2.2

set PATH=%WIND_BASE%\host\%WIND_HOST_TYPE%\bin;%PATH%

       如果沒有設(shè)置成功,可以手工設(shè)置這些環(huán)境變量。

(2)定位到C:\tornado2.2\target\src\drv\end目錄,運行:

make CPU=PENTIUM tool=gnu ln97xend.o

(3)定位到C:\tornado2.2\target\lib\pentium\PENTIUM\common目錄,并將上一步生成的文件ln97xend.o復(fù)制到此目錄下。備份此目錄下的文件libdrv.a;

(4)運行命令arpentium -d libdrv.a ln97xEnd.o,刪除libdrv.a中原有的ln97xEnd模塊;

(5)運行命令arpentium -ra iOlicomEnd.o libdrv.a ln97xEnd.o將我們剛剛創(chuàng)建的新ln97xEnd模塊添加進(jìn)去。

<!--[if !supportLists]-->3.2         <!--[endif]-->修改配置文件

我們要修改編譯VxWorks的配置頭文件Config.h中定義的一些參數(shù),使編譯出來的系統(tǒng)引導(dǎo)程序和VxWorks的映象符合我們的要求;同時還要修改sysLn97xEnd.c這個文件,以使系統(tǒng)的網(wǎng)絡(luò)功能正常運行。

(1)定位目錄到C:\tornado2.2\target\config\pcPentium并打開該目錄下Config.h文件;

(2)查找到定義DEFAULT_BOOT_LINE宏的地方,修改預(yù)處理條件CPU == PENTIUM分支下的定義如下:

#define DEFAULT_BOOT_LINE \

"lnPci(0,0)your_host_name:d:\\vxWorks h=193.168.80.169 e=193.168.80.254 u=target pw=vxworks tn=target"

其中:

lnPci(0,0)指定了使用第0個網(wǎng)卡和第0個處理器,lnPci這個標(biāo)識會因為使用的驅(qū)動程序不同而有所不同,但這里用lnPci就可以了;

host指定你的主機(jī)的名字,使用host就可以;

d:\\vxWorks指定了VxWorks映象下載的完整路徑(后面會有說明);

h=193.168.80.169是宿主機(jī)的IP地址,可以根據(jù)實際情況修改;

e=193.168.80.254是目標(biāo)機(jī)的IP地址,可以根據(jù)實際情況修改;

u=target指定了FTP服務(wù)器的用戶名,這個FTP就是用來下載VxWorks映象的,后面還會提到;

pw=target是用戶名對應(yīng)的口令;

tn=target指定目標(biāo)機(jī)的名字,任意指定即可。

(3)指定網(wǎng)卡驅(qū)動程序

首先查找“Network driver options”這段文字,之后你可以看到在該注釋后面定義了一系列的有關(guān)網(wǎng)卡驅(qū)動的宏定義。注意保證INCLUDE_END和INCLUDE_LN_97X_END這兩個宏處于定義狀態(tài)(define),其他的宏都處于未定義狀態(tài)(undef),即:

/* Network driver options */

#define INCLUDE_END             /* Enhanced Network Driver Support */


#undef  INCLUDE_DEC21X40_END    /* (END) DEC 21×4x PCI interface */

#undef  INCLUDE_EL_3C90X_END    /* (END) 3Com Fast EtherLink XL PCI */

#undef  INCLUDE_ELT_3C509_END   /* (END) 3Com EtherLink III interface */

#undef  INCLUDE_ENE_END         /* (END) Eagle/Novell NE2000 interface */

#undef    INCLUDE_FEI_END         /* (END) Intel 8255[7/8/9] PCI interface */

#undef    INCLUDE_GEI8254X_END    /* (END) Intel 82543/82544 PCI interface */

#define INCLUDE_LN_97X_END      /* (END) AMD 79C97x PCI interface */

#undef  INCLUDE_ULTRA_END       /* (END) SMC Elite16 Ultra interface */


#undef  INCLUDE_BSD             /* BSD / Netif Driver Support (Deprecated) */


#undef  INCLUDE_EEX             /* (BSD) Intel EtherExpress interface */

#undef  INCLUDE_EEX32           /* (BSD) Intel EtherExpress flash 32 */

#undef  INCLUDE_ELC             /* (BSD) SMC Elite16 interface */

#undef  INCLUDE_ESMC            /* (BSD) SMC 91c9x Ethernet interface */

(4)包含PC_CONSOLE

缺省情況下,VxWorks系統(tǒng)是不接受外部輸入設(shè)備(如鍵盤)的輸入,也不向外部輸出設(shè)備(如顯示器)輸出數(shù)據(jù)。為了便于調(diào)試,我們必須改變它的這種缺省狀態(tài)。我們查找定位宏INCLUDE_PC_CONSOLE,然后保證其處于定義狀態(tài)(define)即可,即:

#define INCLUDE_PC_CONSOLE                /* PC keyboard and VGA console */


#ifdef INCLUDE_PC_CONSOLE

#   define PC_CONSOLE           (0)      /* console number */

#   define N_VIRTUAL_CONSOLES   (2)      /* shell / application */

#endif /* INCLUDE_PC_CONSOLE */

(5)修改sysLn97xEnd.c

打開C:\tornado2.2\target\config\pcPentium目錄下的sysLn97xEnd.c文件,先定位到“memory-mapped IO base”這段文字,然后將其前面的參數(shù)由pciRsrc[endUnit].bar[1]修改為NONE,保存即可,即:

 sprintf (paramStr, paramTemplate,

       endUnit,                     /* END unit number */

       NONE,     /* memory-mapped IO base */

       pciRsrc[endUnit].bar[0],     /* IO address space base */

       PCI2DRAM_BASE_ADRS,          /* host PCI mem. base */

       pciRsrc[endUnit].irqvec,     /* IRQ vector */

       pciRsrc[endUnit].irq,        /* IRQ number */

       LN97X_CSR3_VALUE,            /* csr3 register value */

       LN97X_OFFS_VALUE,            /* offset */

       LN97X_RSVD_FLAGS,            /* flags (reserved) */

       &ln97xStrDesc[typeIdx]       /* device description */

       );

<!--[if !supportLists]-->3.3         <!--[endif]-->編譯Bootrom和VxWorks映像

編譯Bootrom

打開Tornado開發(fā)工具,在Build菜單下選擇Build Boot ROM,選擇BSP為pcPentium,image類型為bootrom,工具為gnu,如圖8。點擊OK,Bootrom就會編譯。

style='width:254.25pt;height:154.5pt'>
o:title="" />
<!--[if !vml]--><!--[endif]-->

圖8 編譯bootrom

       編譯VxWorks映像

編譯生成bootrom后,還要創(chuàng)建一個VxWorks映象(image),也就是VxWorks操作系統(tǒng)本身的代碼,步驟為:

(1)創(chuàng)建一個“bootable VxWorks image”的工程,BSP 選擇pcPentium;

style='width:357.75pt;height:271.5pt'>
o:title="" />
<!--[if !vml]--><!--[endif]-->

圖9 建立基于pcPentium BSP的VxWorks映像

(2)選擇需要的VxWorks組件

如圖10,在這個例子中我們需要包括兩個重要的組件:Telnet server 和 Target shell。前者使我們可以通過Telnet協(xié)議登錄到VxWorks操作系統(tǒng)中;后者則可以讓我們通過命令行控制VxWorks系統(tǒng)。另外,需要把所有C++相關(guān)的選項都包含進(jìn)去。

style='width:201.75pt;height:298.5pt'>
o:title="" />
<!--[if !vml]--><!--[endif]-->

圖10 包括Telnet server和Target shell組件

完成選擇后,即可開始編譯程序。到此我們已經(jīng)生成了VxWorks的系統(tǒng)引導(dǎo)程序和運行時的代碼映象。這里還要提醒讀者,在你每次修改完系統(tǒng)的配置信息(如:config.h)后,都要重新創(chuàng)建一個工程來編譯VxWorks映象,以免出現(xiàn)代碼不一致的問題。將生成的名為“vxworks”的文件(在你創(chuàng)建的工程的目錄下)復(fù)制到D:\VxWorks目錄下。這個路徑是由上面我們所設(shè)置的DEFAULT_BOOT_LINE宏中的路徑參數(shù)決定的,必須保持二者一致。

<!--[if !supportLists]-->3.4         <!--[endif]-->創(chuàng)建引導(dǎo)軟盤

現(xiàn)在開始制作VxWorks系統(tǒng)引導(dǎo)磁盤,用于引導(dǎo)裝載VxWorks運行映象。定位目錄到C:\tornado2.2\target\config\pcPentium,插入您已經(jīng)格式化好的軟盤,然后運行:

mkboot a: bootrom

該命令將在軟盤上建立VxWorks系統(tǒng)引導(dǎo)分區(qū),并將引導(dǎo)程序復(fù)制到軟盤上。

 

<!--[if !supportLists]-->4          <!--[endif]-->建立調(diào)試環(huán)境

<!--[if !supportLists]-->4.1         <!--[endif]-->配置FTP服務(wù)器

這里的FTP服務(wù)器用于在系統(tǒng)成功引導(dǎo)后,下載VxWorks的運行時映象。我們這里使用Tornado開發(fā)環(huán)境自帶的FTP服務(wù)器。

如圖11,打開Tornado FTP Server,選擇“Security”菜單下的“Users/Rights”子菜單,創(chuàng)建User Name為“target”,修改“Home Directory”為D:\VxWorks目錄(此路徑由上面的DEFAULT_BOOT_LINE參數(shù)決定),同時修改口令為“target”,最后點擊“Done”按鈕完成修改。

style='width:291.75pt;height:140.25pt'>
o:title="" />
<!--[if !vml]--><!--[endif]-->

圖11 配置FTP服務(wù)器

為了便于調(diào)試,我們還要打開FTP Server的日志功能。選擇“Logging”菜單下的“Logging Options”子菜單,其中除了“Winsock Calls”外,讓其他選項全都處于開啟狀態(tài)。

保持FTP Server窗口處于打開狀態(tài)(這樣FTP服務(wù)器就處于運行狀態(tài))。

虛擬機(jī)從軟盤啟動,接下來會下載服務(wù)器D:\vxworks映像,服務(wù)器的FTP會有相關(guān)的log,如圖12:

圖12 FTP服務(wù)器 id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;left:0;
text-align:left;margin-left:9pt;margin-top:1.8pt;width:415.5pt;height:286.5pt;
z-index:-1;mso-position-horizontal-relative:text;
mso-position-vertical-relative:text' wrapcoords="-39 0 -39 21543 21600 21543 21600 0 -39 0"
o:allowoverlap="f">
o:title="Snap1" />

]]>
開發(fā)COLDFIRE5235開發(fā)板的VXWORKS BSP的過程總結(jié)。http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1935&Page=1wangxinxin2010-12-1 10:29:31COLDFIRE5235沒有BSP的開發(fā)模板,但是有5272的BSP,所以選用5272的BSP為模板。

1. 啟動。 COLDFIRE5235復(fù)位后,CS0選通,做為啟動設(shè)備。CPU從地址0讀入兩個LONG字,第一個為SP,另一個為PC的值。所以在FLASH映像中,至少前面兩個LONG字必須存儲對應(yīng)值。另外一個就時PC值,可以在一開始賦值時就給其一個在FLASH中的地址,如0XFFE00008。也可以賦一個以0為基址的偏移給PC,如0X00000008,不過這樣賦值的話,必須在接著的代碼中用JUMP語句調(diào)到以0XFFE00000為基址的FLASH空間中去。

2. 調(diào)試手段!傞_始運行時,沒有其他手段,就需要使用LED點燈,或者使用自己定義的串口輸出函數(shù)來進(jìn)行調(diào)試。不過要注意的是,在VXWORKS中初始化串口后,注意考慮自己定義的串口函數(shù)和系統(tǒng)之間的沖突。

]]>
基于S3C44BOX的VxWorks BSP設(shè)計http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1934&Page=1wangxinxin2010-12-1 10:28:39

摘要  S3C44BOX固定的中斷管理模式與VxWorks的異常處理機(jī)制存在著沖突。本文分析VxWorks的異常處理機(jī)制后,提出一種解決方案,實現(xiàn)VxWorks在S3C44BOX上的BSP定制。該方案保留VxWorks原有的中斷處理機(jī)制,從而保證VxWorks移植后的穩(wěn)定性和可靠性。
關(guān)鍵詞  VxWorks S3C44BoX  BSP  中斷處理機(jī)制

引 言
    VxWorks是現(xiàn)在所有獨立于處理器的實時系統(tǒng)中最具特色的操作系統(tǒng)之一。它支持的CPU包括:PowerPC、x86、MIPS、ARM等,其微內(nèi)核Wind具有任務(wù)問切換時間短、中斷延遲小、網(wǎng)絡(luò)流量大等特點,是一個具有較高性能的標(biāo)準(zhǔn)嵌入式實時操作系統(tǒng)。此外,VxWorks操作系統(tǒng)還具有較好的可裁減性和易于移植等特點。

    S3C44BOX是韓國Samsung公司出品的一款A(yù)RM(Advanced RISC Machines)微控制器,CPU核心為ARM7TDMI。S3C44BOX具有非常豐富的外圍資源,集成LCD控制器、12C總線控制器、I2S總線控制器、2個串口控制器、2個通用DMA(Direct Memory Access)控制器、8個10位ADC(Analog to Digital Converter)通道、71個通用I/O引腳等,大大減少了系統(tǒng)成本,是各種學(xué)習(xí)板和開發(fā)板的首選ARM芯片。

1 BSP概念
    BSP(Board Support Packet,板級支持包)是介于底層硬件和上層軟件之間的底層軟件開發(fā)包,它的主要功能為屏蔽硬件,提供操作系統(tǒng)的驅(qū)動及硬件的驅(qū)動,具體功能包括:
    ◆目標(biāo)機(jī)硬件初始化,主要是CPU的初始化,為整個軟件系統(tǒng)提供底層硬件支持;
    ◆為操作系統(tǒng)提供設(shè)備驅(qū)動程序和系統(tǒng)中斷服務(wù)程序;
    ◆定制操作系統(tǒng)的功能,為軟件系統(tǒng)提供一個實時多任務(wù)的運行環(huán)境。

2 VxWorks啟動流程
    VxWorks的啟動涉及到兩個映像文件:Bootrom映像和VxWorks映像,其中每一類又可以再細(xì)分為壓縮、非壓縮、駐留ROM和非駐留ROM類型的映像。不同的映像對應(yīng)的啟動流程也有所不同,但它們的基本流程是相同的,如表1所列。

圖片點擊可在新窗口打開查看

   

]]>
vxworks中斷服務(wù)程序http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1933&Page=1wangxinxin2010-12-1 9:35:05void pciInt (int irq ){
PCLlNT RTN *pRtn;
for (pRm = (PCI_INT_RTN*)DLL_FIRST(&pcilntList[irq]);
pRtn!=NULL;
pRtn =(PCI_INT_RTN*)DLL_NEXT(&pRtn->node))
(*pRtn->routine)(pRtn->parameter);
}
   當(dāng)PCI總線上有中斷發(fā)生時,系統(tǒng)調(diào)用void pcilnt(int irq)函數(shù),再由pciInt使用內(nèi)部的鏈表來依次調(diào)用掛在該中斷上的ISR。如果某個ISR不能正常退出,就會影響到其它ISR的運行。在調(diào)試時為了檢查中斷向量是否已經(jīng)和ISR可靠的連接上,可以在命令行上或程序中直接調(diào)用pciInt來查看ISR是否被觸發(fā)。在硬件確定的情況下,可以小心設(shè)計保證各個硬件使用不同的中斷,這樣對PCI上的設(shè)備也可直接使用intConnect來掛中斷。
        需要說明的是ISR掛上中斷向量的過程不是簡單的在向量表中設(shè)置中斷向量值。VxWorks除了設(shè)置中斷向量值以外,還在與中斷向量相連的ISR加上了一層薄薄的包裝,包括IsR執(zhí)行前保存寄存器值.設(shè)置堆棧以及IsR執(zhí)行后恢復(fù)寄存器和堆棧。在中斷頻繁的場合,系統(tǒng)中中斷堆棧有可能被耗盡而溢出。為了避免上述情況發(fā)生,必須修改系統(tǒng)的中斷堆棧大小,即在config.h中加入以下代碼:
#define INCLUDE_KERNEL
#define ISR_STACK_SIZE 0xl000 //表示系統(tǒng)中中斷堆棧的大小為4k
由于中斷處理程序的特殊性,中斷處理程序中不能使用可能導(dǎo)致阻塞的函數(shù),如printf,semTake等,具體不可使用的函數(shù)列表可以在<<VxWoks Programmer Guide>>中查到。有時候為了調(diào)試方便,希望在ISR中打印一些信息,系統(tǒng)提供了一個與prinf等價的函數(shù)sysLog,該函數(shù)可接受7個參數(shù)。它是非阻塞的。比較而言,prinf函數(shù)要在打印任務(wù)完成后才返回,sysLog只把打印任務(wù)放到系統(tǒng)的打印隊列中就返回。在ISR中雖然不可以使用semTake,但可以使用semGive(互斥類型的除外)。一般使用semTake和semGive在ISR和普通程序間通信:當(dāng)一個中斷產(chǎn)生,ISR 完成必要的任務(wù)后,調(diào)用semGive通知另外一個使用semTake等待ISR信號的任務(wù),該任務(wù)收到semGive釋放的信號后,繼續(xù)完成ISR中不便處理的任務(wù)。 ]]>
VxWorks BSP和啟動過程http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1932&Page=1wangxinxin2010-12-1 9:33:10
1.定義:Board Support Package, Provides VxWorks with primary interface to hardware environment。

2.作用:

在通電后,初始化硬件;

支持VxWorks和硬件驅(qū)動通信;

使hardware-dependent 和 hardware-independent在VxWorks系統(tǒng)中很好的結(jié)合;

二.開發(fā)BSP主要的兩點:

系統(tǒng)image的生成,image的種類,image的download下載過程,系統(tǒng)的啟動順序和過程,調(diào)試環(huán)境的配置及遠(yuǎn)端調(diào)試的方式和方法,相應(yīng)BSP設(shè)置文件的修改(網(wǎng)絡(luò),串口... ),BSP各文件的組成和作用。

要對系統(tǒng)底層驅(qū)動清楚,也就是對CPU及相關(guān)的硬件有所了解.主要是32微處理器(上電啟動過程, download image的方式方法,讀寫ROM,地址空間分配,MMU,寄存器,中斷定義,..).參照硬件資料,多讀一些源碼會有所幫助.



三.兩個主要兩個協(xié)議:

WTX協(xié)議(Wind River Tool eXchange): 用于開發(fā)機(jī)內(nèi)部Tornado工具與Target Server之間通信.

WDB協(xié)議(Wind DeBug): 用于主機(jī)Target Server與目標(biāo)機(jī)之間的通信.



四.主要BSP主要文件目錄的組成及主要文件的作用:

1.目錄target/config/All:

這個目錄下的文件是所有BSP文件共享的,不是特別需要不要更改里面的任何文件.

a. configAll.h:
缺省定義了所有VxWorks的設(shè)置.如果不用缺省的設(shè)置,可在BSP目錄下的config.h文件中用#define或#undef方式來更改設(shè)置.

b. bootInit.c:
在romInit.s后,完成Boot ROM的第二步初始化.程序從romInit.s中的romInit()跳到這個文件中的romStart().來執(zhí)行必要的解壓和ROM image的放置.

c. bootConfig.c: 完成Boot ROM image的初始化和控制.

d. usrConfig.c: VxWorks image的初始化代碼.



2.目錄target/config/comps/src:

涉及系統(tǒng)核心的components,主要由target/config/All中usrConfig.c中函數(shù)調(diào)用.



3.目錄target/config/bspname:

包含系統(tǒng)或硬件相關(guān)的BSP文件.

a. Makefile 一些命令行控制images的生成。

b. README BSP發(fā)布紀(jì)錄,版本,總的文檔

c. config.h 包括所有涉及CPU主板的設(shè)置及定義(includes,definations),參見 BSP設(shè)置文件及生成下載

d. configNet.h 網(wǎng)絡(luò)驅(qū)動的主要設(shè)置文件,主要對END驅(qū)動設(shè)置.

e. romInit.s 匯編語言文件,是VxWorks Boot ROM和ROM based image的入口,參見 系統(tǒng)啟動部分

f. sysALib.s 匯編語言文件,程序員可以把自己的匯編函數(shù)放在這個文件里,在上層調(diào)用.VxWorks image的入口點_sysInit在這個文件里,是在RAM中執(zhí)行的第一個函數(shù).

g. sysLib.c 包含一些系統(tǒng)相關(guān)的函數(shù)例程,提供了一個board-level的接口,VxWorks和應(yīng)用程序可以以system-indepent的方式生成.這個文件還能包含目錄target/config/comps/src的驅(qū)動.

h. sysScsi.c 可選文件用于Scsi設(shè)備設(shè)置和初始化.

i. sysSerial.c 可選文件用于所有的串口設(shè)置和初始化.

j. bootrom.hex SIC文件包含VxWorks Boot ROM代碼

k. VxWorks 運行在目標(biāo)機(jī)上,完整的,連結(jié)后的VxWorks二進(jìn)制文件.

l. VxWorks.sym 完全的,連結(jié)后帶有符號表的VxWorks二進(jìn)制文件

m. VxWorks.st 完全的,連結(jié)后,standalone,帶有符號表的VxWorks二進(jìn)制文件

注:

BSP用"make"來編譯連接生成(Created),而不是用Tornado的工具.

BSP和應(yīng)用程序都可以在"make"或"tornade"上開發(fā)(developed)

BSP被設(shè)置包括以下驅(qū)動:

中斷控制interrupt controller,計時器timer(sys/aux),串口UART(serial),顯示屏LCD,鍵盤Keyboard(opt),觸摸屏touch-screen(opt)。

一.VxWorks Image的種類:

BSP默認(rèn)的download VxWorks RAM image方式是從Ethernet. 串口電纜需要用來和開發(fā)板(COM1)通信,通過協(xié)議WDB.



可加載的映像( Loadable images) 可分為:
1.ROM-based images---compressed/uncompressed(只要一個映像)。

2.ROM-Resident images(BootRom + VxWorks Image 模式)。



BootRom中燒錄的映像:

VxWorks boot images---A VxWorks image designed to load another VxWorks images containing application code (often refer to as "boot code") ,"Burned" into ROM or loaded into Flash,Maybe execute in ROM/Flash (ROM-resident),Maybe execute out of RAM.



VxWorks映像(包含用戶程序) :

VxWorks images---A VxWorks image containing "end-user" code,

VxWorks映像又分為以下兩類:

1.Loadable VxWorks image--VxWorks images loaded by VxWorks boot image.

2.VxWorks ROM image--VxWorks image "burned" into ROM or loaded into Flash.May execute in Flash.



VxWorks Image文件類型的說明

1.Uploaded images(通過網(wǎng)口或串口下載到RAM):

vxWorks - basic Tornado, shell 和 symbol table 在主機(jī)端

vxWorks.st(文件很大)- 獨立的 image,包含shell和 symbol table在目標(biāo)板運行

2.ROM based images(直接燒入ROM的VxWorks):

vxWorks_rom - Tornado in ROM,非壓縮, 在 RAM 中運行

vxWorks.res_rom_nosym - Tornado in ROM, 非壓縮,在 ROM 中運行

vxWorks.st_rom - Stand-alone in ROM, 壓縮, RAM 中運行

vxWorks.res_rom - Stand-alone in ROM, 非壓縮, ROM 中運行



VxWorks映像包含數(shù)據(jù)和程序段兩個部分

VxWorks images consist of:

1.Text segment---executable instruction.

2.Data segment---Initilized global and static varibles.





非BSP make文件中包括:

include $(TGT_DIR)/h/make/rules.library
include $(TGT_DIR)/h/make/defs.default(define default value for makefile)

...............

BSP make文件中包括: include $(TGT_DIR)/h/make/rules.bsp ...




一.系統(tǒng)啟動順序

VxWorks image

分為在ROM中運行和在RAM中運行兩種.兩者啟動順序的區(qū)別在于sysInit()函數(shù)的調(diào)用.該函數(shù)在RAM運行的VxWorks中初始化RAM。



1.ROM中運行的VxWorks :

VxWorks在ROM中運行,即寫入ROM中的VxWorks是非壓縮的,不需要解壓,系統(tǒng)直接跳到ROM的首地址,運行VxWorks.注意:ROM運行的VxWorks并不支持所有的主扳,應(yīng)以主板手冊為準(zhǔn).

1.1執(zhí)行順序

romInit.s的romInit()-->bootInit.c的romStart()-->usrConfig.c中的usrInit()-->sysHwInit()-->usrKernelInit()-->KernelInit(usrRoot,...)

1.2優(yōu)點

VxWorks在ROM中運行主要是為了節(jié)省RAM空間,以便應(yīng)用程序有更大的空間運行.只把VxWorks image的data段復(fù)制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中執(zhí)行.

1.3缺點

ROM中運行的VxWorks缺點是運行速度慢.



2. RAM中運行的VxWorks

VxWorks在RAM中運行,即寫入ROM中的Boot或VxWorks Image是壓縮的,需要先解壓copy所有的text和data到RAM的LOCAL_LOW_ADRS中,下面sysInit()主要是初始化RAM用的,系統(tǒng)直接跳到RAM的首地址,運行VxWorks。usrInit()前面不壓縮,即romInit(),romStart()不能壓縮.

2.1程序執(zhí)行順序

romInit.s中的romInit()-->bootInit.c中的romStart()-->sysaLib.s中的sysInit()-->usrConfig.c中的usrInit()-->sysHwInit()-->usrKernelInit()

-->KernelInit(usrRoot,...)



Boot或VxWorks image的text段或data段會從ROM復(fù)制到RAM,在RAM中運行。其中usrRoot()是VxWorks啟動的第一個任務(wù),由它來初始化 driver,network等描述: romInit.s first execute in flash,minal initiliz,then jump to romStart.romStart() 開始裝載和解壓image到RAM,sysaLib.s是在RAM中執(zhí)行的第一個函數(shù).



BootROM image

BootROM image 最少的系統(tǒng)初始化,主要用于啟動裝載VxWorks image.一般有壓縮和不壓縮兩種形式,如bootrom和boot_uncmp.與VxWorks image的區(qū)別在于一個Bootrom調(diào)用bootConfig.c,而VxWorks調(diào)用usrConfig.c.



1.1程序執(zhí)行順序

romInit.s中的romInit()-->bootInit.c中的romStart()-->文件bootConfig.c中的usrInit()-->sysHwInit()-->usrKernelInit()

-->KernelInit(usrRoot,...)



其中 /target/config/all/bootConfig.c是Boot ROM設(shè)置模塊.用于通過網(wǎng)絡(luò)加載VxWorks image.

usrRoot()-->bootCmdLoop(void)命令行選擇,或autobooting

-->bootLoad(pLine, &entry)加載模塊到內(nèi)存(網(wǎng)絡(luò),TFFS,TSFS...)

-->netifAttach()-->go(entry)-->(entry)()從入口開始執(zhí)行,不返回.



1.2各個函數(shù)的主要作用

romInit() power up,disable interrupt,put boot type on the stack,clears caches.

romStart() load Image Segments into RAM.

usrInit() Interrupt lock out,save imformation about boot type,handle all the Initialization before the kernel is actually started,then starts the kernel execution to create an initial task usrRoot().This task completes the start up.

sysHwInit() Interrupt locked,Initializeshardware,registers,

activation kernel

KernelInit(usrRoot,...)

Initializes and starts the kernel.

Defines system memory partition.

Activates a task tUsrRoot to complete initalization.

Unlocks inierrupts.

Uses usrInit()stack.

usrRoot() 初始化內(nèi)存分區(qū)表(memory partition library)

初始化系統(tǒng)系統(tǒng)時鐘(system clock)

初始化輸入輸出系統(tǒng)(I/O system)----可選

Create devices----可選

設(shè)置網(wǎng)絡(luò)(Configure network)--------可選

激活WDB目標(biāo)通信(Activate WDB agent)---------可選

調(diào)用程序(Activate application)



VxWorks 在ROM中的情況

ROM 低地址位為沒有壓縮的romInit.s和romStart()在ROM的起始位置,系統(tǒng)power up后,從這個起始位開始執(zhí)行,即執(zhí)行romInit(),起始位置由硬件定義,一般為0x00000000。ROM 高地址位為壓縮的VxWorks Imgage

其中 RAM_LOW_ADRS, RAM_HIGH_ADRS 等一些地址在makefile 和BSP config.h中定義。
]]>
VxWorks實時操作系統(tǒng)下BSPhttp://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1931&Page=1wangxinxin2010-12-1 9:30:07
68 VxWorks實時操作系統(tǒng)下BSP
%A VxWorks實時操作系統(tǒng)下BSP
%A 丁大尉 煙臺大學(xué) 王金剛 宮霄霖 姜 平 天津大學(xué)
%A 摘要文中介紹實時操作系統(tǒng)V Works中BSP的概念,以及開發(fā)BSP必須要了解的交叉調(diào)試環(huán)境、系統(tǒng)的啟動過
%A 程、V works Image的分類以及BSP文件的組成等內(nèi)容。
%A 關(guān)鍵詞 VxWorks lISP
%A The Concept of BSP in VxWorks
%A DiI1g Dawei Wang Jingang Gong Xiaolin Jiang Ping
%A Abstract In this paper,the concept of BSP in VxWorks,a real―time operating system are presented. It also described
%A the cross debug environment,the boot process of the system,the sorts of VxWorks Image and the composition of BSP files.
%A Keywords VxWorks BSP
%A 1 BSP
%A Vxworks操作系統(tǒng)是一種嵌入式實時操作系
%A 統(tǒng)(RTOS),它采用微內(nèi)核的結(jié)構(gòu),可以運行于
%A 目前幾乎所有的CPU 上,包括intel x86、Power
%A PC、ARM、MIPS等, 但前提是必須有相應(yīng)的
%A BSP (板極支持包)支持。BSP包含了與硬件相關(guān)
%A 的功能函數(shù),提供Vxworks與硬件之間的接口,
%A 但是BSP不等同于硬件驅(qū)動。
%A BSP主要完成硬件初始化,包括系統(tǒng)上電時
%A 在特定位置提供人口代碼,初始化存儲器,關(guān)中
%A 斷,把VxWorks加載到RAM 區(qū)等; 支持Vx―
%A Works與硬件驅(qū)動的通信。有些硬件驅(qū)動是需要
%A 。BSP支持的,例如硬件驅(qū)動定義它的中斷服務(wù)例
%A 程(ISR),由BSP來將此ISR連接到中斷向量表;
%A 將獨立與硬件的軟件和與硬件相關(guān)的軟件在Vx―
%A Works系統(tǒng)中很好地結(jié)合起來。
%A 2 BSP開發(fā)
%A 做BSP開發(fā),應(yīng)首先建立Tornado開發(fā)環(huán)境,
%A 根據(jù)具體情況配置VxWorks組件;接著選擇合適
%A 的BSP模板,對相應(yīng)的文件進(jìn)行修改;最后添加
%A 自己的設(shè)備驅(qū)動程序,進(jìn)行仿真和調(diào)試。
%A Tornado 2.2交叉調(diào)試環(huán)境嵌入式操作系統(tǒng)
%A 在調(diào)試環(huán)境上與桌面操作系統(tǒng)存在明顯的區(qū)別,它
%A 又稱為交叉調(diào)試。因為Tornado開發(fā)環(huán)境是基于
%A 架構(gòu)的,所以選擇的時候要根據(jù)自己的處理器內(nèi)核
%A 選擇合適的版本。因為我們使用的處理器
%A S3CA510B采用的是ARM 核, 所以我們選用Tor―
%A nado2.2 for ARM ,這就保證了使用的開發(fā)環(huán)境里
%A 包括了需要的開發(fā)工具以及同類的BSP參考模板。
%A ? /target/eonfig/all/eonfigAl1.h中包含所有
%A 的VxWorks組件選項, 可以在32程中對這些組件
%A 進(jìn)行添加或者刪除。
%A 選擇BSP模板并對相應(yīng)文件進(jìn)行修改 Vx-
%A Works的板級支持包BSP提供了Vxworks同硬件
%A 環(huán)境的基本接口界面,支持對硬件驅(qū)動的訪問,將
%A Vxworks中硬件相關(guān)和硬件無關(guān)的軟件集成到一
%A 體,其功能相當(dāng)于PC機(jī)的BIOS。它包括源文件、
%A 頭文件、make文件、導(dǎo)出文件和二進(jìn)制的驅(qū)動模
%A 塊。
%A BSP主要由C源文件和匯編文件組成,BSP
%A 的開發(fā)可以從WindRiver公司提供的BSP模板開
%A 始,在此基礎(chǔ)上作相應(yīng)的修改。主要需要做以下幾
%A 個方面的修改:
%A ① eonfig.h
%A VxWorks的缺省配置由eonfigAl1.h確定, 用
%A 戶需要按照自己的需要來改寫eonfig.h,如設(shè)置存
%A 儲區(qū)的大小、增加新的程序模塊、刪除不需要的模
%A 塊等。
%A ② makefile
%A 它控制生成VxWorks的映像文件的類型,另
%A 外它還包含存儲區(qū)大小的信息。所有新增加的程序
%A 模塊必須在makefile中使用MACH ―EXTRA 命
%A 令將其目標(biāo)模塊加入到最終的VxWorks映像文件
%A 中。
%A ③ 編制專用接口驅(qū)動程序
%A VxWorks的缺省配置提供了通用接口的驅(qū)動
%A 程序,但是并不一定適合用戶具體的硬件環(huán)境,所
%A 以用戶需要使用ar-d命令將這些模塊從庫文件中
%A 刪除,然后將其源程序復(fù)制到用戶的BSP 目錄中
%A 進(jìn)行修改,并在makefile中使用MACH―EXTRA
%A 命令將其目標(biāo)模塊加入到最終的Vxworks映像文
%A 件中。
%A 維普資訊圖片點擊可在新窗口打開查看http://www.cqvip.com
%A 皇 量技術(shù)?2005年第一期 69
%A VxWorks Image的分類 VxWorks Image可
%A 以分為三類:ROM-based Image(壓縮或非壓縮);
%A ROM -Resident Image; Loadable Image
%A 。
%A VxWorks Image由Text段、Data段和BSS
%A 段組成,Text段是可執(zhí)行代碼段,Data是已初始
%A 化的全局變量和靜態(tài)變量,BSS段是未初始化全局
%A 變量和靜態(tài)變量。
%A 對于不同的Vxworks Image,啟動步驟也不
%A 一樣。但對于三種Image,第一步是相同的,都是
%A 處理器跳到某一特定地址, 開始執(zhí)行啟動代碼
%A (BootStrap)。它們都完成相同的功能:關(guān)閉中斷,
%A 初始化目標(biāo)存儲器,裝載要運行的VxWorks Im―
%A age段到RAM 中。
%A RoM―Resident Image與ROM-based Image兩
%A 種Image都是用于產(chǎn)品階段, 即直接燒錄到ROM
%A 中。在開發(fā)調(diào)試階段, 這兩種Image由于需要頻
%A 繁的燒寫RoM 所以非常不方便。
%A Loadable
%A Image 是位
%A 于主機(jī)上的
%A 二進(jìn)制文件,
%A 由燒錄在目
%A 標(biāo)板RoM
%A 中的boot―
%A RoM Image
%A LoCAL MEM
%A LoCAL ADRS
%A RAM LOW
%A ADRS
%A FREE RAM
%A ADRS
%A RAM HIGH
%A ADRS
%A 將其從主機(jī)
%A 下載到目標(biāo) 圖1 Loadable Image的下載過程
%A 板的RAM
%A 中。實際上,boot―RoM Image是一個高度裁減的
%A 最小Vxworks系統(tǒng),它的唯一作用就是實現(xiàn)目標(biāo)
%A 機(jī)與主機(jī)通信,將位于主機(jī)硬盤上的loadable Im―
%A age下載到目標(biāo)板RAM 中, 執(zhí)行情況如圖1。首
%A 先執(zhí)行BootStrap,Bo otStrap完成最基本的硬件初
%A 始化工作, 并將boot―RoM Image拷貝到RAM ―
%A H IGH
%A ― ADRS處開始執(zhí)行,把主機(jī)上指定位置的
%A Loadable Image下載到RAM ―LOW ―ADRS處,
%A 然后由此Image來接管目標(biāo)板,Bo ot Program 已
%A 完成使命,它所占用的RAM 區(qū)由系統(tǒng)回收,作為
%A 系統(tǒng)內(nèi)存池的一部分。另外,boot―RoM Image也
%A 可以是壓縮的, 在拷貝到RAM ―HIGH ―ADRS
%A 時進(jìn)行解壓;也可以駐留在ROM 中執(zhí)行,而只將
%A 它的Data段和BSS段拷貝到RAM ―HIGH ―
%A ADRS處。
%A 系統(tǒng)啟動順序 對于ROM-based Image和
%A ROM-Resident Image,其啟動順序如下:
%A rom Init () 一rom Start () 一sysInit ()
%A usrInit () ._+Kernellnit (usrRoot, ? ? )
%A 各函數(shù)的作用如下:
%A romInit():關(guān)閉中斷, 做盡量少的硬件初始
%A 化,使C程序得以運行。
%A romStart(): 將Vxworks Image拷貝到
%A RAM 中,如果需要則進(jìn)行解壓縮;如果是ROMResident
%A Image, 則只拷貝Data段和BSS段。
%A sysInit():初始化系統(tǒng)中斷, 即把所有寄存
%A 器置為已知狀態(tài), 并清除所有中斷。
%A usrInit():在文件usrConfig.c中,完成系統(tǒng)
%A 內(nèi)核運行前需要完成的所有初始化,包括初始化
%A cache、BsS段清零、初始化中斷向量等。
%A Kernellnit():初始化并啟動多任務(wù)內(nèi)核,開
%A 中斷,創(chuàng)建一個根任務(wù)usrRoot。
%A usrRoot(): 初始化I/O 系統(tǒng),初始化系統(tǒng)時
%A 鐘,創(chuàng)建設(shè)備,安裝驅(qū)動,初始化網(wǎng)絡(luò),調(diào)用用戶
%A 應(yīng)用程序。
%A 驅(qū)動程序的開發(fā) 與BSP開發(fā)工具包一起發(fā)
%A 布的軟件中包含了各種類型驅(qū)動程序的模板,這些
%A 模板提供了所有驅(qū)動程序共用的邏輯結(jié)構(gòu),設(shè)計驅(qū)
%A 動程序時一般應(yīng)該按照從上到下的順序。在完成對
%A 驅(qū)動程序的計劃,以及初步形成了由函數(shù)和數(shù)據(jù)結(jié)
%A 構(gòu)構(gòu)成的骨架之后, 就可以開始準(zhǔn)備執(zhí)行和測試
%A 了。這部分工作比較復(fù)雜,主要包括編寫代碼,測
%A 試、調(diào)試、重新編譯和性能測試等幾個步驟,請讀
%A 者參見參考資料l_1]。
%A 參考資料
%A 1 W ind River Systems, Inc. VxWorks BSP Developer s
%A Guide,5.5,Edition 1,DOC-14695一ND-00,U & A
%A 2002.
%A 2 Wind River Systems, Inc. VxWorks Programmer’s
%A Guide,5.5,Ed ition 1,1:)O(2-14617一ZD00,U. & A
%A 2002.
%A 3 陳翌,田 捷,王金剛.嵌入式軟件開發(fā)技術(shù).北
%A 京:國防工業(yè)出版社,2003
%A 。爭‘奪 爭 奪 奪 奪‘奪 奪 奪‘奪 奪‘奪’奪 奪 奪 奪 奪 奪’奪 奪
%A .
%A 矗 侖
%A 妾 降低數(shù)據(jù)采集的成本 蕁
%A 立 毒
%A 羔 通過推出M系列DAQ產(chǎn)品,NI公司不每
%A 寸斷在擴(kuò)展數(shù)據(jù)采集功能的同時降低設(shè)備的成jc
%A 乏本。實際上,盡管M系列產(chǎn)品增強(qiáng)了I/O的奪
%A 功能,不過同時每個I/0通道的成本也降低jc
%A 喜了30 9/6。M系列產(chǎn)品采用了以前DAQ產(chǎn)品÷
%A 寧所不具備的NI-STC 2,NI―MCal和NI―PGIA X
%A 毒技術(shù),它還能和NI LabVIEW 和NI―DAQmx々
%A 寧測量服務(wù)軟件無縫地集成,從而具有更好的性
%A 毒能、更高的價值并提供更多的I/0。
%A . 奪.奪.奪.奪.奪.奪.奪.奪.奪.奪.奪.奪.爭.爭.奪.奪.奪.奪.爭.{-.{-.???啼一.奪t}
%A 維普資訊圖片點擊可在新窗口打開查看http://www.cqvip.com
]]>
基于PC104總線的VxWorksBSP設(shè)計http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1930&Page=1wangxinxin2010-12-1 9:24:40VxWorks的一種基于PC104總線的板載支持包,完成了相關(guān)的外圍驅(qū)動程序設(shè)計和調(diào)試工作。

[關(guān)鍵詞] PC104總線;VxWorks;集成開發(fā)環(huán)境Tornado;板載支持包BSP

1 引言

VxWorks是由美國的WindRiver推出的一種嵌入式強(qiáng)實時操作系統(tǒng),它存在多任務(wù)調(diào)度的方式,可以管理多個外設(shè),而且它可根據(jù)應(yīng)用程序的需求對操作系統(tǒng)進(jìn)行裁剪,最大程度的壓縮代碼,實現(xiàn)程序的優(yōu)化。

Intelx86系列處理器的嵌入式應(yīng)用一般是以PC104的形式出現(xiàn)的,PC104除包括PC/AT的所有標(biāo)準(zhǔn)功能外,它的CPU模塊還有一些獨特的優(yōu)點:開發(fā)周期短、費用低、體積小、層疊連接、功耗小、模塊化、抗沖擊及震動能力強(qiáng),工作及存儲溫度范圍寬、集成度高,可靠性高。

在PC/104總線設(shè)備上使用的數(shù)據(jù)存儲設(shè)備通常有硬盤和基于閃存技術(shù)的固態(tài)電子盤。由于嵌入式系統(tǒng)工作環(huán)境一般比較惡劣,硬盤在惡劣的震動條件下無法正常工作,而固態(tài)電子盤的工作范圍很寬,可以選擇相應(yīng)環(huán)境下的器件(零下40℃到零上85℃),并且體積很小,適合嵌入式應(yīng)用。本嵌入式系統(tǒng)中數(shù)據(jù)存儲設(shè)備采用了CE公司的CF(CompactFlash)卡,而在此軟硬件平臺上設(shè)計開發(fā)了嵌入式實時操作系統(tǒng)VxWorks的并基于PC104總線的板載支持包。

2 VxWorks板載支持包BSP設(shè)計

2.1 基于PC104總線設(shè)備的VxWorks操作系統(tǒng)映像開發(fā)

在實時操作系統(tǒng)VxWorks中,硬件抽象層是以板載支持包BSP的形式出現(xiàn)的。針對不同的處理器體系結(jié)構(gòu)以及硬件環(huán)境設(shè)計不同的板載支持包,實時操作系統(tǒng)VxWorks就可以用于不同的硬件環(huán)境,大大減少了資源浪費。因為板載支持包同時具有硬件相關(guān)性和操作系統(tǒng)相關(guān)性,是一個介于硬件與軟件之間的軟件層次,包括了系統(tǒng)中的大部分與硬件相關(guān)的軟件模塊。VxWorks板載支持包BSP的設(shè)計概念使嵌入式實時操作系統(tǒng)VxWorks成為一個通用的嵌入式軟件開發(fā)包,使得相關(guān)的高層的嵌入式應(yīng)用能夠有效地運行于特定的、應(yīng)用相關(guān)的硬件設(shè)備之上,使嵌入式實時操作系統(tǒng)VxWorks的可移植性大大加強(qiáng)。

BSP與VxWorks操作系統(tǒng)的層次結(jié)構(gòu)如下圖1所示:

圖1BSP與VxWorks操作系統(tǒng)的層次結(jié)構(gòu)圖

基于PC104總線設(shè)備的VxWorks操作系統(tǒng)映像開發(fā)主要工作有3個方面:

①板載支持包設(shè)計與開發(fā)

VxWorks實時操作系統(tǒng)的板載支持包的開發(fā)通常提供一般模板程序,選擇一個相同處理器結(jié)構(gòu)板載支持包進(jìn)行設(shè)計。

②相關(guān)外圍硬件設(shè)備驅(qū)動程序

嵌入式系統(tǒng)是針對某一具體應(yīng)用場合開發(fā)的專用系統(tǒng),因此常常會使用到一些非標(biāo)準(zhǔn)的硬件設(shè)備,而VxWorks操作系統(tǒng)并不提供相關(guān)的外設(shè)驅(qū)動程序,使用時需自行開發(fā)相應(yīng)的外設(shè)驅(qū)動程序。

③操作系統(tǒng)映像配置與生成

對VxWorks操作系統(tǒng)各個功能模塊進(jìn)行配置,使其在滿足功能需求的條件下達(dá)到代碼量最小,同時也減少出錯的可能性。

2.2 BSP的基本功能及其啟動過程分析

VxWorks板級支持包BSP在功能上包含兩個部分:初始化和驅(qū)動程序支持。BSP提供了VxWorks同硬件環(huán)境的基本接口界面,并在上電時進(jìn)行硬件初始化(包括中斷向量的初始化、定時器初始化、核心內(nèi)存映象的加載等),支持VxWorks對硬件驅(qū)動的訪問,將VxWorks中軟件集成到一體,其功能相當(dāng)于PC機(jī)的BIOS。

VxWorks內(nèi)核的加載分為兩個步驟,第一個步驟是PCBIOS對bootrom的加載,第二個步驟是BSP引導(dǎo)映像bootrom對VxWorks操作系統(tǒng)映像加載;玖鞒倘缦滤荆

2.3 BSP中函數(shù)調(diào)用過程分析

BSP啟動操作系統(tǒng)的過程中,需要調(diào)用一列函數(shù)以完成對系統(tǒng)內(nèi)存映像的加載,整個過程分析如下,RomInit函數(shù)初始化處理器,關(guān)閉高速緩存,關(guān)中斷,初始化內(nèi)存。接著調(diào)用RomStart,把映像的數(shù)據(jù)段拷貝到RAM中去,然后調(diào)用usrInit()對Bss段清零,調(diào)用intVecBaseSet()設(shè)置矢量基地址表,調(diào)用excVecInt()初始化中斷以及異常的向量表,初始化系統(tǒng)硬件,調(diào)用usrKernelInit()初始化wind內(nèi)核,最后執(zhí)行流程執(zhí)行到kernelInit(),kernelInit啟動wind內(nèi)核。Wind內(nèi)核的第一個任務(wù)是usrRoot它通過調(diào)用usrAppInit啟動用戶的任務(wù),系統(tǒng)可真正啟動。

2.4 修改BSP設(shè)計概要

一般情況下,Tornado提供一些評估板的板載支持包,而PC104主機(jī)板是根據(jù)工作實際需要購買的,評估板的板載支持包不能夠直接使用,需要進(jìn)行修改完善。可行的方法是:基于pc586的BSP作為模板進(jìn)行適當(dāng)修改,以滿足這款PC104主機(jī)板的特定硬件環(huán)境。

板載支持包通常存放在Tornado的安裝目錄下面,其路徑是Root/target/config/bspname,root代表tornado的安裝目錄。設(shè)計一個可用的新的板載支持包,必須對Tornado本身自帶板載支持包作一定的分析。pc586板載支持包主要包括一些C文件和一些匯編文件,它們是:config.h,configAll.h,Pc.h,sysLib.c,ctdt.c,sysNetif.c,mkboot.c。板載支持包的缺省配置是由configALL.h來確定的,用戶可通過config.h來改變?nèi)笔∨渲谩H笔∨渲檬前凑仗幚砥鲝S商的評估板外圍硬件進(jìn)行系統(tǒng)配置,根據(jù)實際硬件環(huán)境,一般需要做一定的改動,通常會在config.h中進(jìn)行,通過一系列的定義宏,完成系統(tǒng)配制工作。

要設(shè)計針對這個半物理仿真試驗的所選用的PC104主機(jī)板板載支持包,增加VxWorks對CF卡支持,需要做出較大改動的文件是config.h和configAll.h以及sysLib.c這3個文件,具體如下:

①在config/bspname/bspname.h中找到修改其CF卡的中斷號,因為一般中斷號0x9是預(yù)留給硬盤接口,為了避免產(chǎn)生中斷沖突,將#define ATA1_INT_LVL0x9,改為#define ATA1_INT_LVL0xf

②在config/bspname/sysLib.c中找到ATA_RESOURCEataResource[]={................PCMCIA................ }

修改為ATA_RESOURCEataResource[]={................IDE_LOCAL................. }

另外還需要改寫其他的參數(shù),例如ATA1_CONFIG等。

③在config.h中,把#define SYS_WARM_ATA_CTRL 0改為#define SYS_WARM_ATA_CTRL 1這樣系統(tǒng)熱啟動后,就會從CF卡上的引導(dǎo)區(qū)上引導(dǎo)。

④在config.h中將#define SYS_WARM_TYPE SYS_WARM_FD/*warmstartdevice*/改為#define SYS_WARM_TYPESYS_WARM_ATA

⑤修改ataType數(shù)組使它和所選的CF卡的幾何參數(shù)(磁道,扇區(qū),柱面等)相等。

將原來的ataTypes數(shù)組ATA_TYPEataTypes[ATA_MAX_CTRLS] [ATA_MAX_DRIVES]= {................{{761,8,39,512,0xff},/*ctrl1drive0*/...............};

改為ATA_TYPE ataTypes [ATA_MAX_CTRLS] [ATA_MAX_DRIVES]= {................{{984,16,4,512,0xff},/*ctrl1drive0*/...............};

這個參數(shù)可以在主機(jī)板的BIOS中查找到,進(jìn)入BIOS后使用idedetection就可以查看到CF卡幾何參數(shù),根據(jù)查到CF卡的幾何參數(shù),就可以在sysLib.c中做出相應(yīng)的修改。

2.5 BSP的調(diào)試

針對板載支持包的設(shè)計開發(fā),VxWorks并沒有提供了非常好的調(diào)試手段,這樣就給調(diào)試BSP帶來的很大困難。所以在對BSP進(jìn)行調(diào)試之前,盡量減少代碼量,通過改寫B(tài)SP目錄下Makefile來去除不需要的代碼編譯,然后再對BSP調(diào)試。調(diào)試的方式一般采用閃燈的方式,通過在有疑問的代碼之間插入閃燈的代碼,通過對I/O端口的可視LED訪問,觀察燈是否閃亮來判斷BSP的執(zhí)行流程。

3 結(jié)束語

通過多次試驗的調(diào)試,最終設(shè)計出了基于PC104總線的VxWorks板載支持包。并應(yīng)用于某型飛機(jī)燃油系統(tǒng)的智能化管理,實踐結(jié)果表明,這種方法是一種切實可行的方案。

]]>
Vxworks bsp的制作http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1929&Page=1wangxinxin2010-12-1 9:23:21用開始寫的驅(qū)動程序的文檔替代此文檔.

從該設(shè)備的概要開始.指出該驅(qū)動實現(xiàn)整個設(shè)備的部分還是全部細(xì)節(jié).

描述所有該設(shè)備的操作模式,指出該驅(qū)動所實現(xiàn)的是哪種.

寫出該設(shè)備在BSP中創(chuàng)建和初始化的步驟.寫出可把該驅(qū)動定制為特殊硬件環(huán)境的所有宏(macros).

寫出所有可幫助用戶理解該設(shè)備如何工作和設(shè)備的接口.

模板概要:

這是一個串口驅(qū)動模板.可用來作為寫Vxworks5.3或更新版本的新驅(qū)動的起點.

這些驅(qū)動支持舊串口驅(qū)動沒有的新功能,首先,它們提供一個設(shè)置硬件選項的接口;

例如,停止位數(shù),數(shù)據(jù)位,奇偶,等等.

其次,它們提供可用來提供串口線上的外部模式調(diào)試(如,ROM監(jiān)視器調(diào)試)的輪巡通訊(polled communication)接口.通常只支持異步模式驅(qū)動. 貫穿整個文件,單詞"template"用來替換一個真實的設(shè)備名,按慣例采用廠商名的第一個字母加產(chǎn)品編號.例如,Zilog 8530 串口設(shè)備應(yīng)一個名為Z8530——DUSAART

數(shù)據(jù)結(jié)構(gòu),好過TEMPLATE_DUSART.

數(shù)據(jù)結(jié)構(gòu)

設(shè)備數(shù)據(jù)結(jié)構(gòu)在文件 h/drv/sio/templateSio.h里定義。一個數(shù)據(jù)結(jié)構(gòu)——TEMPLATE_CHAN被定義,為每個通道。具有多串口通道的設(shè)備也為整個芯片定義了一個數(shù)據(jù)結(jié)構(gòu).例如,此驅(qū)動有一個芯片級的,有兩個通道結(jié)構(gòu)作為成員數(shù)據(jù)結(jié)構(gòu)叫TEMPLATE_DUSART。

回調(diào)

傳輸準(zhǔn)備就緒(transmitter ready)中斷調(diào)用服務(wù)采用回調(diào)至高層庫以獲得一個字符來傳送。 默認(rèn)地,此驅(qū)動安裝不做任何事情的傀儡回調(diào)程序。使用此驅(qū)動的高層庫(例如,ttyDrv)將用SIO_INSTALL_CALLBACK控制命令(ioctl command)安裝自己的回調(diào)程序. 同樣,一個接受中斷處理采用回調(diào)來將字符傳給高層庫。

模式

理想模式下該驅(qū)動應(yīng)支持輪巡和中斷模式,并可動態(tài)切換模式。但這并非必須。Vxworks可支持此設(shè)備上的tty設(shè)備,即使該驅(qū)動只支持

中斷模式.

增加動態(tài)模式切換允許當(dāng)信息送至?xí)r將外部代理激活(例如,在第一楨時中斷). 對允許動態(tài)模式切換的驅(qū)動,注意驅(qū)動將在其輸入ISR中間被要求切換模式.一個驅(qū)動的輸入ISR看起來應(yīng)如此: inChar = *pDev->dr;/@ 從數(shù)據(jù)寄存器里讀一個字符 @/ *pDev->cr = GOT_IT;/@ 承認(rèn)中斷@/ pDev->putRcvChar (...);/@ 發(fā)送字符到高層 @/ /@ give the character to the higher layer @/ 如果該通道用作外部模式調(diào)試的通訊路徑,且接收的該字符是"幀結(jié)束"字符,則代理的回調(diào)會鎖定中斷,切換設(shè)備到輪巡模式,并使用輪巡模式下的設(shè)備片刻.此后代理會解鎖中斷,切換模式到中斷模式,并返回ISR. 特別地,回調(diào)能使兩模式切換,首先到輪巡模式然后到中斷模式,后返回. 這要求小心處理中斷處理內(nèi)的回調(diào)。例如,在調(diào)用回調(diào)前你必須先承認(rèn)中斷。

用法:

該驅(qū)動通常為BSP調(diào)用.該模塊里直接調(diào)用程序是 templateDevInit(), templateDevInit2(),templateIntRcv(), templateIntTx(), and templateIntErr(). BSP調(diào)用templateDevInit()來初始化或重啟芯片.它用intConnect()連接中斷處理(templateIntRcv, templateIntTx,和 templateIntErr). 連接中斷處理后,BSP調(diào)用templateDevInit2()來告訴驅(qū)動中斷模式操作已可行.

BSP: 按常規(guī)所有BSP特定的串口初始化在sysSerial.c(被sysLib.c包含)里進(jìn)行, sysSerial.c實現(xiàn)至少4個函數(shù):sysSerialHwInit(),sysSerialHwInit2(), sysSerialChanGet(),和sysSerialReset(),如下工作: sysSerialHwInit被sysHwInit調(diào)用來初始化串口設(shè)備.此程序?qū)⒃谡{(diào)用能復(fù)位設(shè)備及安裝驅(qū)動函數(shù)指針的templateDevinit前初始化TEMPLATE_DUSART結(jié)構(gòu)的所有板特定的區(qū)域(如,寄存器的I/O地址,等等).sysSerialHwInit還將執(zhí)其他所有串口驅(qū)動所需要的過程,比如適當(dāng)配置板上的中斷控制器. sysSerialHwInit2被sysHwInit2調(diào)用來用intConnect連接驅(qū)動的中斷處理.連接好中斷處理后,templateDevInit2的調(diào)用允許中斷模式操作開始. sysSerialChanGet被usrRoot調(diào)用來取得與串口通道號相關(guān)的串口通描述.該程序使用一個0-NUM_TTY之間的一個數(shù)為單一的參數(shù).它返回一個指向相應(yīng)通道描述——SIO_CHAN * 的指針,它正好是TEMPLATE_CHAN結(jié)構(gòu)的地址. sysSerialReset被sysToMonitor()調(diào)用且會復(fù)位串口設(shè)備到一個不活動的狀態(tài). 該驅(qū)動可通過重定義TEMPLATE_REG_READ和TEMPLATE_REG_WRITE宏來定制.這兩個宏用來訪問實際的芯片.如不定義,源代碼會假定用對所有寄存的read/write訪問來對設(shè)備進(jìn)行簡單內(nèi)存映射.

測試:

中斷驅(qū)動接口可用通常方法來測試.當(dāng)它(測試信息,譯者如是猜測)來到時Vxworks打印到串口控制臺,于是看到加電后VxWorks輸出表示該驅(qū)動基本開始工作. VxWorks的Portkit測試也可用來進(jìn)行更嚴(yán)格的測試. 輪巡接口容易被檢驗——你可調(diào)用通道的SIO_MODE_SET ioctllai使它進(jìn)入輪巡模式.注意通常的打印工具不能在輪巡模式下與串口通道一起工作.一些代理必須執(zhí)行輪巡循環(huán)來處理基于字符的字符輸入/輸出.這不是自動進(jìn)行.當(dāng)切換WDB串口線到輪巡模式時,WDB代理執(zhí)行它自己的輪巡循環(huán). 動態(tài)模式切換可用tornado工具來檢查.重新配置代理使用WDB_COMM_UDLP_SLIP通訊路徑(詳見VxWorks run_time Guide的配置章節(jié)). 如下開始wtxtcl %wtxtcl 從tcl提示符,連接到target server: wtxtcl.ex> wtxToolAttach 通知代理來轉(zhuǎn)換外部模式檢查回應(yīng)是OK(0). wtxtcl.ex>wtxAgentModeSet 2 0 要求代理掛起系統(tǒng)(請求會以中斷模式傳到,但回應(yīng)會以輪巡模式被傳送): wtxtcl.ex>wtxContextSuspend 0 0 0 在此時目標(biāo)將被掛起.控制臺將顯示凍結(jié)(果板卡有一個控制臺設(shè)備),你不能"ping"目標(biāo)的網(wǎng)絡(luò)接口.

恢復(fù)目標(biāo):

wtxtcl.ex>wtxContextResume 0 0 0 現(xiàn)在目標(biāo)將重新運行,于是你能敲信息到控制臺(如果板卡有一個控制臺設(shè)備)并可從主機(jī)"ping"目標(biāo)的網(wǎng)絡(luò)接口.

vxworks下bsp制作教程

1 vxworks概述

vxworks是WIND RIVER公司的產(chǎn)品。作為一種商用的嵌入式操作系統(tǒng)?vxworks擁有強(qiáng)大的功能和友好的用戶界面。與免費的嵌入式操作系統(tǒng)相比?商用操作系統(tǒng)經(jīng)過嚴(yán)格的測試?具有良好的實時性?易用性和大量的文檔支持?但是它的源碼是不公開的并且價格昂貴;免費的嵌入式操作系統(tǒng)有很多?大都是linux的移植?公開源代碼?但缺乏文檔?要對照源碼進(jìn)行開發(fā)。

2 BSP的流程

BSP流程分成兩部分。首先是位于BootRom中的Boot代碼?它的作用是實現(xiàn)配置硬件和啟動vxworks下載程序。接下來是下載后跳轉(zhuǎn)到vxworks的入口地址運行操作系統(tǒng)和應(yīng)用程序。

流程入圖:

ROM中的啟動代碼部分:RomInit在文件在文件romInit.s中。它是運行的開始?實現(xiàn)這一部分是首先的。它實現(xiàn)判斷啟動類型?配置內(nèi)核和非內(nèi)核寄存器以及內(nèi)存和外圍設(shè)備的讀寫時序?因此可以在此處加入內(nèi)存檢測功能。在BSP中無法進(jìn)行調(diào)試?只能通過閃燈實現(xiàn)云信正確與否的判斷。閃燈功能函數(shù)也要在此加入。判斷啟動類型和配置寄存器?這一部分不需要改動。配置內(nèi)存和外圍設(shè)備讀寫時序?要進(jìn)行改動。這一部分的SDRAM?ROM?FLASH?FPGA有相應(yīng)的模板可以參考。它的實現(xiàn)是通過使用宏定義來實現(xiàn)的。但是要改動的話也不難?一般是改動空間大小的屏蔽位?讀寫位數(shù)?以及片選寄存器OR和BR。至于特殊外設(shè)的讀寫有待討論。內(nèi)存檢測在這里實現(xiàn)較復(fù)雜?它根據(jù)相應(yīng)的內(nèi)存檢測算法實現(xiàn)。主要是對地址線和數(shù)據(jù)線的檢測。通過寫入數(shù)據(jù)再會讀出數(shù)據(jù)來判斷。使用"走步1"和"走步0"
算法。這一部分較多的依賴硬件?可移植性較差?根據(jù)自己的單板改動。閃燈在這一部分是強(qiáng)烈推薦的。因為閃燈才能定位程序的運行位置。閃燈函數(shù)可移植?一般要改動?因為燈可能接在不同的I/O口上。另外注意860SAR的PORT B是32位的。具體的端口見相應(yīng)的CPU的I/O口的參數(shù)?配置相應(yīng)的寄存器。

RomInit在函數(shù)結(jié)尾跳入RomStart。

RomStart在BootInt.c文件中。它是系統(tǒng)運行的第一個C函數(shù)。這一部分是Wind River公司提供的標(biāo)準(zhǔn)程序?一般不需改動。該函數(shù)是C的入口函數(shù),由匯編程序調(diào)用,主要完成清內(nèi)存,將ROM中的程序拷貝到RAM,解壓并跳至解壓后的程序處運行。UsrInit在BootConfig.c文件中。它主要是實現(xiàn)硬件的初始化。其中涉及到串口?網(wǎng)口的初始化?CONSOLE的配置等。其中串口和網(wǎng)口的配置BSP的重要部分?但860CPU對串口和王口有很好的支持?只要做很小的改動即可?串口很簡單?網(wǎng)口較復(fù)雜一些。UsrRoot在BootConfig.c文件中。它主要是實現(xiàn)vxworks文件的下載?并且跳轉(zhuǎn)到vxworks的入口地址。從而進(jìn)入到操作系統(tǒng)中去。

VXWORKS文件中的代碼部分:

SysInit在sysAlib.s中。它是vxworks的啟動代碼。它與RomInit的作用相同?對于這個文件?我們一般不需要去改動它。UsrInit在Usrconfig.c中。它的作用與Boot中的UsrInit的作用相同?他們都調(diào)用SysLib.c中的子函數(shù)。實現(xiàn)相同的硬件初始化功能。UsrRoot在UsrConfig.c中。它的作用與Boot中的UsrRoot的作用類似。但是這里的UsrRoot是最終進(jìn)入到應(yīng)用程序中去。

]]>
嵌入式語音通信系統(tǒng)中VxWorks BSP的設(shè)計實現(xiàn)http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1928&Page=1wangxinxin2010-12-1 9:22:150 引 言
    當(dāng)前普遍使用的DSP語音處理技術(shù)只能對語音進(jìn)行簡單處理,不能適應(yīng)語音業(yè)務(wù)的多樣化趨勢。本文介紹利用MPC860和VxWorks實現(xiàn)綜合語音通信平臺,支持多板卡、多路語音實時傳輸,可擴(kuò)展多路語音共聽功能。利用MPC860的通信和信號處理功能,且Vx-Works具有占用空間小、執(zhí)行效率高、方便進(jìn)行個性化定制和較好的兼容性等特點,所以該綜合語音通信平臺在功能、硬件結(jié)構(gòu)、體積、功耗以及靈活性上具有較大優(yōu)勢。
    在設(shè)計中盡量采用嵌入式開發(fā)中的常用器件,以便稍加改動即可應(yīng)用于其他設(shè)計?梢愿鶕(jù)實際需要更改系統(tǒng)中語音通道的數(shù)目和擴(kuò)展多路語音共聽功能等。

1 系統(tǒng)結(jié)構(gòu)及工作原理
1.1 系統(tǒng)組成及特點

    整個通信平臺由語音通信處理主板和語音采集回放子板組成。語音通信處理主板包括CPU MPC860、FLASH存儲器、SDRAM存儲器、10/100Mb/s網(wǎng)絡(luò)接口、RS 232串口、BDM調(diào)試接口、Console接口、供電和復(fù)位電路及120pin連接器。通信處理主板的核心MPC860是Motorola公司的一款由MC68360演變而來的通用單片集成嵌入式微處理器,適用于通信和網(wǎng)絡(luò)系統(tǒng)。該微處理器內(nèi)部有兩個處理器:PowerPC和32位RISC處理器。PowerPC核同內(nèi)存管理單元(MMU)、指令和數(shù)據(jù)Cache一同處理高層次應(yīng)用,CPM則負(fù)責(zé)完成低層數(shù)據(jù)通信。兩個處理器主要通過共享內(nèi)存交互。通信處理模塊利用SCC,SMC,SPI和I2C串行通道與外部設(shè)備通信,其中SCC和SMC支持時分復(fù)用。設(shè)計中,SCC工作在QMC協(xié)議Trans-parent Mode。通信處理模塊(CPM)新增了數(shù)字信號處理(DSP)功能。語音采集回放子板由語音采集電路、語音回放電路、基于FPGA實現(xiàn)的通信控制器和與語音通信處理主板連接的120pin連接器組成。
    由于MPC860的數(shù)據(jù)傳輸速度相比ADC和DAC要快很多,設(shè)計相應(yīng)的邏輯電路控制語音的采集和回放、協(xié)調(diào)MPC860和數(shù)據(jù)采集、回放電路之間的通信是保證系統(tǒng)正常工作的關(guān)鍵。文中設(shè)計了基于Altera公司的CycloneⅡEP2C8芯片實現(xiàn)的通信控制器來解決這一問題。
    將通信平臺分為語音通信處理主板和語音采集回放子板分別設(shè)計實現(xiàn),是為了降低系統(tǒng)開發(fā)難度和便于系統(tǒng)維護(hù)、升級和擴(kuò)展。例如語音通信處理主板無需改動即可利用已有的連接器、FEC網(wǎng)絡(luò)接口和SDRAM存儲器等資源與視頻編解碼芯片、視頻壓縮/解壓縮芯片組成網(wǎng)絡(luò)視頻服務(wù)器。
1.2 功能結(jié)構(gòu)和工作原理
   
語音通信處理主板的功能結(jié)構(gòu)如圖1所示。

圖片點擊可在新窗口打開查看

    系統(tǒng)上電后,語音通信處理主板復(fù)位電路產(chǎn)生復(fù)位信號,MPC860接收到復(fù)位信號后,跳轉(zhuǎn)到0X100處開始執(zhí)行啟動代碼。按照BSP配置逐步執(zhí)行CPU初始化、板上其他硬件電路的初始化、操作系統(tǒng)運行所需數(shù)據(jù)結(jié)構(gòu)的初始化、啟動VxWorks WIND內(nèi)核、創(chuàng)建UserRoot任務(wù)、初始化系統(tǒng)中用到的可選擴(kuò)展模塊(如I/O系統(tǒng)、文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議等)、創(chuàng)建任務(wù)usrAppInit(),此時語音通信平臺準(zhǔn)備就緒,可以執(zhí)行語音通信任務(wù)。采集板的功能結(jié)構(gòu)如圖2所示,語音通信處理主板啟動完畢后,語音采集回放子板可在通信控制器控制下采集和回放語音,并對語音數(shù)據(jù)進(jìn)行壓縮編解碼和IP封裝、解封裝處理。

圖片點擊可在新窗口打開查看

1.3 數(shù)據(jù)處理流程
   
MPC860T和ADC AD7825,DAC AD7305之間的通信由通信控制器控制。通信控制器由數(shù)據(jù)緩沖區(qū)(Rx FIFO,Tx FIFO),基于FSM(有限狀態(tài)機(jī))實現(xiàn)的控制邏輯(Rx control,Tx control)和8位串并、并串轉(zhuǎn)換器,時鐘電路組成。其數(shù)據(jù)接收過程為:接收控制邏輯(Rx control)控制ADC AD7825將各個通道的語音數(shù)字化,并把轉(zhuǎn)換結(jié)果存入接收緩沖區(qū)(Rx FIFO),直至Rx FIFO滿時Rx control開始向MPC860T提供周期性幀同步信號,頻率為32 kHz。MPC860在幀同步信號和時鐘信號的驅(qū)動下讀取Rx FIFO中的數(shù)據(jù)到SCC數(shù)據(jù)接收緩沖區(qū)。Rx FIFO讀空(即讀指針追上了寫指針)后,Rx control停止向MPC860發(fā)送幀同步信號終止數(shù)據(jù)傳輸,同時向MPC860發(fā)送中斷信號IRQ3,MPC860響應(yīng)中斷把數(shù)據(jù)從接收緩沖區(qū)讀到接收ring buffer中等待應(yīng)用程序處理。其數(shù)據(jù)發(fā)送過程為:MPC860完成IP解封裝、解壓縮后的語音數(shù)據(jù)將會在檢測到發(fā)送緩沖區(qū)可用時,輸出到SCC發(fā)送緩沖區(qū),通信控制器提供發(fā)送幀同步信號驅(qū)動數(shù)據(jù)傳輸?shù)絋x FIFO(發(fā)送緩沖區(qū)),待到Tx FIFO滿時停止發(fā)送幀同步信號。數(shù)據(jù)發(fā)送完后,CPM會清零,TxBD)中的R位表示MPC860可向SCC發(fā)送緩沖區(qū)中裝入新的數(shù)據(jù),為下次傳輸做準(zhǔn)備。
1.4 QMC通信協(xié)議
    多通道控制器(QUICC Multichannel Controler,QMC)是為了實現(xiàn)時分復(fù)用數(shù)據(jù)傳輸而設(shè)計的,它可以把時分復(fù)用幀的數(shù)據(jù)分發(fā)到多達(dá)64個邏輯通道。該模式下把每一幀的數(shù)據(jù)劃分成若干個時隙(Timeslots),每時隙8 b。在時隙分配表中規(guī)定每時隙數(shù)據(jù)從屬于某個通道,每個通道都有一組特定的緩沖區(qū)描述符和相應(yīng)的緩沖區(qū)。一個時隙的數(shù)據(jù)在收發(fā)時被放置在特定的緩沖區(qū)里,MPC860T就可把分散的數(shù)據(jù)聚集在一起發(fā)送,或把聚集在一起的數(shù)據(jù)分發(fā)到各自專用的緩沖區(qū),而不需要額外的處理來區(qū)分各種各樣的數(shù)據(jù)流。

2 BSP 設(shè)計實現(xiàn)
    設(shè)計中軟件開發(fā)主要包括啟動代碼的編寫、操作系統(tǒng)的移植、硬件驅(qū)動程序和語音編、解碼和IP封裝、解封裝應(yīng)用程序。篇幅有限,本文僅介紹BSP移植。BSP即板級支持包,其功能為硬件、軟件初始化、工程影像的下載和設(shè)備驅(qū)動等。
2.1 BSP的定制
    無論是BootRom還是VxWorks都要使用BSP代碼,BSP定制需要根據(jù)硬板配置、系統(tǒng)設(shè)計需求、軟件功能等實際情況。實際開發(fā)過程中,為了縮短產(chǎn)品開發(fā)周期,通常以WINDRIVER公司的BSP模板或者第三方公司提供的可供參考的BSP為基礎(chǔ),根據(jù)軟硬件具體配置進(jìn)行修改,添加新的程序驅(qū)動新增硬件和功能。本課題中先把APC860開發(fā)板的BSPMPC860TEVB拷貝到installdir:\Tornado\target\collfig\ppcs860目錄下,主要做下列修改。
2.1.1 config.h文件
    根據(jù)實際情況,需要修改啟動行,內(nèi)存地址、容量等配置,修改部分代碼如下:

    圖片點擊可在新窗口打開查看
2.1.2 makefile文件的修改
    makefile文件的修改,部分程序如下:

    圖片點擊可在新窗口打開查看

]]>
PowerPC VxWorks BSP分析6——image加載http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1927&Page=1wangxinxin2010-12-1 9:20:301 VxWorks加載
1.1 從TFFS文件系統(tǒng)加載
Tornado的TrueFFS是和VxWorks兼容的一種M-Systems Flite實現(xiàn)方式,它為種類繁多的flash存儲設(shè)備提供了統(tǒng)一的塊設(shè)備接口,并且具有可重入、線程安全的特點,支持大多數(shù)流行的CPU構(gòu)架。有了Tornado的TrueFFS,應(yīng)用程序?qū)?flash存儲設(shè)備的讀寫就好象它們對擁有MS-DOS文件系統(tǒng)的磁盤設(shè)備的操作一樣。
如圖18所示,TrueFFS由核心層(core layer)和三個功能層,翻譯層(translation layer)、MTD層(MTD layer)、socket層(socket layer)組成。
clip_image002
圖18 TrueFFS層結(jié)構(gòu)布局
核心層(Core layer):核心層主要起相互連接其他幾層的功能。同時它也可以進(jìn)行碎片回收、定時器和其他系統(tǒng)資源的維護(hù)。通常WindRiver公司將這部分內(nèi)容以二進(jìn)制文件提供。
翻譯層主要實現(xiàn)TrueFFS和dosFs之間的高級交互功能。它也包含了控制flash映射到塊、wear-leveling、碎片回收和數(shù)據(jù)完整性所需的智能化處理功能。目前有三種不同的翻譯層模塊可供選擇。選擇哪一種層要看你所用的flash介質(zhì)是采用NOR-based,還是NAND-based,或者SSFDC-based技術(shù)而定。
Socket層則是提供TrueFFS和板卡硬件(如flash卡)的接口服務(wù)。其名字來源于用戶可以插入flash卡的物理插槽。用來向系統(tǒng)注冊socket設(shè)備,檢測設(shè)備拔插,硬件寫保護(hù)等。后面將詳細(xì)講解它的功能。
MTD層(Memory Technology Drivers)功能主要是實現(xiàn)對具體的flash進(jìn)行讀、寫、擦、ID識別等驅(qū)動,并設(shè)置與 flash密切相關(guān)的一些參數(shù)。TrueFFS已經(jīng)包含了支持Intel、AMD以及samsung部分flash芯片的MTD層驅(qū)動。新的芯片需要新的 MTD支持,你可以使用一個標(biāo)準(zhǔn)的接口來加入這些驅(qū)動。
以上四部分,我們通常要的工作就是后兩層。
MX29LV160BT芯片上建立TrueFFS文件系統(tǒng)
1.配置相關(guān)文件
在此,以Nor Flash MX29LV160BT為例,開發(fā)工具為Tornado2.2 for PPC。要在VxWorks映像中包含 TrueFFS文件系統(tǒng),首先必須在config.h文件中定義INCLUDE_TFFS。這使得VxWorks的初始化代碼調(diào)用tffsDrv()來創(chuàng)建管理TrueFFS所需的結(jié)構(gòu)和全局變量,并為所有掛接了的flash設(shè)備注冊socket組件驅(qū)動。在鏈接的時候,通過解析與tffsDrv()相關(guān)聯(lián)的符號(symbols)可以將TrueFFS所必需的軟件模塊鏈接到VxWorks映象中。
為了支持TrueFFS,每一個BSP目錄下都必須包含一個sysTffs.c文件。它將TrueFFS所有的層(翻譯層,socket層和MTD 層)鏈接到一起并和VxWorks綁定。因此,必須編輯這個文件并決定哪一種MTD和翻譯層模塊應(yīng)該包含到TrueFFS中。即:
#define INCLUDE_MTD_MX29LV /* MX29LV160BT MTD driver */
#define INCLUDE_TL_FTL /* FTL translation layer */
#define FLASH_BASE_ADRS 0x2a10000 /* Flash memory base address */
#undef FLASH_SIZE
#define FLASH_SIZE 0x001f0000 /*Flash memory size, 2M (parameter block) */
其他無關(guān)的MTD driver包含頭都#undef掉,同時定義Flash在系統(tǒng)中的基地址和大小。另外,還必須編輯sysLib.c中的 sysPhysMemDesc[ ]數(shù)組,將Flash基地址和大小加入到MMU中,以供將來訪問Flash,否則訪問Flash會失敗。如果BSP目錄下沒有sysTffs.c文件,那么我們可以從其他BSP目錄下拷貝一個即可,然后做上述修改,其他的內(nèi)容基本可以不用修改。
接下來需要修改tffsConfig.c文件,為了方便管理,通常我們將src/drv/tffs/目錄下該文件拷貝到我們BSP目錄下,然后再做出修改。在MTDidentifyRoutine mtdTable[]表中加入如下語句:
#ifdef INCLUDE_MTD_MX29LV
mx29lvMTDIdentify,
#endif /* INCLUDE_MTD_MX29LV */
并在該文件開頭聲明。
#ifdef INCLUDE_MTD_MX29LV
FLStatus mx29lvMTDIdentify (FLFlash vol);
#endif /* INCLUDE_MTD_MX29LV */
最后就是將我們的flash相關(guān)MTD驅(qū)動加入到makefile中。即:
MACH_EXTRA = mx29lvMtd.o
為了方便我們調(diào)試MTD驅(qū)動,應(yīng)該在重新編譯VxWorks映象前將諸如格式化flash、創(chuàng)建TrueFFS塊設(shè)備、綁定此塊設(shè)備到dosFs所必要的功能包含到VxWorks映像中。比如如下定義:
#define INCLUDE_TFFS
#ifdef INCLUDE_TFFS
#define INCLUDE_TFFS_DOSFS
#define INCLUDE_TFFS_SHOW
#define INCLUDE_DOSFS /* dosFs file system */
#define INCLUDE_SHOW_ROUTINES /* show routines for system facilities*/
#define INCLUDE_TL_FTL
#define INCLUDE_IO_SYSTEM
#define INCLUDE_DISK_UTIL
#endif /* INCLUDE_DOSFS */
2.MTD驅(qū)動
做了上述配置后,進(jìn)入VxWorks操作系統(tǒng)后,我們在shell上利用tffsShow工具來顯示flash的信息。TffsShow函數(shù)最終會調(diào)用 MTD驅(qū)動中的mx29lvMtdIdentiy( )函數(shù),在mx29lvMtdIdentiy ( )函數(shù)主要是通過讀取MX29LV160BT芯片的設(shè)備和廠商ID來識別它,然后對FLFlash結(jié)構(gòu)成員進(jìn)行初始化,最主要的幾個參數(shù)是:
type:Flash內(nèi)存的JEDEC ID號;
erasableBlockSize:Flash內(nèi)存的擦除塊大。ㄗ止(jié))。設(shè)置這個值時應(yīng)考慮到interleaving。因此,通常通過如下方法來設(shè)置它的大小;
Vol.erasableBlockSize = MX29LV_MTD_SECTOR_SIZE * vol.interleaving;
對于MX29LV160BT,MX29LV_MTD_SECTOR_SIZE為64K字節(jié);
chipSize:使用來構(gòu)建TrueFFS文件系統(tǒng)的flash實際大。ㄗ止(jié));
noOfChips:使用來構(gòu)建TrueFFS文件系統(tǒng)的flash實際片數(shù);
interleaving:Flash內(nèi)存交叉因子(interleaving factor)。即擴(kuò)展數(shù)據(jù)總線的設(shè)備數(shù)。比如,一個32位數(shù)據(jù)總線上,我們可以使用4片8位或2片16位的設(shè)備;
map:指向flash內(nèi)存映射(map)函數(shù)。該函數(shù)將flash映射到內(nèi)存區(qū);
read:指向flash內(nèi)存的讀函數(shù)。在MTD驅(qū)動識別函數(shù)中,這個成員函數(shù)已經(jīng)被初始化為缺省的讀函數(shù)。通常情況下,我們不需要再初始化它,否則還需要修改很多相關(guān)的函數(shù);
write:指向flash內(nèi)存的寫函數(shù)。這個成員必須初始化,這是我們要做的一個重要工作;
erase:指向flash內(nèi)存的擦除函數(shù)。這個成員必須初始化,這也是我們要做的一個重要工作。
針對FLFlash結(jié)構(gòu)成員,我們所關(guān)心的兩個函數(shù)就是寫和擦除函數(shù)。在mx29lvMtdIdentiy()函數(shù)中必須有如下定義:
vol.write = mx29lvWrite;
vol.erase = mx29lvErase;
在mx29lvWrite()函數(shù)中主要是實現(xiàn)將數(shù)據(jù)寫到flash中。首先需要對扇區(qū)進(jìn)行解鎖,然后寫入寫命令,之后才能進(jìn)行數(shù)據(jù)的寫入。最后需要判斷數(shù)據(jù)是否寫完。為了確保操作成功,我們應(yīng)該在寫完每個數(shù)據(jù)后進(jìn)行數(shù)據(jù)的比較,比較正確后方能進(jìn)行下一個數(shù)據(jù)的操作。
在mx29lvErase()函數(shù)中主要是實現(xiàn)flash扇區(qū)的擦除。如今的flash一般都是按照扇區(qū)進(jìn)行擦除操作的。在擦除操作之前也應(yīng)該首先對扇區(qū)進(jìn)行解鎖,然后寫擦除建立和扇區(qū)擦除命令。擦除成功后,flash中的內(nèi)容應(yīng)該是0xffff。所以為了確保成功,我們還是應(yīng)該在擦除后進(jìn)行比較,比較正確后方能進(jìn)入下一個扇區(qū)的擦除操作,否則返回擦除錯誤標(biāo)志。
所以,對于MTD驅(qū)動的調(diào)試,基本上就是調(diào)試寫和擦除兩個函數(shù)。在調(diào)試過程中,我們可以在這兩個函數(shù)相應(yīng)位置加入打印語句來調(diào)試。為了能調(diào)試這兩個函數(shù),我們通過在shell上輸入命令tffsDevFormat來格式化flash, tffsDevFormat最終會調(diào)用mx29lvErase和mx29lvWrite函數(shù),如果成功就會返回0,否則返回-1。當(dāng)然也可以調(diào)用 tffsDevCreate函數(shù)來驗證我們的寫和擦除函數(shù)的正確性。圖19說明了tffsDevCreate調(diào)用過程。
clip_image004
圖19 tffsDevCreate()調(diào)用過程
在shell上利用tffsShow來驗證mx29lvMtdIdentiy。
&gt; tffsShow
0: socket=RFA: type=0x2249, unitSize=0x10000, mediaSize=0x1f0000
value = 49 = 0x31 = "1"
說明已正確識別到MX29LV160BT設(shè)備,設(shè)備號為0x2249。
建立TFFS設(shè)備
1.掛接設(shè)備名
MTD驅(qū)動調(diào)試成功后,我們就可以給flash設(shè)備掛接上dos設(shè)備名,如下操作:
格式化:
&gt;    tffsDevFormat 
value = 1
&gt;    usrTffsConfig 0,0,”/tffs0”
value = 0
然后通過devs來查看掛接的設(shè)備名:
&gt;    devs
drv name                
  0 /null               
  1 /tyCo/0             
  1 /tyCo/1             
  5 host:               
  6 /pty/rlogin.S       
  7 /pty/rlogin.M       
  3 /tffs0/             
  8 /vio                
value = 25 = 0x19
看到/tffs0/說明掛接設(shè)備已經(jīng)成功,接下來就可以利用dosFs文件系統(tǒng)相關(guān)命令來操作flash了。如,ls、copy等。
用代碼來完成上述過程:
STATUS flashInit(void)
{
STATUS rc = OK;
if (tffsDrv() != OK)
{
printf("Could not initialize.\n");
return (ERROR);
}
#if 0
printf("Attaching to flash file system... ");
#endif
dosFsInit(NUM_DOSFS_FILES); /* initialize DOS-FS */
if (usrTffsConfig(driveNumber1, 0, SYS_BASE_FS) == ERROR)
{
printf("\ncore file system not exist.\n");
rc = sysTffsFormat(0, 0, 0, SYS_BASE_FS, 0, 0, 0);
}
return rc;
}
上述代碼中的sysTffsFormat()會調(diào)用tffsDevFormat()進(jìn)行格式化操作,如:
tffsDevFormat(driveNumber, (int)params);
params為tffsDevFormatParams結(jié)構(gòu)體指針,即格式化參數(shù),如:
#define TFFS_FORMAT_PARAM_WITH_ROOM_FOR_CONFIG_WORD \
{{1, 99, 1, 0x10000l, NULL, {0,0,0,0}, NULL, 2, 0, NULL}, FTL_FORMAT_IF_NEEDED}
而函數(shù)usrTffsConfig( )則將tffsDevCreate( )和dosFsDevInit( )進(jìn)行了合成,是一個快捷函數(shù)。
2.從Flash中啟動并下載VxWorks映像
要從flash中下載VxWorks映像,首先需要把VxWorks映像拷貝到flash中,在shell中的操作命令為copy “VxWorks”,“tffs0/VxWorks”,然后修改config.h文件中引導(dǎo)行,如下:
#define DEFAULT_BOOT_LINE \
"tffs=0,0(0,0)host:/tffs0/VxWorks h=192.168.0.153 e=192.168.0.154 u=target pw=target o=cpm"
修改完后,重新編譯生成bootrom_uncmp.bin,并把它燒寫到flash中。然后重新啟動,即可看到如下啟動畫面:
boot device          : tffs=0,0
unit number          : 0 
processor number     : 0 
host name            : host
file name            : /tffs0/VxWorks
inet on ethernet (e) : 192.168.0.154
host inet (h)        : 192.168.0.153
user (u)             : target
ftp password (pw)    : target
flags (f)            : 0x0 
other (o)            : cpm
Attaching to TFFS... done.
Loading /tffs0/VxWorks...894304
Starting at 0x10000...
Development System
        VxWorks version 5.5.1
        KERNEL: WIND version 2.6
        Copyright Wind River Systems, Inc., 1984-2003
    CPU: Motorola ADS - PowerPC 860.  Processor #0.
    Memory Size: 0x1000000.  BSP version 1.2/5.
    WDB Comm Type: WDB_COMM_END
                 WDB: Ready.
到此,說明引導(dǎo)成功。flash整個TFFS文件系統(tǒng)就已經(jīng)建立成功。
在一片F(xiàn)LASH同時裝載BootRom、VxWorks文件
我們將Flash地址映射成兩個地址段,一段用做BootRom,一段用做VxWorks使用,用做BootRom的地址段為0xFFF00000~0xFFF80000,另外一段用做VxWorks的地址段為0x04080000~0x04800000(假設(shè)此Flash大小為8M大。 0xFFF00000~0xFFF80000地址段寫入BootRom,在0x04080000~0x04800000地址段寫入VxWorks,加電后,PC指針會跳到0xFFF00100地址執(zhí)行第一條指令,引導(dǎo)BootRom起來并最終VxWorks系統(tǒng)引導(dǎo)成功。實現(xiàn)過程:
1.片選(?)
在romInit.s文件中要做如下的片選操作,片選0為BOOT Flash的地址片選,片選1為Flash的地址片選,其中ROM_BASE_ADRS為0xFFF00000
/* -------------------------------------------------------- */
/* Initialize Chip Select 0 for Bootrom */
/* ------------------------------------------------------------- */
lis r5, HIADJ( ROM_BASE_ADRS | BR_PS_8 | BR_WP | BR_V)
addi r5, r5, LO( ROM_BASE_ADRS | BR_PS_8 | BR_WP | BR_V)
stw r5, BR0(0)(r4)
lis r5, HIADJ( 0xFFF80000 | 0x00000100 | 0x00000080)
addi r5, r5, LO( 0xFFF80000 | 0x00000100 | 0x00000080)
stw r5, OR0(0)(r4)
/* -------------------------------------------------- */
/* Initialize Chip Select 1 for FLASH */
/* -------------------------------------------------- */
lis r5, HIADJ( 0x04000000 | BR_PS_16 | 0x00000001)
addi r5, r5, LO( 0x04000000 | BR_PS_16 | 0x00000001)
]]>
嵌入式語音通信系統(tǒng)中VxWorks BSP的設(shè)計實現(xiàn)http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1926&Page=1wangxinxin2010-12-1 9:18:560 引 言

  當(dāng)前普遍使用的DSP語音處理技術(shù)只能對語音進(jìn)行簡單處理,不能適應(yīng)語音業(yè)務(wù)的多樣化趨勢。本文介紹利用MPC860和VxWorks實現(xiàn)綜合語音通信平臺,支持多板卡、多路語音實時傳輸,可擴(kuò)展多路語音共聽功能。利用MPC860的通信和信號處理功能,且Vx-Works具有占用空間小、執(zhí)行效率高、方便進(jìn)行個性化定制和較好的兼容性等特點,所以該綜合語音通信平臺在功能、硬件結(jié)構(gòu)、體積、功耗以及靈活性上具有較大優(yōu)勢。

  在設(shè)計中盡量采用嵌入式開發(fā)中的常用器件,以便稍加改動即可應(yīng)用于其他設(shè)計。可以根據(jù)實際需要更改系統(tǒng)中語音通道的數(shù)目和擴(kuò)展多路語音共聽功能等。

  1 系統(tǒng)結(jié)構(gòu)及工作原理

  1.1 系統(tǒng)組成及特點

  整個通信平臺由語音通信處理主板和語音采集回放子板組成。語音通信處理主板包括CPU MPC860、FLASH存儲器、SDRAM存儲器、10/100Mb/s網(wǎng)絡(luò)接口、RS 232串口、BDM調(diào)試接口、Console接口、供電和復(fù)位電路及120pin連接器。通信處理主板的核心MPC860是Motorola公司的一款由MC68360演變而來的通用單片集成嵌入式微處理器,適用于通信和網(wǎng)絡(luò)系統(tǒng)。該微處理器內(nèi)部有兩個處理器:PowerPC和32位RISC處理器。PowerPC核同內(nèi)存管理單元(MMU)、指令和數(shù)據(jù)Cache一同處理高層次應(yīng)用,CPM則負(fù)責(zé)完成低層數(shù)據(jù)通信。兩個處理器主要通過共享內(nèi)存交互。通信處理模塊利用SCC,SMC,SPI和I2C串行通道與外部設(shè)備通信,其中SCC和SMC支持時分復(fù)用。設(shè)計中,SCC工作在QMC協(xié)議Trans-parent Mode。通信處理模塊(CPM)新增了數(shù)字信號處理(DSP)功能。語音采集回放子板由語音采集電路、語音回放電路、基于FPGA實現(xiàn)的通信控制器和與語音通信處理主板連接的120pin連接器組成。

  由于MPC860的數(shù)據(jù)傳輸速度相比ADC和DAC要快很多,設(shè)計相應(yīng)的邏輯電路控制語音的采集和回放、協(xié)調(diào)MPC860和數(shù)據(jù)采集、回放電路之間的通信是保證系統(tǒng)正常工作的關(guān)鍵。文中設(shè)計了基于Altera公司的CycloneⅡEP2C8芯片實現(xiàn)的通信控制器來解決這一問題。

  將通信平臺分為語音通信處理主板和語音采集回放子板分別設(shè)計實現(xiàn),是為了降低系統(tǒng)開發(fā)難度和便于系統(tǒng)維護(hù)、升級和擴(kuò)展。例如語音通信處理主板無需改動即可利用已有的連接器、FEC網(wǎng)絡(luò)接口和SDRAM存儲器等資源與視頻編解碼芯片、視頻壓縮/解壓縮芯片組成網(wǎng)絡(luò)視頻服務(wù)器。

  1.2 功能結(jié)構(gòu)和工作原理

  語音通信處理主板的功能結(jié)構(gòu)如圖1所示。

圖片點擊可在新窗口打開查看


  系統(tǒng)上電后,語音通信處理主板復(fù)位電路產(chǎn)生復(fù)位信號,MPC860接收到復(fù)位信號后,跳轉(zhuǎn)到0X100處開始執(zhí)行啟動代碼。按照BSP配置逐步執(zhí)行CPU初始化、板上其他硬件電路的初始化、操作系統(tǒng)運行所需數(shù)據(jù)結(jié)構(gòu)的初始化、啟動VxWorks WIND內(nèi)核、創(chuàng)建UserRoot任務(wù)、初始化系統(tǒng)中用到的可選擴(kuò)展模塊(如I/O系統(tǒng)、文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議等)、創(chuàng)建任務(wù)usrAppInit(),此時語音通信平臺準(zhǔn)備就緒,可以執(zhí)行語音通信任務(wù)。采集板的功能結(jié)構(gòu)如圖2所示,語音通信處理主板啟動完畢后,語音采集回放子板可在通信控制器控制下采集和回放語音,并對語音數(shù)據(jù)進(jìn)行壓縮編解碼和IP封裝、解封裝處理。

圖片點擊可在新窗口打開查看


  1.3 數(shù)據(jù)處理流程

  MPC860T和ADC AD7825,DAC AD7305之間的通信由通信控制器控制。通信控制器由數(shù)據(jù)緩沖區(qū)(Rx FIFO,Tx FIFO),基于FSM(有限狀態(tài)機(jī))實現(xiàn)的控制邏輯(Rx control,Tx control)和8位串并、并串轉(zhuǎn)換器,時鐘電路組成。其數(shù)據(jù)接收過程為:接收控制邏輯(Rx control)控制ADC AD7825將各個通道的語音數(shù)字化,并把轉(zhuǎn)換結(jié)果存入接收緩沖區(qū)(Rx FIFO),直至Rx FIFO滿時Rx control開始向MPC860T提供周期性幀同步信號,頻率為32 kHz。MPC860在幀同步信號和時鐘信號的驅(qū)動下讀取Rx FIFO中的數(shù)據(jù)到SCC數(shù)據(jù)接收緩沖區(qū)。Rx FIFO讀空(即讀指針追上了寫指針)后,Rx control停止向MPC860發(fā)送幀同步信號終止數(shù)據(jù)傳輸,同時向MPC860發(fā)送中斷信號IRQ3,MPC860響應(yīng)中斷把數(shù)據(jù)從接收緩沖區(qū)讀到接收ring buffer中等待應(yīng)用程序處理。其數(shù)據(jù)發(fā)送過程為:MPC860完成IP解封裝、解壓縮后的語音數(shù)據(jù)將會在檢測到發(fā)送緩沖區(qū)可用時,輸出到SCC發(fā)送緩沖區(qū),通信控制器提供發(fā)送幀同步信號驅(qū)動數(shù)據(jù)傳輸?shù)絋x FIFO(發(fā)送緩沖區(qū)),待到Tx FIFO滿時停止發(fā)送幀同步信號。數(shù)據(jù)發(fā)送完后,CPM會清零,TxBD)中的R位表示MPC860可向SCC發(fā)送緩沖區(qū)中裝入新的數(shù)據(jù),為下次傳輸做準(zhǔn)備。

  1.4 QMC通信協(xié)議

  多通道控制器(QUICC Multichannel Controler,QMC)是為了實現(xiàn)時分復(fù)用數(shù)據(jù)傳輸而設(shè)計的,它可以把時分復(fù)用幀的數(shù)據(jù)分發(fā)到多達(dá)64個邏輯通道。該模式下把每一幀的數(shù)據(jù)劃分成若干個時隙(Timeslots),每時隙8 b。在時隙分配表中規(guī)定每時隙數(shù)據(jù)從屬于某個通道,每個通道都有一組特定的緩沖區(qū)描述符和相應(yīng)的緩沖區(qū)。一個時隙的數(shù)據(jù)在收發(fā)時被放置在特定的緩沖區(qū)里,MPC860T就可把分散的數(shù)據(jù)*在一起發(fā)送,或把*在一起的數(shù)據(jù)分發(fā)到各自專用的緩沖區(qū),而不需要額外的處理來區(qū)分各種各樣的數(shù)據(jù)流。

  2 BSP 設(shè)計實現(xiàn)

  設(shè)計中軟件開發(fā)主要包括啟動代碼的編寫、操作系統(tǒng)的移植、硬件驅(qū)動程序和語音編、解碼和IP封裝、解封裝應(yīng)用程序。篇幅有限,本文僅介紹BSP移植。BSP即板級支持包,其功能為硬件、軟件初始化、工程影像的下載和設(shè)備驅(qū)動等。

  2.1 BSP的定制

  無論是BootRom還是VxWorks都要使用BSP代碼,BSP定制需要根據(jù)硬板配置、系統(tǒng)設(shè)計需求、軟件功能等實際情況。實際開發(fā)過程中,為了縮短產(chǎn)品開發(fā)周期,通常以WINDRIVER公司的BSP模板或者第三方公司提供的可供參考的BSP為基礎(chǔ),根據(jù)軟硬件具體配置進(jìn)行修改,添加新的程序驅(qū)動新增硬件和功能。本課題中先把APC860開發(fā)板的BSPMPC860TEVB拷貝到installdir:\Tornado\target\collfig\ppcs860目錄下,主要做下列修改。

  2.1.1 config.h文件

  根據(jù)實際情況,需要修改啟動行,內(nèi)存地址、容量等配置,修改部分代碼如下:

圖片點擊可在新窗口打開查看


  2.1.2 makefile文件的修改

  makefile文件的修改,部分程序如下:

圖片點擊可在新窗口打開查看


  2.1.3 romInit文件修改

  romlnit.s模塊包含了VxWorks在ROM中的入口點romlnit(),它是單板上電以后最先執(zhí)行的匯編程序代碼。該函數(shù)功能包括處理器的復(fù)位、內(nèi)存的初始化以及其他的最基本和必要的初始化工作。需要修改的內(nèi)容如下:

  內(nèi)部存儲器映射寄存器IMMR。該寄存器用來標(biāo)識內(nèi)部地址空間的基址,將該寄存器設(shè)置為“FF000000”。

  SIU模式配置寄存器SIUMCR。包括有外部總線仲裁器配置,外部master的支持,DEBUG調(diào)試端口配置,系統(tǒng)接口引腳配置以及奇偶校驗支持,將該寄存器設(shè)置為“00E10000”。

  BSP中討論SDRAM的初始化過程,首先對MAMR寄存器的初始化,再得到UPM的RAM陣列表的地址,然后將RAM陣列表地址中的值寫入MPC860 RAM WORDS ARRAY中,最后初始化OR以及BR寄存器。

  2.1.4 ppcs860.h

  ppcs860.h是參數(shù)配置頭文件,該文件包含大量宏定義,為使MPC860T正常運行且SCC串口工作在QMC協(xié)議透明模式,根據(jù)實際需要做了如下配置:

  (1)修改系統(tǒng)常量對應(yīng)的宏定義:SCCx參數(shù)在雙端口RAM中存儲的起始地址、緩沖區(qū)描述符(BD)的基地址、緩沖區(qū)和BD的數(shù)目等;

  (2)串口和時隙分配表的初始化,主要包括時隙分配、引腳分配等,通過設(shè)置SI RAM參數(shù),規(guī)定了每個邏輯通道對應(yīng)的時隙和數(shù)據(jù)路由,本系統(tǒng)中選擇SCC2和TDMB接口實現(xiàn)QMC通信,引腳配置如下:

  PC6 RSYNC,PA2 RXC,PA10 RXD,PA0 TXC。PA11 TXD

  (3)SCC2初始化:設(shè)置SCC2工作在QMC模式;

  (4)QMC全局參數(shù)初始化:MCBASE(多通道基地址指針),初始化為SCC2對應(yīng)外部BD表的基地址,MRBLR(最大接收緩沖區(qū)長度),接收、發(fā)送時隙分配表起始地址的指針(Rx S PTR,Tx S PTR),接收、發(fā)送時隙分配表當(dāng)前時隙的指針(Rx PTR,TxPTR),中斷循環(huán)表基地址(INTBASE),中斷循環(huán)表下一可用入口的指針(INTPTR)等;

  (5)QMC特定通道參數(shù)初始化:TBASE,RBASE(該邏輯通道的緩沖區(qū)描述符的起始地址),TBPTR,RBPTR(當(dāng)前發(fā)送、接收緩沖區(qū)描述符指針),TMR-BLR(最大接收幀長度)等。

  2.1.5 驅(qū)動程序

  驅(qū)動程序直接對硬件操作,實現(xiàn)硬件和操作系統(tǒng)、應(yīng)用程序之間的交互。需要自行編寫MPC860 SCC串口驅(qū)動程序ppcs860QmcSio.c,通信平臺中SCC工作在QMC Transparent模式。ppcs860QmcSio.c文件中包含SIO_DRV_FUNCS結(jié)構(gòu)體中定義的5個函數(shù)和中斷處理函數(shù)ppc860QmcInt()、Qmc邏輯通道復(fù)位函數(shù)ppc860QmcChannelReset()。ppc860SccIoctl()提供了一些設(shè)備控制選項,包括停止數(shù)據(jù)傳送、察看當(dāng)前通信狀態(tài)(空閑還是忙)、輪詢或中斷模式選擇等;ppc860sccInt()處理QMC通道的中斷請求,通過中斷方式實現(xiàn)數(shù)據(jù)的收發(fā)功能;ppc860SccStartuP()函數(shù)啟動一個發(fā)送周期;ppc860SccCallbackInstall()安裝回調(diào)函數(shù)。中斷處理函數(shù)的功能有:

  (1)提供接收、發(fā)送中斷處理函數(shù),調(diào)用回調(diào)函數(shù)完成設(shè)備和較高層協(xié)議之間的數(shù)據(jù)傳送。

  (2)處理數(shù)據(jù)接收過程中出現(xiàn)的接收數(shù)據(jù)過長,數(shù)據(jù)傳送被迫終止等異常。由于不需要QMC的輪詢模式,因此ppc860SccPollInput()和ppc860SccPollOutput()以NULL函數(shù)的形式實現(xiàn)。同時還要編寫sysSccSeri-al.c文件,修改sysLib.c文件和usrConfig.c文件。在sysSccQmc.c中提供SCC設(shè)備描述符的初始化例程、SCC中斷連接例程等;通過修改sysLib.c和usrCon-fig.c文件以實現(xiàn)VxWorks對QMC驅(qū)動程序的調(diào)用和QMC驅(qū)動程序與TTY系統(tǒng)的掛接。

  2.1.6 通道中斷處理過程

  數(shù)據(jù)收發(fā)的核心是中斷處理函數(shù)。QMC中的所有邏輯通道共享SCC2的中斷,SCC2維持有一個全局中斷表,表中每一項里面都含有邏輯通道號和中斷源,可以被驅(qū)動識別以處理不同情況下出現(xiàn)的事件。中斷發(fā)生時,驅(qū)動從SCCE寄存器里面判斷全局中斷源,如果中斷是由邏輯通道引起,中斷服務(wù)程序便查找全局中斷表以找到該邏輯通道,并從中斷條目里面檢查中斷信息以確定是什么類型,再調(diào)用相應(yīng)的收發(fā)和錯誤處理函數(shù)。

  2.1.7 數(shù)據(jù)接收和發(fā)送

  多通道語音通信系統(tǒng)中MPC860T SCC串口時分復(fù)用即工作在QMC模式,邏輯通道的通信協(xié)議為Trasparent mode,該協(xié)議僅傳輸二進(jìn)制數(shù)據(jù),不對數(shù)據(jù)流進(jìn)行位級操作,不區(qū)分?jǐn)?shù)據(jù)幀中的格式位、起止位和數(shù)據(jù)位等,不對接收的數(shù)據(jù)做檢錯處理,因而具有較高的數(shù)據(jù)傳輸速率。

  接收函數(shù)由中斷服務(wù)例程調(diào)用。由于是每接收一幀產(chǎn)生一次中斷,故接收函數(shù)也每次處理一幀的數(shù)據(jù)。數(shù)據(jù)的接收由接收描述符RxBD控制。當(dāng)要接收數(shù)據(jù)時,接收函數(shù)首先需要確定RxBD有效;確定沒有問題后,才將數(shù)據(jù)從接收緩沖區(qū)拷貝到接收Ring buffer,并復(fù)位RxBD;否則在進(jìn)行相應(yīng)錯誤處理后復(fù)位RxBD。接收函數(shù)流程如圖3所示。

圖片點擊可在新窗口打開查看


  數(shù)據(jù)發(fā)送不調(diào)用中斷處理函數(shù),發(fā)送函數(shù)檢測到發(fā)送緩沖區(qū)可用(即TxBD中R位為1)后,調(diào)用回調(diào)函數(shù)將數(shù)據(jù)從發(fā)送Ring buffer拷貝到串口發(fā)送緩沖區(qū)(Txbuffer)。這里為發(fā)送功能開辟足夠大的環(huán)形緩沖區(qū)(足以容納應(yīng)用程序每一幀的數(shù)據(jù))。發(fā)送函數(shù)流程如圖4所示。

  2.2 BSP調(diào)試方法和遇到的問題

  2.2.1 調(diào)試方法

  開發(fā)調(diào)試有兩種方法,一種是使用仿真器通過BDM(后端調(diào)試模式)一步步地跟蹤調(diào)試,另一種是通過點燈的方式進(jìn)行所謂的“黑”調(diào)!昂凇闭{(diào)的方法是通過“燈”閃、用示波器測片選等,根據(jù)外部現(xiàn)象和所編的測試代碼進(jìn)行比較分析來調(diào)試程序。進(jìn)行“黑”調(diào)的目的是調(diào)通信串口部分代碼,宿主機(jī)可以通過串口與目標(biāo)機(jī)的通信,然后再調(diào)試其他部分。調(diào)試流程分成兩部分。首先是預(yù)內(nèi)核啟動代碼(Pre-Kernel Initializa-tion),待最小內(nèi)核啟動正常后再添加I/O系統(tǒng)、文件系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等組件和調(diào)試應(yīng)用程序。使用仿真器Vi-sion Probe通過BDM方式調(diào)試BSP并將BootRom映像燒入FLASH。

  2.2.2 調(diào)試中遇到的問題

  (1)系統(tǒng)無法正常復(fù)位

  在調(diào)試過程中,發(fā)現(xiàn)MPC860T的CLKOUT引腳無輸出信號,系統(tǒng)上電復(fù)位過程沒有完成,系統(tǒng)無法正常工作。初步判斷是硬件問題。用萬用表和示波器逐步檢查上電復(fù)位、硬件復(fù)位、軟件復(fù)位、時鐘輸入和BDM調(diào)試等模塊電路,發(fā)現(xiàn)正常。判斷是BGA焊接出現(xiàn)問題,將芯片取下,重新焊接,系統(tǒng)復(fù)位正常,時鐘信號輸出穩(wěn)定正常。

  (2)網(wǎng)絡(luò)無法與外界通信

  100 Mb/s快速以太網(wǎng)驅(qū)動加載中,網(wǎng)絡(luò)層協(xié)議無法運行,目標(biāo)板無法與外界網(wǎng)絡(luò)建立聯(lián)系。目標(biāo)板網(wǎng)絡(luò)啟動時發(fā)出的MAC地址信息幀外界無法收到。通過仿真器發(fā)現(xiàn)程序單步運行正常。經(jīng)過反復(fù)試驗和測試,最終發(fā)現(xiàn)因SDRAM初始化程序沒有運行導(dǎo)致程序運行(需要SDRAM支持突發(fā)模式)出錯。更改調(diào)試方式,將BootRom開始的所有程序燒入FLASH,上電啟動,網(wǎng)絡(luò)正常,目標(biāo)板與外界建立良好的網(wǎng)絡(luò)通信。

  3 結(jié) 語

  該系統(tǒng)在實際測試中話音質(zhì)量穩(wěn)定,測試時聲音清晰,沒有串?dāng)_和雜音,沒有較大延遲,說明硬件設(shè)計正確完備,QMC驅(qū)動程序和語音編解碼和IP封裝與解封裝應(yīng)用程序性能優(yōu)良。

  如果板卡上語音通道更多,則每幀的時隙增多、長度增大,因為FPGA內(nèi)部電路所提供的的幀同步信號周期并不改變,所以只是實際數(shù)據(jù)傳輸速率提高,可以保證各路語音的同步和實時性。系統(tǒng)中QMC工作在Transparent Mode限制了它的應(yīng)用范圍,如何改進(jìn)使系統(tǒng)支持多種通信協(xié)議是需要進(jìn)一步研究的問題。

]]>
基于PC104總線的VxWorksBSP設(shè)計http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1925&Page=1wangxinxin2010-12-1 9:15:43

 

1 引言

VxWorks是由美國的WindRiver推出的一種嵌入式強(qiáng)實時操作系統(tǒng),它存在多任務(wù)調(diào)度的方式,可以管理多個外設(shè),而且它可根據(jù)應(yīng)用程序的需求對操作系統(tǒng)進(jìn)行裁剪,最大程度的壓縮代碼,實現(xiàn)程序的優(yōu)化。

Intelx86系列處理器的嵌入式應(yīng)用一般是以PC104的形式出現(xiàn)的,PC104除包括PC/AT的所有標(biāo)準(zhǔn)功能外,它的CPU模塊還有一些獨特的優(yōu)點開發(fā)周期短、費用低、體積小、層疊連接、功耗小、模塊化、抗沖擊及震動能力強(qiáng),工作及存儲溫度范圍寬、集成度高,可靠性高。

PC/104總線設(shè)備上使用的數(shù)據(jù)存儲設(shè)備通常有硬盤和基于閃存技術(shù)的固態(tài)電子盤。由于嵌入式系統(tǒng)工作環(huán)境一般比較惡劣,硬盤在惡劣的震動條件下無法正常工作,而固態(tài)電子盤的工作范圍很寬,可以選擇相應(yīng)環(huán)境下的器件(零下40到零上85),并且體積很小,適合嵌入式應(yīng)用。本嵌入式系統(tǒng)中數(shù)據(jù)存儲設(shè)備采用了CE公司的CF(CompactFlash),而在此軟硬件平臺上設(shè)計開發(fā)了嵌入式實時操作系統(tǒng)VxWorks的并基于PC104總線的板載支持包。

 

]]>
arm技術(shù)VxWork BSP啟動過程http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1924&Page=1wangxinxin2010-12-1 9:11:44開發(fā)BSP主要的兩點:
  1. 系統(tǒng)image的生成,image的種類,image的download下載過程,系統(tǒng)的啟動順序和過程,調(diào)試環(huán)境的配置及遠(yuǎn)端調(diào)試的方式和方法,相應(yīng)BSP設(shè)置文件的修改(網(wǎng)絡(luò),串口..),BSP各文件的組成和作用.

  1. 要對系統(tǒng)底層驅(qū)動清楚,也就是對CPU及相關(guān)的硬件有所了解.主要是32微處理器(上電啟動過程, download image的方式方法,讀寫ROM,地址空間分配,MMU,寄存器,中斷定義,..).參照硬件資料,多讀一些源碼會有所幫助.

Tornado 2 開發(fā)調(diào)試環(huán)境協(xié)議框圖

主機(jī)開發(fā)(Host Development System)

目標(biāo)機(jī)(Target System)

Tornado 工具

 

WTX協(xié)議通信<==========>

Editor Project
Shell Debugger Browser Windview

Target Server

|

Target Agent VxWorks Target Simulator

WDB協(xié)議通信
<==========>

Application VxWorks OS VxWorks Target (WDB)Agent

兩個主要兩個協(xié)議

WTX協(xié)議(Wind River Tool eXchange): 用于開發(fā)機(jī)內(nèi)部Tornado工具與Target Server之間通信.

WDB協(xié)議(Wind DeBug): 用于主機(jī)Target Server與目標(biāo)機(jī)之間的通信.

 

一.基本概念

BSP定義:

Provides VxWorks with primary interface to hardware environment.

作用: 

  • 在通電后,初始化硬件.

  • 支持VxWorks和硬件驅(qū)動通信.

  • 使hardware-dependent 和 hardware-independent在VxWorks系統(tǒng)中很好的結(jié)合.

主要BSP主要文件目錄的組成及主要文件的作用:

  • 目錄target/config/All:

這個目錄下的文件

是所有BSP文件共享的,不是特別需要不要更改里面的任何文件.

configAll.h:

缺省定義了所有VxWorks的設(shè)置.如果不用缺省的設(shè)置,可在BSP目錄下的config.h文件中用#define或#undef方式來更改設(shè)置.

bootInit.c:

在romInit.s后,完成Boot ROM的第二步初始化.程序從romInit.s中的romInit()跳到這個文件中的romStart().來執(zhí)行必要的解壓和ROM image的放置.

bootConfig.c: 完成Boot ROM image的初始化和控制.

usrConfig.c: VxWorks image的初始化代碼.

  • 目錄target/config/comps/src:

涉及系統(tǒng)核心的components,主要由target/config/All中usrConfig.c中函數(shù)調(diào)用

  • 目錄target/config/bspname:

包含系統(tǒng)或硬件相關(guān)的BSP文件.

Makefile

一些命令行控制images的生成,參見 BSP設(shè)置部分及生成下載

README

BSP發(fā)布紀(jì)錄,版本,總的文檔

config.h

包括所有涉及CPU主板的設(shè)置及定義(includes,definations),參見 BSP設(shè)置文件及生成下載

configNet.h

網(wǎng)絡(luò)驅(qū)動的主要設(shè)置文件,主要對END驅(qū)動設(shè)置.

romInit.s

匯編語言文件,是VxWorks Boot ROM和ROM based image的入口,參見 系統(tǒng)啟動部分

sysALib.s

匯編語言文件,程序員可以把自己的匯編函數(shù)放在這個文件里,在上層調(diào)用.VxWorks image的入口點_sysInit在這個文件里,是在RAM中執(zhí)行的第一個函數(shù).

sysLib.c

包含一些系統(tǒng)相關(guān)的函數(shù)例程,提供了一個board-level的接口,VxWorks和應(yīng)用程序可以以system-indepent的方式生成.這個文件還能包含目錄target/config/comps/src的驅(qū)動.

sysScsi.c

可選文件用于Scsi設(shè)備設(shè)置和初始化.

sysSerial.c

可選文件用于所有的串口設(shè)置和初始化.

bootrom.hex

ASIC文件包含VxWorks Boot ROM代碼

VxWorks

運行在目標(biāo)機(jī)上,完整的,連結(jié)后的VxWorks二進(jìn)制文件.

VxWorks.sym

完全的,連結(jié)后帶有符號表的VxWorks二進(jìn)制文件

VxWorks.st

完全的,連結(jié)后,standalone,帶有符號表的VxWorks二進(jìn)制文件

 

  • BSP用"make"來編譯連接生成(Created),而不是用Tornado的工具.

  • BSP和應(yīng)用程序都可以在"make"或"tornade"上開發(fā)(developed)

  • BSP被設(shè)置包括以下驅(qū)動:

中斷控制interrupt controller,計時器timer(sys/aux),串口UART(serial),顯示屏LCD,鍵盤Keyboard(opt),觸摸屏touch-screen(opt).

前面三個是BSP的主要部分.

  • BSP默認(rèn)的download VxWorks RAM image方式是從ethernet.

  • 串口電纜需要用來和開發(fā)板(COM1)通信,通過協(xié)議WDB.

    VxWorks Image的種類:

  • Loadable images.

  • ROM-based images---compressed/uncompressed.

 

]]>
主站蜘蛛池模板: 国产成人精品.一二区 | 午夜精品同性女女 | 国产精品久草 | 国产第一夜 | 亚洲男人天堂2018 | 成人午夜影院 | 伊人2233 | a黄色毛片 | 美女黄色在线看 | 亚洲午夜在线观看 | 亚洲美女精品视频 | 亚洲精品综合一区二区三区在线 | 国产精品久久久久久一区二区 | 久久在线免费 | 欧美高清一区二区三区欧美 | 一级女性全黄久久生活片免费 | 国产成人mv在线观看入口视频 | 日本久久精品 | 亚洲国产欧美另类 | 国产伦精品一区二区三区免费 | 欧美日韩精品一区二区视频在线观看 | 特黄特色三级在线播放 | 亚洲超大尺度激情啪啪人体 | 亚洲的天堂 | 日韩毛片高清在线看 | 国产成人亚洲精品老王 | 久久精品操 | 欧美一级乱理片免费观看 | 三级中文字幕永久在线视频 | 国产精品亚洲国产三区 | 午夜宅男在线永远免费观看网 | 久久国产视频网 | 国产亚洲精品影达达兔 | 成年女人在线视频 | 亚洲系列中文字幕一区二区 | 日韩不卡一区二区三区 | 欧美成人艳星在线播放 | 国产高清视频在线播放 | 欧美成人三级 | 亚洲一级网站 | 67194成人手机在线 |