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

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




2.romStart()




3.usrInit()

4.usrKernelInit()
5.kernelInit()

6.usrRoot()

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

(a)將數據段從ROM拷貝到RAM,清內存;
(b)將代碼段從ROM拷貝到RAM,有必要的話解    壓縮;
(c)調用usrInit();

初始化程序

如果相應的配置文件被定義,對應函數被調用

初始化并啟動內核

初始化I/O系統,驅動器,創建設備

應用程序代碼    romInit.s




bootInit.c




usrConfig.c

usrKernel.c

kernelLib.c

usrConfig.c

Application source file

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

        BSP的文件構成如下:
        1,硬件初始化文件:處理器初始化程序。
        2,操作系統初始化文件:各類頭文件,驅動程序,操作系統內核初始化程序,創建多任務環境程序。
        3,工具文件:各類make文件,制作系統引導文件的工具。
  BSP的工作
        1,單板硬件初始化,主要是CPU的初始化,為整個軟件系統提供底層的硬件]]>
基于ARM7核處理器VxWorks系統BSP設計http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1941&Page=1wangxinxin2010-12-1 10:44:44關鍵詞:ARM7TDMI S3C4510B VxWorks BSP

1 介紹

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

● 時鐘頻率50MHz

● 內核/IO電壓3.3V

● 8KB的Cache/SRAM

● 一個10/100Mbps 以太網控制器,MII接口

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

● 兩個UART通道

● 兩個DMA通道

● 兩個32位定時/計數器

● 18個可編程I/O口

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

● 支持SDRAM,EDO DRAM,SRAM,Flash等

● 具有擴展外部總線

● JTAG接口,支持軟件開發 ,硬件調試

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

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

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

ARM7TDMI內核方塊圖如圖1所示。

2 系統硬件圖

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

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

3 VxWorks操作系統下BSP構建

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

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

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

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

④ 燒寫程序采用編程器。

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

(1)拷貝BSP

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

(2)修改MakeFile文件

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

TARGET_DIR = 4510BSP # changed by caiyang

VENDOR = CAI # changed by caiyang

BOARD = MyArmBoard # changed by caiyang

ROM_TEXT_ADRS = 01000000 # ROM entry address

ROM_WARM_ADRS = 01000004 # ROM warm entry address

ROM_SIZE = 00080000 # number of bytes of ROM space

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

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

MACH_EXTRA =

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

ROM_WARM_ADRS:BOOT ROM熱啟動入口

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

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

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

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

2 VxWorks的引導過程

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

可加載映像包括VxWorks和Boot ROM兩部分內容,兩部分是獨立創建的。首先,由系統引導代碼把ROM引導程序搬到RAM_HIGH_ADRS。然后,ROM引導程序開始運行,將VxWorks映像加載到RAM_LOW_ADRS,之后跳轉到VxWorks映像裝入點。

基于ROM的VxWorks映像在BSP初始化時,會把lmage完全搬到RAM中執行,包括代碼段和數據段。在拷貝執行完畢后,系統控制權轉移給RAM中VxWorks映像的初始化代碼。

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

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

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

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

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

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

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

usrRoot()設置操作系統時鐘,創建設備,安裝驅動,調用sysHwInit2()安裝系統時鐘和輔助時鐘中斷以及串口等設備的中斷,初始化I/O、文件系統、調用應用程序。

3 VxWorks在AT91RM9200上的BSP設計

3.1 AT91RM9200簡介

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

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

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

3.2.1 修改Makeflie

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

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

3.2.2 修改Config.h

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

(1)定義引導行

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

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

(2)修改地址

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

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

VxWorks的缺省配置由configAll.h來確定。一般來說,缺省配置的設置與自行開發的硬件系統的配置不同,用戶可通過Cotlfig.h來改變缺省配置。用戶須查看configAll.h,并在Config.h中將不需要的軟硬件配置和初始化去掉。例如,缺省配置中一般包含浮點處理器,而AT9lRM9200中沒有浮點寄存器,因此就要刪掉相關配置。]]>
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的一個優勢就是它為應用代碼提供了高度的架構和硬件獨立性。這種可移植性得益于VxWorks的模塊化設計, 而這種模塊化設計將所有硬件相關的功能函數分離到了一套稱為板級支持包(BSP)的庫中。BSP庫為所有開發板的硬件相關功能提供了一個一致的接口。 這些功能包括硬件初始化, 中斷處理, 中斷產生, 硬時鐘和Timer管理, 本地和總線內存空間的映射, 以及內存尺寸控制等等。

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

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

B.      架構移植: 將VxWorks 和Tornado 調試器移植到一個以前不支持的目標處理器或架構上。

C.     板級移植: 將VxWorks 移植到一個新的目標板上, 在此之前應該已經有了宿主移植和架構移植。

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

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

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

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

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

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


1.1          Tornado 2.0 的新特性介紹:

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

宏 TYCO5_2被刪除:TYCO5_2這個宏不再被支持, 客戶應當使用Tornado 2.0 下的SIO驅動 。

