VxWorks的一個(gè)優(yōu)勢(shì)就是它為應(yīng)用代碼提供了高度的架構(gòu)和硬件獨(dú)立性。這種可移植性得益于VxWorks的模塊化設(shè)計(jì), 而這種模塊化設(shè)計(jì)將所有硬件相關(guān)的功能函數(shù)分離到了一套稱為板級(jí)支持包(BSP)的庫(kù)中。BSP庫(kù)為所有開發(fā)板的硬件相關(guān)功能提供了一個(gè)一致的接口。 這些功能包括硬件初始化, 中斷處理, 中斷產(chǎn)生, 硬時(shí)鐘和Timer管理, 本地和總線內(nèi)存空間的映射, 以及內(nèi)存尺寸控制等等。
總的來(lái)說(shuō), 有如下幾種類型的VxWorks移植:
A. 宿主移植: 將Tornado和VxWorks的開發(fā)能力移植到一個(gè)以前不支持的宿主機(jī)上。
B. 架構(gòu)移植: 將VxWorks 和Tornado 調(diào)試器移植到一個(gè)以前不支持的目標(biāo)處理器或架構(gòu)上。
C. 板級(jí)移植: 將VxWorks 移植到一個(gè)新的目標(biāo)板上, 在此之前應(yīng)該已經(jīng)有了宿主移植和架構(gòu)移植。
D. 升級(jí)pre-Tornado BSPs 使之工作于Tornado 平臺(tái)。
E. 移植一個(gè)可選的部件。
宿主移植和架構(gòu)移植需要訪問全部的VxWorks源代碼, 超出了本文的范圍。 板級(jí)移植是我們要討論的重點(diǎn), 板級(jí)移植只需要訪問VxWorks中硬件相關(guān)的那部分源代碼(BSP)和調(diào)試器。
多年以來(lái), 風(fēng)河公司(Wind River)能夠提供給客戶各種BSP, 然而, 隨著許多新的CPU板的大批流行, 尤其是許多客戶自己設(shè)計(jì)的CPU板的大量出現(xiàn), 使得風(fēng)河已經(jīng)不能夠跟上市場(chǎng)對(duì)于新的BSP的需求。
本書就是為了解決這個(gè)問題, 本書旨在幫住你創(chuàng)建、測(cè)試新的BSP、部件和項(xiàng)目。 移植VxWorks到一個(gè)新的板子上是一件非常有挑戰(zhàn)性的工作, 尤其是只有在移植完成后那些VxWorks開發(fā)工具才能夠被使用的時(shí)候。根據(jù)本書的策略可以使移植變得簡(jiǎn)單一點(diǎn)。本書提供了移植策略和系統(tǒng)元件如何相互作用的詳細(xì)描述, 本書也包括了基于Tornado2.0來(lái)創(chuàng)建和發(fā)布部件或項(xiàng)目所需要的 技術(shù)信息。
本書所涉及的BSP 工具集與Tornado 2.0 或更高版本兼容, 升級(jí)早期的BSP 使之工作于Tornado 2.0 是相當(dāng)容易的, 參考A。升級(jí)一個(gè)BSP到Tornado 下。
1.1 Tornado 2.0 的新特性介紹:
SCSI 1 廢止: 對(duì)于SCSI-1 驅(qū)動(dòng)和庫(kù)的支持已經(jīng)被廢止, 雖然這些庫(kù)仍然被包括在Tornado2.0 中,但是它們已經(jīng)被列為廢除并且不會(huì)被包括在將來(lái)的版本中。
宏 TYCO5_2被刪除:TYCO5_2這個(gè)宏不再被支持, 客戶應(yīng)當(dāng)使用Tornado 2.0 下的SIO驅(qū)動(dòng) 。
BSP封裝被變更: 參考10。2 BSP封裝, P???頁(yè)以獲得更詳細(xì)的關(guān)于封裝要求的描述。 參考O。BSP產(chǎn)品內(nèi)容以獲得一個(gè)典型產(chǎn)品內(nèi)容的的快速總結(jié)。
文檔: 所有的在線文檔現(xiàn)在是以HTML格式提供, 在系統(tǒng)中包含了一個(gè)稱為refgen的工具,用來(lái)從現(xiàn)存的nroff輸入產(chǎn)生HTML頁(yè)。
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ū)動(dòng)程序。 VxWorks網(wǎng)絡(luò)協(xié)議棧是基于BSD 44 協(xié)議棧的。在BSP中 BSD44 和 END 驅(qū)動(dòng)都可被使用。END驅(qū)動(dòng)是BSP的缺省驅(qū)動(dòng)。
新的驅(qū)動(dòng): 許多新的END網(wǎng)絡(luò)驅(qū)動(dòng)已經(jīng)被加入到驅(qū)動(dòng)產(chǎn)品中來(lái)以便使盡可能多的產(chǎn)品擁有至少一個(gè)可用的END 驅(qū)動(dòng)。
集成的模擬器: Tornado 2.0包括一個(gè)集成的模擬器, 它允許開發(fā)人員在硬件環(huán)境就續(xù)以前就能夠開始應(yīng)用的開發(fā)。
集成的WindView:Tornado 2.0包括一個(gè)集成的WindView 工具, 用來(lái)檢查運(yùn)行時(shí)的行為, 參考 <<WindView User’s Guide>> 來(lái)了解更多關(guān)于WindView的特性。
VTS 測(cè)試更新: VTS(驗(yàn)證測(cè)試套件)有了微小的升級(jí)以便使它能夠正確地工作于target shell 的新的虛擬輸入輸出特性。
SCSI 測(cè)試套件: SCSI性能測(cè)試套件在以前的移植工具中被忽略了, 現(xiàn)在可用。
ROM_WARM_ADRS 這個(gè)新宏被引入到BSP模板和一些BSP中, 它代表進(jìn)入到boot ROM 代碼的熱啟動(dòng)入口, 它被用來(lái)去除基于不同CPU家族所手工計(jì)算出來(lái)的入口地址。 正常情況下, ROM_WARM_ADRS是基于一個(gè)來(lái)自于ROM_TEXT_ADRS的偏移, 例如:
#define ROM_WARM_ADRS (ROM_TEXT_ADRS + 8)
新的SIO IOCTLs: 新的SIO IOCTL 代碼用來(lái)支持modem控制線路。 IOCTLs 例如SIO_OPEN和SIO_HUP當(dāng)設(shè)備被打開和關(guān)閉時(shí)通知驅(qū)動(dòng)程序。 而SIO_HW_OPTS_SET 和SIO_HW_OPTS_GET允許用戶管理字符長(zhǎng)度、奇偶、停止位和modem 控制線路。 可選位 CLOCAL 禁止了modem 控制線路在驅(qū)動(dòng)程序中的使用, 為了保持向后兼容性, CLOCAL選項(xiàng)在Wind River BSP中默認(rèn)是選擇的。
Target.txt 文件被刪除: 文本格式的target.nr 文件(為Windows 宿主用戶而產(chǎn)生)已經(jīng)被刪除了, 目前UNIX 和WINDOWS平臺(tái)均使用瀏覽器來(lái)閱讀HTML格式的文檔。 宿主工具refgen取得nroff的輸入并且產(chǎn)生HTML的輸出。
1.2 進(jìn)行BSP開發(fā)的一些先決條件:
首先, 你應(yīng)當(dāng)有底層C和匯編語(yǔ)言的知識(shí), 熟悉設(shè)備驅(qū)動(dòng), 熟悉中斷, 最好具有同硬件接口的軟件開發(fā)經(jīng)驗(yàn), 另外, 你應(yīng)當(dāng)熟悉Tornado開發(fā)工具或者至少已經(jīng)讀過(guò)了Tornado用戶指南。最后, 你應(yīng)當(dāng)有一個(gè)基于你的目標(biāo)系統(tǒng)上所用的CPU的參考BSP, 這可以節(jié)省你的大量時(shí)間。
你也應(yīng)當(dāng)有一個(gè)適用于你的項(xiàng)目架構(gòu)的模板BSP,以及模板驅(qū)動(dòng)程序, 大部分客戶購(gòu)買一個(gè)或多個(gè)設(shè)備驅(qū)動(dòng)程序的源代碼。