BSP封裝被變更: 參考10。2  BSP封裝, P???頁以獲得更詳細的關于封裝要求的描述。 參考O。BSP產品內容以獲得一個典型產品內容的的快速總結。

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

 VxWorks網絡協議棧:VxWorks網絡協議棧是Tornado 1.0.1 用戶的可選部件, 現在是唯一被Winriver 支持的協議棧。 所有的BSP現在都使用為VxWorks網絡協議棧而修改的驅動程序。 VxWorks網絡協議棧是基于BSD 44 協議棧的。在BSP中 BSD44 和 END 驅動都可被使用。END驅動是BSP的缺省驅動。

新的驅動: 許多新的END網絡驅動已經被加入到驅動產品中來以便使盡可能多的產品擁有至少一個可用的END 驅動。

集成的模擬器: Tornado 2.0包括一個集成的模擬器, 它允許開發人員在硬件環境就續以前就能夠開始應用的開發。

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

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

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

ROM_WARM_ADRS 這個新宏被引入到BSP模板和一些BSP中, 它代表進入到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當設備被打開和關閉時通知驅動程序。 而SIO_HW_OPTS_SET 和SIO_HW_OPTS_GET允許用戶管理字符長度、奇偶、停止位和modem 控制線路。 可選位 CLOCAL 禁止了modem 控制線路在驅動程序中的使用, 為了保持向后兼容性, CLOCAL選項在Wind River BSP中默認是選擇的。

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

1.2          進行BSP開發的一些先決條件:

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

你也應當有一個適用于你的項目架構的模板BSP,以及模板驅動程序, 大部分客戶購買一個或多個設備驅動程序的源代碼。


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

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

Tornado產生的目標代碼的默認格式是Motorola開發板的Flash下載工具只能下載Intel 32bit格式。必須將它們進行轉換才能將代碼寫入到Flash中去。下面以Motorola的S2格式為例說明格式的轉換。

S2的一種實際格式如下:

S0120000626F6F74726F6D5F726532E686578CF

S214000000060000EABD0300EAA50300EAB70300EA1B

S804000000FB

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

:020000040000FA

:10000000060000EABD0300EABB50300EAB70300EA20

…………

:00000001FF

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

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

2 BSP的設計過程及軟件仿真方法

2.1 駐留ROM/Flash的系統各段分配情況

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

Flash的分配和對應常量的定義

片內Flash的地址空間為0x00000000~0x00020000

ROM_TEXT_ADRS=00000000代碼段的起始地址

ROM_SIZE=00020000 Flash的大小

RAM的分配和對應常量的定義

片內RAM的地址空間為0x40000000~0x40003FFF

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

RAM_LOW_ADRS=0x40000600

RAM_HIGH_ADRS=0x40000F00

LOCAL_MEM_SIZE=0x00020000

根據上面的分析,修改Makefile和config.h中相應的部分,使兩者一樣。

堆棧的分配

堆棧的地址設為STACK_ADRS,由系統定義,從RAM_LOW_ADRS開始向下伸展。

2.2 romlnit.s文件

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

地 址異 常

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

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

_romInit:

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

基于ARM體系結構的VxWorks的其中四個異常入口函數為:excEnterUndef、excEnterSwi、excEnterPrefetchAbort、excEnterDataAbort。直接在對應的位置用B指令跳到對應的函數中即可。代碼如下:

_ARM_FUNCTION(romInit)

_romInit:

cold:

B start /*復位異常*/

B excEnterUndef /*未定義異常 */

B excEnterSwi /*軟中斷*/

B excEnterPreftchAbort/*予取指異常*/

B excEnterDataAbort /*數據異常*/

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

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

B FIQ_Hander /*FIQ中斷入口函數*/

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

_ARM_FUNCTION(TIME0_IRQ_Hander)

_TIME0_IRQ_Hander:

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

STMFD SP!,{R0-R11,R12,LR} /*保存任務環境*/

MRS R3,SPSR /*保存狀態*/

STMFD SP!,{R3}

BL sysClkInt /*調用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} /*保存任務環境*/

MRS R3,SPSR /*保存狀態*/

STMFD SP!,{R3}

BL sysAuxClkInt /*調用C語言的中斷處理程序*/

LDMFD SP!,{R3}

MSR SPSR_cxsf,R3

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

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

FIQ_Hander:

STMFD SP!,{R0-R12,LR}

BL FIQ_Exception

LDMFD SP!,{R0-R12,LR}

SUBS PC,LR,#4

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

#define PINSEL0 0xE002C000

#define PINSEL1 0xE002C004

#define IODIR 0xE0028008

#define SPI_IOCON 0x00003DD0

我們設計的點燈程序如下。將其放在romInit.s適當的位置,可以定位程序的運行情況。

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集成開發環境下,templatARM的BSP生成bootrom_res.bin文件后,可以借助ASD1.2的AXD反匯編調方式器進行單步仿真和調試。

2.3 sysLib.c文件

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

#include “LPC2106.h”

PINSEL0=0x00000000;

PINSEL1=0x00000000;

IODIR=0x00003DD0;

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

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

#define Fcclk(Fosc *4)

/*系統頻率,必須為Fosc的整數倍(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文件

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

/*SysClkInt(),此函數每個時鐘Tick被調用一次*/

void sysClkInt(void){

/*通知系統中斷結束*/

T0IR=0x01;

T0MR0+=(Fpclk/sysClkTicksPerSecond);

VICVectAddr=0;

/*調用系統中斷函數*/

if(sysClkRoutine!=NULL)

(*sysClkRoutine)(sysClkArg);

}

/*sysClkDisable()禁止系統時鐘*/

void sysClkDisable(void){

if(sysClkRunning){

/*禁止系統時鐘中斷*/

VICIntEnClr=0x10;

T0TC=0;

SysClkRunning=FLASE;

}

}

/*sysClkEnable()啟動系統時鐘*/

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 應用程序設計

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

4 小結

VxWorks所需要的唯一的驅動程序是系統時鐘,本文詳細給出了系統時鐘源代碼,同時還給出了串口通信的源代碼,使得開發板與PC機能正常通信。另外,給出了基于VxWorks的應用程序的設計方法。由于BSP的設計本身就是一件很具有挑戰性的工作,相信本文對VxWorks的BSP設計得有所幫助。

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

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

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

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

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

2 VxWorks的引導過程
   
在編寫BSP之前,首先要了解整個系統的啟動過程。VxWorks的映像由代碼段、數據段和BSS段3部分組成。VxWotks內核可以分為3種:可加載類型映像、基于ROM的VxWorks映像和RoM駐留型映像。這3種類型的映像組織是不一樣的,因此啟動過程有所區別。

    可加載映像包括VxWorks和Boot ROM兩部分內容,兩部分是獨立創建的。首先,由系統引導代碼把ROM引導程序搬到RAM_HIGH_ADRS。然后,ROM引導程序開始運行,將VxWorks映像加載到RAM_LOW_ADRS,之后跳轉到VxWorks映像裝入點。

    基于ROM的VxWorks映像在BSP初始化時,會把lmage完全搬到RAM中執行,包括代碼段和數據段。在拷貝執行完畢后,系統控制權轉移給RAM中VxWorks映像的初始化代碼。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<!--[if !supportLists]-->?         <!--[endif]-->利用VMware等軟件模擬真實的目標機;

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

<!--[if !supportLists]-->?         <!--[endif]-->修改Tornado相關設置,連接宿主機與目標機,建立調試通道;

<!--[if !supportLists]-->?         <!--[endif]-->寫一個簡單的應用程序并下載到目標系統運行。

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 嵌入式系統的調試

本文工作的最終目標為:

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

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

圖2 在VMware中運行的VxWorks

(2)可在Tornado上針對目標板編譯程序并進行調試,如圖3。

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

圖3 與目標機建立調試通道的Tornado

<!--[if !supportLists]-->2          <!--[endif]-->模擬目標機

PC也具有目標機的所有特點,實際上,我們可以把PC作為嵌入式系統的目標機,從而構造如圖4所示的開發模型:

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

圖4 PC作為目標機

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

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

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

(1)下載并安裝VMware;

(2)使用VMware向導建立一個針對VxWorks的虛擬機;

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

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

圖5 選擇Other操作系統

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

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

圖6 虛擬軟驅和軟盤

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

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

圖7 包含軟驅的虛擬機

<!--[if !supportLists]-->3          <!--[endif]-->構造BSP

<!--[if !supportLists]-->3.1         <!--[endif]-->下載和編譯網卡驅動

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

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

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

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

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

該批處理文件用于設置環境變量,其內容為:

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%

       如果沒有設置成功,可以手工設置這些環境變量。

(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復制到此目錄下。備份此目錄下的文件libdrv.a;

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

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

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

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

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

(2)查找到定義DEFAULT_BOOT_LINE宏的地方,修改預處理條件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個網卡和第0個處理器,lnPci這個標識會因為使用的驅動程序不同而有所不同,但這里用lnPci就可以了;

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

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

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

e=193.168.80.254是目標機的IP地址,可以根據實際情況修改;

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

pw=target是用戶名對應的口令;

tn=target指定目標機的名字,任意指定即可。

(3)指定網卡驅動程序

首先查找“Network driver options”這段文字,之后你可以看到在該注釋后面定義了一系列的有關網卡驅動的宏定義。注意保證INCLUDE_END和INCLUDE_LN_97X_END這兩個宏處于定義狀態(define),其他的宏都處于未定義狀態(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系統是不接受外部輸入設備(如鍵盤)的輸入,也不向外部輸出設備(如顯示器)輸出數據。為了便于調試,我們必須改變它的這種缺省狀態。我們查找定位宏INCLUDE_PC_CONSOLE,然后保證其處于定義狀態(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”這段文字,然后將其前面的參數由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開發工具,在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后,還要創建一個VxWorks映象(image),也就是VxWorks操作系統本身的代碼,步驟為:

(1)創建一個“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協議登錄到VxWorks操作系統中;后者則可以讓我們通過命令行控制VxWorks系統。另外,需要把所有C++相關的選項都包含進去。

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

圖10 包括Telnet server和Target shell組件

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

<!--[if !supportLists]-->3.4         <!--[endif]-->創建引導軟盤

現在開始制作VxWorks系統引導磁盤,用于引導裝載VxWorks運行映象。定位目錄到C:\tornado2.2\target\config\pcPentium,插入您已經格式化好的軟盤,然后運行:

mkboot a: bootrom

該命令將在軟盤上建立VxWorks系統引導分區,并將引導程序復制到軟盤上。

 

<!--[if !supportLists]-->4          <!--[endif]-->建立調試環境

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

這里的FTP服務器用于在系統成功引導后,下載VxWorks的運行時映象。我們這里使用Tornado開發環境自帶的FTP服務器。

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

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

圖11 配置FTP服務器

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

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

虛擬機從軟盤啟動,接下來會下載服務器D:\vxworks映像,服務器的FTP會有相關的log,如圖12:

圖12 FTP服務器 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" />

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

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

2. 調試手段。 剛開始運行時,沒有其他手段,就需要使用LED點燈,或者使用自己定義的串口輸出函數來進行調試。不過要注意的是,在VXWORKS中初始化串口后,注意考慮自己定義的串口函數和系統之間的沖突。

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

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

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

    S3C44BOX是韓國Samsung公司出品的一款ARM(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引腳等,大大減少了系統成本,是各種學習板和開發板的首選ARM芯片

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

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

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

   

]]>
vxworks中斷服務程序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);
}
   當PCI總線上有中斷發生時,系統調用void pcilnt(int irq)函數,再由pciInt使用內部的鏈表來依次調用掛在該中斷上的ISR。如果某個ISR不能正常退出,就會影響到其它ISR的運行。在調試時為了檢查中斷向量是否已經和ISR可靠的連接上,可以在命令行上或程序中直接調用pciInt來查看ISR是否被觸發。在硬件確定的情況下,可以小心設計保證各個硬件使用不同的中斷,這樣對PCI上的設備也可直接使用intConnect來掛中斷。
        需要說明的是ISR掛上中斷向量的過程不是簡單的在向量表中設置中斷向量值。VxWorks除了設置中斷向量值以外,還在與中斷向量相連的ISR加上了一層薄薄的包裝,包括IsR執行前保存寄存器值.設置堆棧以及IsR執行后恢復寄存器和堆棧。在中斷頻繁的場合,系統中中斷堆棧有可能被耗盡而溢出。為了避免上述情況發生,必須修改系統的中斷堆棧大小,即在config.h中加入以下代碼:
#define INCLUDE_KERNEL
#define ISR_STACK_SIZE 0xl000 //表示系統中中斷堆棧的大小為4k
由于中斷處理程序的特殊性,中斷處理程序中不能使用可能導致阻塞的函數,如printf,semTake等,具體不可使用的函數列表可以在<<VxWoks Programmer Guide>>中查到。有時候為了調試方便,希望在ISR中打印一些信息,系統提供了一個與prinf等價的函數sysLog,該函數可接受7個參數。它是非阻塞的。比較而言,prinf函數要在打印任務完成后才返回,sysLog只把打印任務放到系統的打印隊列中就返回。在ISR中雖然不可以使用semTake,但可以使用semGive(互斥類型的除外)。一般使用semTake和semGive在ISR和普通程序間通信:當一個中斷產生,ISR 完成必要的任務后,調用semGive通知另外一個使用semTake等待ISR信號的任務,該任務收到semGive釋放的信號后,繼續完成ISR中不便處理的任務。 ]]>
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和硬件驅動通信;

使hardware-dependent 和 hardware-independent在VxWorks系統中很好的結合;

二.開發BSP主要的兩點:

系統image的生成,image的種類,image的download下載過程,系統的啟動順序和過程,調試環境的配置及遠端調試的方式和方法,相應BSP設置文件的修改(網絡,串口... ),BSP各文件的組成和作用。

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



三.兩個主要兩個協議:

WTX協議(Wind River Tool eXchange): 用于開發機內部Tornado工具與Target Server之間通信.

WDB協議(Wind DeBug): 用于主機Target Server與目標機之間的通信.



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

1.目錄target/config/All:

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

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

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

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

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



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

涉及系統核心的components,主要由target/config/All中usrConfig.c中函數調用.



3.目錄target/config/bspname:

包含系統或硬件相關的BSP文件.

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

b. README BSP發布紀錄,版本,總的文檔

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

d. configNet.h 網絡驅動的主要設置文件,主要對END驅動設置.

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

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

g. sysLib.c 包含一些系統相關的函數例程,提供了一個board-level的接口,VxWorks和應用程序可以以system-indepent的方式生成.這個文件還能包含目錄target/config/comps/src的驅動.

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

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

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

k. VxWorks 運行在目標機上,完整的,連結后的VxWorks二進制文件.

l. VxWorks.sym 完全的,連結后帶有符號表的VxWorks二進制文件

m. VxWorks.st 完全的,連結后,standalone,帶有符號表的VxWorks二進制文件

注:

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

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

BSP被設置包括以下驅動:

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

一.VxWorks Image的種類:

BSP默認的download VxWorks RAM image方式是從Ethernet. 串口電纜需要用來和開發板(COM1)通信,通過協議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(通過網口或串口下載到RAM):

vxWorks - basic Tornado, shell 和 symbol table 在主機端

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

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映像包含數據和程序段兩個部分

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 ...




一.系統啟動順序

VxWorks image

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



1.ROM中運行的VxWorks :

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

1.1執行順序

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

1.2優點

VxWorks在ROM中運行主要是為了節省RAM空間,以便應用程序有更大的空間運行.只把VxWorks image的data段復制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中執行.

1.3缺點

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



2. RAM中運行的VxWorks

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

2.1程序執行順序

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

-->KernelInit(usrRoot,...)



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



BootROM image

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



1.1程序執行順序

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

-->KernelInit(usrRoot,...)



其中 /target/config/all/bootConfig.c是Boot ROM設置模塊.用于通過網絡加載VxWorks image.

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

-->bootLoad(pLine, &entry)加載模塊到內存(網絡,TFFS,TSFS...)

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



1.2各個函數的主要作用

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() 初始化內存分區表(memory partition library)

初始化系統系統時鐘(system clock)

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

Create devices----可選

設置網絡(Configure network)--------可選

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

調用程序(Activate application)



VxWorks 在ROM中的情況

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

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

[關鍵詞] PC104總線;VxWorks;集成開發環境Tornado;板載支持包BSP

1 引言

VxWorks是由美國的WindRiver推出的一種嵌入式強實時操作系統,它存在多任務調度的方式,可以管理多個外設,而且它可根據應用程序的需求對操作系統進行裁剪,最大程度的壓縮代碼,實現程序的優化。

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

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

2 VxWorks板載支持包BSP設計

2.1 基于PC104總線設備的VxWorks操作系統映像開發

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

BSP與VxWorks操作系統的層次結構如下圖1所示:

圖1BSP與VxWorks操作系統的層次結構圖

基于PC104總線設備的VxWorks操作系統映像開發主要工作有3個方面:

①板載支持包設計與開發

VxWorks實時操作系統的板載支持包的開發通常提供一般模板程序,選擇一個相同處理器結構板載支持包進行設計。

②相關外圍硬件設備驅動程序

嵌入式系統是針對某一具體應用場合開發的專用系統,因此常常會使用到一些非標準的硬件設備,而VxWorks操作系統并不提供相關的外設驅動程序,使用時需自行開發相應的外設驅動程序。

③操作系統映像配置與生成

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

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

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

VxWorks內核的加載分為兩個步驟,第一個步驟是PCBIOS對bootrom的加載,第二個步驟是BSP引導映像bootrom對VxWorks操作系統映像加載。基本流程如下所示:

2.3 BSP中函數調用過程分析

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

2.4 修改BSP設計概要

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

板載支持包通常存放在Tornado的安裝目錄下面,其路徑是Root/target/config/bspname,root代表tornado的安裝目錄。設計一個可用的新的板載支持包,必須對Tornado本身自帶板載支持包作一定的分析。pc586板載支持包主要包括一些C文件和一些匯編文件,它們是:config.h,configAll.h,Pc.h,sysLib.c,ctdt.c,sysNetif.c,mkboot.c。板載支持包的缺省配置是由configALL.h來確定的,用戶可通過config.h來改變缺省配置。缺省配置是按照處理器廠商的評估板外圍硬件進行系統配置,根據實際硬件環境,一般需要做一定的改動,通常會在config.h中進行,通過一系列的定義宏,完成系統配制工作。

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

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

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

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

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

③在config.h中,把#define SYS_WARM_ATA_CTRL 0改為#define SYS_WARM_ATA_CTRL 1這樣系統熱啟動后,就會從CF卡上的引導區上引導。

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

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

將原來的ataTypes數組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*/...............};

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

2.5 BSP的調試

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

3 結束語

通過多次試驗的調試,最終設計出了基于PC104總線的VxWorks板載支持包。并應用于某型飛機燃油系統的智能化管理,實踐結果表明,這種方法是一種切實可行的方案。

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

從該設備的概要開始.指出該驅動實現整個設備的部分還是全部細節.

描述所有該設備的操作模式,指出該驅動所實現的是哪種.

寫出該設備在BSP中創建和初始化的步驟.寫出可把該驅動定制為特殊硬件環境的所有宏(macros).

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

模板概要:

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

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

例如,停止位數,數據位,奇偶,等等.

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

數據結構,好過TEMPLATE_DUSART.

數據結構

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

回調

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

模式

理想模式下該驅動應支持輪巡和中斷模式,并可動態切換模式。但這并非必須。Vxworks可支持此設備上的tty設備,即使該驅動只支持

中斷模式.

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

用法:

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

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

測試:

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

恢復目標:

wtxtcl.ex>wtxContextResume 0 0 0 現在目標將重新運行,于是你能敲信息到控制臺(如果板卡有一個控制臺設備)并可從主機"ping"目標的網絡接口.

vxworks下bsp制作教程

1 vxworks概述

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

2 BSP的流程

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

流程入圖:

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

RomInit在函數結尾跳入RomStart。

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

VXWORKS文件中的代碼部分:

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

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

1 系統結構及工作原理
1.1 系統組成及特點

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

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

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

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

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

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

    圖片點擊可在新窗口打開查看
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文件系統加載
Tornado的TrueFFS是和VxWorks兼容的一種M-Systems Flite實現方式,它為種類繁多的flash存儲設備提供了統一的塊設備接口,并且具有可重入、線程安全的特點,支持大多數流行的CPU構架。有了Tornado的TrueFFS,應用程序對 flash存儲設備的讀寫就好象它們對擁有MS-DOS文件系統的磁盤設備的操作一樣。
如圖18所示,TrueFFS由核心層(core layer)和三個功能層,翻譯層(translation layer)、MTD層(MTD layer)、socket層(socket layer)組成。
clip_image002
圖18 TrueFFS層結構布局
核心層(Core layer):核心層主要起相互連接其他幾層的功能。同時它也可以進行碎片回收、定時器和其他系統資源的維護。通常WindRiver公司將這部分內容以二進制文件提供。
翻譯層主要實現TrueFFS和dosFs之間的高級交互功能。它也包含了控制flash映射到塊、wear-leveling、碎片回收和數據完整性所需的智能化處理功能。目前有三種不同的翻譯層模塊可供選擇。選擇哪一種層要看你所用的flash介質是采用NOR-based,還是NAND-based,或者SSFDC-based技術而定。
Socket層則是提供TrueFFS和板卡硬件(如flash卡)的接口服務。其名字來源于用戶可以插入flash卡的物理插槽。用來向系統注冊socket設備,檢測設備拔插,硬件寫保護等。后面將詳細講解它的功能。
MTD層(Memory Technology Drivers)功能主要是實現對具體的flash進行讀、寫、擦、ID識別等驅動,并設置與 flash密切相關的一些參數。TrueFFS已經包含了支持Intel、AMD以及samsung部分flash芯片的MTD層驅動。新的芯片需要新的 MTD支持,你可以使用一個標準的接口來加入這些驅動。
以上四部分,我們通常要的工作就是后兩層。
MX29LV160BT芯片上建立TrueFFS文件系統
1.配置相關文件
在此,以Nor Flash MX29LV160BT為例,開發工具為Tornado2.2 for PPC。要在VxWorks映像中包含 TrueFFS文件系統,首先必須在config.h文件中定義INCLUDE_TFFS。這使得VxWorks的初始化代碼調用tffsDrv()來創建管理TrueFFS所需的結構和全局變量,并為所有掛接了的flash設備注冊socket組件驅動。在鏈接的時候,通過解析與tffsDrv()相關聯的符號(symbols)可以將TrueFFS所必需的軟件模塊鏈接到VxWorks映象中。
為了支持TrueFFS,每一個BSP目錄下都必須包含一個sysTffs.c文件。它將TrueFFS所有的層(翻譯層,socket層和MTD 層)鏈接到一起并和VxWorks綁定。因此,必須編輯這個文件并決定哪一種MTD和翻譯層模塊應該包含到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) */
其他無關的MTD driver包含頭都#undef掉,同時定義Flash在系統中的基地址和大小。另外,還必須編輯sysLib.c中的 sysPhysMemDesc[ ]數組,將Flash基地址和大小加入到MMU中,以供將來訪問Flash,否則訪問Flash會失敗。如果BSP目錄下沒有sysTffs.c文件,那么我們可以從其他BSP目錄下拷貝一個即可,然后做上述修改,其他的內容基本可以不用修改。
接下來需要修改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相關MTD驅動加入到makefile中。即:
MACH_EXTRA = mx29lvMtd.o
為了方便我們調試MTD驅動,應該在重新編譯VxWorks映象前將諸如格式化flash、創建TrueFFS塊設備、綁定此塊設備到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驅動
做了上述配置后,進入VxWorks操作系統后,我們在shell上利用tffsShow工具來顯示flash的信息。TffsShow函數最終會調用 MTD驅動中的mx29lvMtdIdentiy( )函數,在mx29lvMtdIdentiy ( )函數主要是通過讀取MX29LV160BT芯片的設備和廠商ID來識別它,然后對FLFlash結構成員進行初始化,最主要的幾個參數是:
type:Flash內存的JEDEC ID號;
erasableBlockSize:Flash內存的擦除塊大小(字節)。設置這個值時應考慮到interleaving。因此,通常通過如下方法來設置它的大小;
Vol.erasableBlockSize = MX29LV_MTD_SECTOR_SIZE * vol.interleaving;
對于MX29LV160BT,MX29LV_MTD_SECTOR_SIZE為64K字節;
chipSize:使用來構建TrueFFS文件系統的flash實際大小(字節);
noOfChips:使用來構建TrueFFS文件系統的flash實際片數;
interleaving:Flash內存交叉因子(interleaving factor)。即擴展數據總線的設備數。比如,一個32位數據總線上,我們可以使用4片8位或2片16位的設備;
map:指向flash內存映射(map)函數。該函數將flash映射到內存區;
read:指向flash內存的讀函數。在MTD驅動識別函數中,這個成員函數已經被初始化為缺省的讀函數。通常情況下,我們不需要再初始化它,否則還需要修改很多相關的函數;
write:指向flash內存的寫函數。這個成員必須初始化,這是我們要做的一個重要工作;
erase:指向flash內存的擦除函數。這個成員必須初始化,這也是我們要做的一個重要工作。
針對FLFlash結構成員,我們所關心的兩個函數就是寫和擦除函數。在mx29lvMtdIdentiy()函數中必須有如下定義:
vol.write = mx29lvWrite;
vol.erase = mx29lvErase;
在mx29lvWrite()函數中主要是實現將數據寫到flash中。首先需要對扇區進行解鎖,然后寫入寫命令,之后才能進行數據的寫入。最后需要判斷數據是否寫完。為了確保操作成功,我們應該在寫完每個數據后進行數據的比較,比較正確后方能進行下一個數據的操作。
在mx29lvErase()函數中主要是實現flash扇區的擦除。如今的flash一般都是按照扇區進行擦除操作的。在擦除操作之前也應該首先對扇區進行解鎖,然后寫擦除建立和扇區擦除命令。擦除成功后,flash中的內容應該是0xffff。所以為了確保成功,我們還是應該在擦除后進行比較,比較正確后方能進入下一個扇區的擦除操作,否則返回擦除錯誤標志。
所以,對于MTD驅動的調試,基本上就是調試寫和擦除兩個函數。在調試過程中,我們可以在這兩個函數相應位置加入打印語句來調試。為了能調試這兩個函數,我們通過在shell上輸入命令tffsDevFormat來格式化flash, tffsDevFormat最終會調用mx29lvErase和mx29lvWrite函數,如果成功就會返回0,否則返回-1。當然也可以調用 tffsDevCreate函數來驗證我們的寫和擦除函數的正確性。圖19說明了tffsDevCreate調用過程。
clip_image004
圖19 tffsDevCreate()調用過程
在shell上利用tffsShow來驗證mx29lvMtdIdentiy。
&gt; tffsShow
0: socket=RFA: type=0x2249, unitSize=0x10000, mediaSize=0x1f0000
value = 49 = 0x31 = "1"
說明已正確識別到MX29LV160BT設備,設備號為0x2249。
建立TFFS設備
1.掛接設備名
MTD驅動調試成功后,我們就可以給flash設備掛接上dos設備名,如下操作:
格式化:
&gt;    tffsDevFormat 
value = 1
&gt;    usrTffsConfig 0,0,”/tffs0”
value = 0
然后通過devs來查看掛接的設備名:
&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/說明掛接設備已經成功,接下來就可以利用dosFs文件系統相關命令來操作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()會調用tffsDevFormat()進行格式化操作,如:
tffsDevFormat(driveNumber, (int)params);
params為tffsDevFormatParams結構體指針,即格式化參數,如:
#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}
而函數usrTffsConfig( )則將tffsDevCreate( )和dosFsDevInit( )進行了合成,是一個快捷函數。
2.從Flash中啟動并下載VxWorks映像
要從flash中下載VxWorks映像,首先需要把VxWorks映像拷貝到flash中,在shell中的操作命令為copy “VxWorks”,“tffs0/VxWorks”,然后修改config.h文件中引導行,如下:
#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.
到此,說明引導成功。flash整個TFFS文件系統就已經建立成功。
在一片FLASH同時裝載BootRom、VxWorks文件
我們將Flash地址映射成兩個地址段,一段用做BootRom,一段用做VxWorks使用,用做BootRom的地址段為0xFFF00000~0xFFF80000,另外一段用做VxWorks的地址段為0x04080000~0x04800000(假設此Flash大小為8M大小),在 0xFFF00000~0xFFF80000地址段寫入BootRom,在0x04080000~0x04800000地址段寫入VxWorks,加電后,PC指針會跳到0xFFF00100地址執行第一條指令,引導BootRom起來并最終VxWorks系統引導成功。實現過程:
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)
]]>
嵌入式語音通信系統中VxWorks BSP的設計實現http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=37&ID=1926&Page=1wangxinxin2010-12-1 9:18:560 引 言

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

  在設計中盡量采用嵌入式開發中的常用器件,以便稍加改動即可應用于其他設計。可以根據實際需要更改系統中語音通道的數目和擴展多路語音共聽功能等。

  1 系統結構及工作原理

  1.1 系統組成及特點

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

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

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

  1.2 功能結構和工作原理

  語音通信處理主板的功能結構如圖1所示。

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


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

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


  1.3 數據處理流程

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

  1.4 QMC通信協議

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

  2 BSP 設計實現

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

  2.1 BSP的定制

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

  2.1.1 config.h文件

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

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


  2.1.2 makefile文件的修改

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

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


  2.1.3 romInit文件修改

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

  內部存儲器映射寄存器IMMR。該寄存器用來標識內部地址空間的基址,將該寄存器設置為“FF000000”。

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

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

  2.1.4 ppcs860.h

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

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

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

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

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

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

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

  2.1.5 驅動程序

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

  (1)提供接收、發送中斷處理函數,調用回調函數完成設備和較高層協議之間的數據傳送。

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

  2.1.6 通道中斷處理過程

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

  2.1.7 數據接收和發送

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

  接收函數由中斷服務例程調用。由于是每接收一幀產生一次中斷,故接收函數也每次處理一幀的數據。數據的接收由接收描述符RxBD控制。當要接收數據時,接收函數首先需要確定RxBD有效;確定沒有問題后,才將數據從接收緩沖區拷貝到接收Ring buffer,并復位RxBD;否則在進行相應錯誤處理后復位RxBD。接收函數流程如圖3所示。

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


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

  2.2 BSP調試方法和遇到的問題

  2.2.1 調試方法

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

  2.2.2 調試中遇到的問題

  (1)系統無法正常復位

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

  (2)網絡無法與外界通信

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

  3 結 語

  該系統在實際測試中話音質量穩定,測試時聲音清晰,沒有串擾和雜音,沒有較大延遲,說明硬件設計正確完備,QMC驅動程序和語音編解碼和IP封裝與解封裝應用程序性能優良。

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

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

 

1 引言

VxWorks是由美國的WindRiver推出的一種嵌入式強實時操作系統,它存在多任務調度的方式,可以管理多個外設,而且它可根據應用程序的需求對操作系統進行裁剪,最大程度的壓縮代碼,實現程序的優化。

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

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

 

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

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

Tornado 2 開發調試環境協議框圖

主機開發(Host Development System)

目標機(Target System)

Tornado 工具

 

WTX協議通信<==========>

Editor Project
Shell Debugger Browser Windview

Target Server

|

Target Agent VxWorks Target Simulator

WDB協議通信
<==========>

Application VxWorks OS VxWorks Target (WDB)Agent

兩個主要兩個協議

WTX協議(Wind River Tool eXchange): 用于開發機內部Tornado工具與Target Server之間通信.

WDB協議(Wind DeBug): 用于主機Target Server與目標機之間的通信.

 

一.基本概念

BSP定義:

Provides VxWorks with primary interface to hardware environment.

作用: 

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

  • 支持VxWorks和硬件驅動通信.

  • 使hardware-dependent 和 hardware-independent在VxWorks系統中很好的結合.

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

  • 目錄target/config/All:

這個目錄下的文件

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

configAll.h:

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

bootInit.c:

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

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

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

  • 目錄target/config/comps/src:

涉及系統核心的components,主要由target/config/All中usrConfig.c中函數調用

  • 目錄target/config/bspname:

包含系統或硬件相關的BSP文件.

Makefile

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

README

BSP發布紀錄,版本,總的文檔

config.h

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

configNet.h

網絡驅動的主要設置文件,主要對END驅動設置.

romInit.s

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

sysALib.s

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

sysLib.c

包含一些系統相關的函數例程,提供了一個board-level的接口,VxWorks和應用程序可以以system-indepent的方式生成.這個文件還能包含目錄target/config/comps/src的驅動.

sysScsi.c

可選文件用于Scsi設備設置和初始化.

sysSerial.c

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

bootrom.hex

ASIC文件包含VxWorks Boot ROM代碼

VxWorks

運行在目標機上,完整的,連結后的VxWorks二進制文件.

VxWorks.sym

完全的,連結后帶有符號表的VxWorks二進制文件

VxWorks.st

完全的,連結后,standalone,帶有符號表的VxWorks二進制文件

 

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

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

  • BSP被設置包括以下驅動:

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

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

  • BSP默認的download VxWorks RAM image方式是從ethernet.

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

    VxWorks Image的種類:

  • Loadable images.

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

 

]]>
主站蜘蛛池模板: 欧美成人午夜不卡在线视频 | 国产自在自线午夜精品视频 | 国产精品一在线观看 | 一a一级片 | 国内久久久久影院精品 | 日韩中文字幕在线观看视频 | 在线观看亚洲成人 | 精品国产自在现线看久久 | 亚洲午夜精品一级在线播放放 | 亚洲无线一二三区2021 | 日本韩国三级在线 | 黄色三级视频 | 久久www免费人成精品 | 免费观看成年人视频 | 国产亚洲精品成人一区看片 | 久久国产网站 | 97在线视频免费观看 | 亚洲高清国产拍精品影院 | 九九精品免费视频 | 国产精品久久久久久久9999 | 久草在线看 | 亚欧在线观看 | 亚洲一级特黄特黄的大片 | 久久频这里精品香蕉久久 | 成人深夜福利在线播放不卡 | 欧美一级网站 | 久久频这里精品99香蕉久网址 | 欧美精品毛片 | 一及黄色 | 深夜爽爽爽gif福利免费 | 欧美成人猛男性色生活 | 亚洲精品日韩中文字幕久久久 | 一本色道久久综合亚洲精品加 | 国产成人高清精品免费5388密 | 精品国产一二三区在线影院 | 国产一区二区三区视频在线观看 | 国内自拍第五一页 | 久久五| 台湾50部三级 | 美女张开腿双腿让男人桶 | 国产成人禁片免费观看视频 |