VxWorks操作系統是美國WindRiver公司於1983年設計開發的一種嵌入式實操作系統 windriv vxwork時操作系統(RTOS),它以其良好的可靠性和卓越的實時性被廣操作系統可靠性卓越泛地應用在通信、軍事、航空、航天等高精尖技術及實時高精尖航空應用性要求極高的領域中,如衛星通訊、軍事演習、彈道制導制導演習領域、飛機導航等。在美國的 F-16、FA-18 戰斗機、B-2隱形轟戰斗機隱形飛機炸機和愛國者導彈上,甚至連1997年4月在火星表面登陸的愛國者導彈登陸火星探測器上也使用到了VxWorks。VxWorks原先對中國區禁止銷售,vxwork 探測器使用自解禁以來,在我們的軍事、通信、工業控制等領域得到得到工業領域了非常廣泛的應用。
VxWorks的實時性體現在能於限定的時間內執行完所規定的功能vxwork 體現規定,並能在限定的時間內對外部的異步事件作出響應。因此外部事件異步,實時性系統主要應用於過程控制、數據采集、通信、多數據主要應用媒體信息處理等對時間敏感的場合。本文將對這個操作系操作媒體本文統進行一個入門級的、全面的介紹。為力求展示其全貌,力求展示進行全文共分五章:
(1)搭建VxWorks嵌入式開發環境;
(2)簡要介紹VxWorks的基本組成,內核的基本結構;
(3)概述VxWorks板級支持包(BSP)的概念及VxWorks的啟動過程;
(4)介紹VxWorks設備驅動的架構及編寫方法;
(5)指明VxWorks應用開發的思路,任務調度及任務同步、中斷與vxwork 開發調度任務的同步機制。
以上各章中將貫穿着許多實例,由於本文定位於入門級教本文許多定位程,所以文中的實例都將十分簡單。下面我們進入第一章下面進入實例內容的講解。
如圖1,嵌入式系統的調試方法一般為通過PC(宿主機)上的一般宿主方法集成開發環境交叉編譯針對特定電路板(目標機)的程序,然電路板環境開發后將程序通過目標板的JTAG、串口或網口等途徑下載到目標下載途徑通過板上運行。因此,為了構造一個嵌入式系統的學習環境,環境學習構造擁有一塊包含CPU、存儲器及I/O電路(構造計算機系統)的目計算機存儲器構造標電路板往往是必要的。雖然許多集成開發環境附帶模擬電路板雖然環境軟件,但僅限於指令集的模擬,均無法模擬物理的目標機限於物理軟件硬件平台,因而在其上只能進行應用程序的象征性模擬開象征性平台應用發。但是,並非所有人都能擁有一塊物理的電路板。在這電路板並非物理種情況下,我們如何構造一個模擬的開發環境,其學習效環境學習開發果就如同擁有完全真實的電路板一樣呢?本文試圖解答此問電路板擁有本文題,主體內容包括四個方面:
(1) 利用VMware等軟件模擬真實的目標機;
(2) 構建VMware虛擬PC上VxWorks BSP,建立Bootrom和OS映像;
(3) 修改Tornado相關設置,連接宿主機與目標機,建立調試通道tornado 宿主建立;
(4) 寫一個簡單的應用程序並下載到目標系統運行。
圖1 嵌入式系統的調試
本章工作的最終目標為:
(1)VxWorks在VMware啟動成功並順利運行,如圖2;
圖2 在VMware中運行的VxWorks
(2)可在Tornado上針對目標板編譯程序並進行調試,如圖3。
圖3 與目標機建立調試通道的Tornado
1. 模擬目標機
PC也具有目標機的所有特點,實際上,我們可以把PC作為實際上具有所有嵌入式系統的目標機,從而構造如圖4所示的開發模型:構造開發系統
圖4 PC作為目標機
很遺憾,這種方法實際上非常麻煩,同時開動兩台PC進行實際上開動這種調試將使你和你的室友飽受折磨,既然他如此地熱切於游飽受既然室友戲和上網。因此,我們可以借助VMware來在本機上虛擬出另一vmware 我們可以PC。
VMware的確是天才的作品!在同一PC上,利用VMware幾乎可以安裝所vmware 幾乎利用有的操作系統,而且操作系統之間的切換不需要重新啟動操作系統操作需要電腦。VM的意義是Virtual Machine,即虛擬出一個邏輯的電腦,它可virtual machin 邏輯以提供基於Intel CPU的虛擬PC系統環境,包括CPU、內存、BIOS、intel 環境包括硬盤和其他外圍硬件設備。
下面我們講解用VMware來建立一台虛擬PC的步驟:
(1)下載並安裝VMware;
(2)使用VMware向導建立一個針對VxWorks的虛擬機;
此步驟中注意在操作系統中選擇“other”,如圖5:
由於目標機最終通過軟盤啟動,因此要求你的電腦具有軟具有通過啟動驅。很遺憾,當年日常使用的軟盤如今成了古董,很少再使用日常如今有電腦配備軟驅。因此,我們再來制造一個假冒偽劣產品假冒偽劣軟驅配備,虛擬一個軟驅。又一個天才的工具軟件RamDiskNT為我們提供了ramdisknt 工具軟驅這一便利,圖6演示了用RamDiskNT虛擬一個1.44M軟盤的方法。ramdisknt 方法演示
僅僅虛擬一個軟驅是不夠的,把這個軟驅添加到我們建立軟驅建立不夠的虛擬機中才算修成正果,圖7演示了添加軟驅后的虛擬軟驅演示修成機硬件設置。
圖7 包含軟驅的虛擬機
1.1 Tornado2.2 for pcPentium的安裝和使用流程
下載地址http://www.verycd.com/topics/80328/
一、WINDRIVER.TORNADO.V2.2.FOR.COLDFIRE
CD1= Tornado 2.2/VxWorks 5.5 for ColdFire
(DISK_ID: TDK-14627-ZC-01)
CD2= BSPs/Drivers for VxWorks 5.5: ColdFire
(DISK_ID: TDK-14637-ZC-01)
軟件大小:347M
安裝方法:1)首先安裝虛擬光驅軟件DAEMON3.2
2)分別MOUNT 文件夾CD1和CD2下后綴名為BIN的文件
3)自動安裝后,輸入序列號如下:
CD1: A7K8B-MbE7p-9rKfE-Gz9aP-bE59C
CD2: A7K9e-Rb9Cp-FNB79-gzbdd-F999C
4)拷貝CRACK目錄下的license.dat 到c:\\flexlm 目錄
如果沒有這個目錄,自己建一個。設置如下環境變量:
LM_LICENSE_FILE = c:\\flexlm\\license.dat
二、WINDRIVER.TORNADO.V2.2.FOR.SUPERH
CD1= Tornado 2.2/VxWorks 5.5 for SuperH
(DISK_ID: TDK-14625-ZC-01)
CD2= BSPs/Drivers for VxWorks 5.5: SuperH
(DISK_ID: TDK-14635-ZC-01)
軟件大小:512M
安裝方法:1)首先安裝虛擬光驅軟件DAEMON3.2
2)分別MOUNT 文件夾CD1和CD2下后綴名為BIN的文件
3)自動安裝后,輸入序列號如下:
CD1: dI&hi-qM6Ip-9rBb3-GzhsN-bE59g
CD2: BGphe-MbE7p-8rKf3-gzDPB-F999C
4)拷貝CRACK目錄下的license.dat 到c:\\flexlm 目錄
如果沒有這個目錄,自己建一個。設置如下環境變量:
LM_LICENSE_FILE = c:\\flexlm\\license.dat
三、WINDRIVER.TORNADO.V2.2.FOR.XSCALE
CD1= Tornado 2.2/VxWorks 5.5 for SA/XScale
(DISK_ID: TDK-14622-ZC-01)
CD2= BSPs/Drivers for VxWorks 5.5: SA/XScale
(DISK_ID: TDK-14632-ZC-01)
軟件大小:464M
安裝方法:1)首先安裝虛擬光驅軟件DAEMON3.2
2)分別MOUNT 文件夾CD1和CD2下后綴名為BIN的文件
3)自動安裝后,輸入序列號如下:
CD1: dI&ge-Md37K-gPNfE-5phaS-bE59g
CD2: B7pge-Md3GK-gsQbE-gzDdB-F999C
4)拷貝CRACK目錄下的license.dat 到c:\\flexlm 目錄,
如果沒有這個目錄,自己建一個。設置如下環境變量:
LM_LICENSE_FILE = c:\\flexlm\\license.dat
四、WINDRIVER.TORNADO.V2.2.FOR.PENTIUM
CD1= Tornado 2.2/VxWorks 5.5 for PENTIUM
(DISK_ID: TDK-14611-ZC-01)
CD2= BSPs/Drivers for VxWorks 5.5: PENTIUM
(DISK_ID: TDK-14621-ZC-01)
軟件大小:328M
安裝方法:1)首先安裝虛擬光驅軟件DAEMON3.2
2)分別MOUNT 文件夾CD1和CD2下后綴名為BIN的文件
3)自動安裝后,輸入序列號如下:
CD1: cAQ8i-qP2I&-g$vT6-3&gjw-bEk9g
CD2: A7KbB-Rd37p-hNFBE-kzgaT-b9gpC
4)拷貝CRACK目錄下的license.dat 到c:\\flexlm 目錄,
如果沒有這個目錄,自己建一個。設置如下環境變量:
LM_LICENSE_FILE = c:\\flexlm\\license.dat
五、WINDRIVER.TORNADO.V2.2.FOR.68K
CD1= Tornado 2.2/VxWorks 5.5 for 68K
(DISK_ID: TDK-14626-ZC-01)
CD2= BSPs/Drivers for VxWorks 5.5: 68K
(DISK_ID: TDK-14636-ZC-01)
軟件大小:358M
安裝方法:1)首先安裝虛擬光驅軟件DAEMON3.2
2)分別MOUNT 文件夾CD1和CD2下后綴名為BIN的文件
3)自動安裝后,輸入序列號如下:
CD1: cAQ8E-uM6I&-8jsP6-AtgjP-bEk9g
CD2: AGK8e-RbE7p-8abA9-9UDdd-F9g9C
4)拷貝CRACK目錄下的license.dat 到c:\\flexlm 目錄,
如果沒有這個目錄,自己建一個。設置如下環境變量:
LM_LICENSE_FILE = c:\\flexlm\\license.dat
六、WINDRIVER.TORNADO.V2.2.FOR.ARM
CD1= Tornado 2.2/VxWorks 5.5 for ARM
(DISK_ID: TDK-14624-ZC-00)
CD2= BSPs/Drivers for VxWorks 5.5: ARM
(DISK_ID: TDK-14634-ZC-00)
軟件大小:500M
安裝方法:1)首先安裝虛擬光驅軟件DAEMON3.2
2)分別MOUNT 文件夾CD1和CD2下后綴名為BIN的文件
3)自動安裝后,輸入序列號如下:
CD1: x#yyo-YVXT#-nozVy-wwoyx-VXy#o-UbFBF
CD2: AGpge-QbEGp-haNb3-kUhsS-bEkpC
4)拷貝CRACK目錄下的license.dat 到c:\\flexlm 目錄,
如果沒有這個目錄,自己建一個。設置如下環境變量:
LM_LICENSE_FILE = c:\\flexlm\\license.dat
七、WINDRIVER.TORNADO.V2.2.FOR.POWERPC
CD1= Tornado 2.2/VxWorks 5.5 for PowerPC
(DISK_ID: TDK-14620-ZC-01)
CD2= BSPs/Drivers for VxWorks 5.5: PowerPC
(DISK_ID: TDK-14630-ZC-01)
軟件大小:671M
安裝方法:1)首先安裝虛擬光驅軟件DAEMON3.2
2)分別MOUNT 文件夾CD1和CD2下后綴名為BIN的文件
3)自動安裝后,輸入序列號如下:
CD1: TcS5i-Zq%J+-4XVu#-3&bjv-M63&g
CD2: TJS9i-uK6I&-9XsR2-AY8jv-M6n&g
4)拷貝CRACK目錄下的license.dat 到c:\\flexlm 目錄,
如果沒有這個目錄,自己建一個。設置如下環境變量:
LM_LICENSE_FILE = c:\\flexlm\\license.dat
八、WINDRIVER.TORNADO.V2.0.FOR.X86
CD1=Tornado 2.0 for Intel X86
TDK-13127-zc-00(ap)
CD2= Tornado 2.0 for Intel X86
TDK-12835-ZC-01
軟件大小:359M
安裝方法:1)首先安裝虛擬光驅軟件DAEMON3.2
2)分別MOUNT 文件夾CD1和CD2下后綴名為ISO的文件
3)自動安裝后,輸入序列號如下:
CD1: B7KDB-7B9Cp-DBbA9-9UKNb-79CFF
CD2: FCKCi-Kd67p-hdcS9-iKbNf-797KF
4)安裝補丁SPR62517
5) 拷貝光盤根目錄下TGTSVR.EXE覆蓋安裝后生成的同一個文件
九、WINDRIVER.PLATFORM.ID.V1.0
CD1= Tornado 2.2/VxWorks 5.5 for Pentium
(DISK_ID: TDK-14621-ZC-01)
CD2= BSPs/Drivers for VxWorks 5.5.1
(DISK_ID: TDK-14631-ZC-02)
CD3= WindML 3.0
(DISK_ID: TDK-14774-ZC-00)
CD4= PLATFORM ID Components
(DISK_ID: TDK-14915-ZC-01)
CD5= VxWorks 5.5 Core O/S Source Products
(DISK_ID: TDK-14628-ZC-01)
CD6= SNiFF+ 4.1.1
軟件大小:1010M
安裝方法:1)首先安裝虛擬光驅軟件DAEMON3.2
2)分別MOUNT 文件夾CD1到CD6下后綴名為BIN的文件
3)自動安裝后,輸入序列號如下:
CD1: dAQ8i-UM2I&-gisT2-nQ9Xw-bEkpg
CD2: B7KFB-Kb3Gp-gBfB3-5U8sP-bE9pC
CD3: B7KFB-7F5Cp-CBdB5-gUKPc-F99pC
CD4: BFKFB-7F5Cp-DBdA5-FKKNf-79gpF
CD5: B7K8e-KF57p-DdfA5-GU8Pc-F999C
4)拷貝CRACK目錄下的license.dat 到c:\\flexlm 目錄,
如果沒有這個目錄,自己建一個。設置如下環境變量:
LM_LICENSE_FILE = c:\\flexlm\\license.dat
2.構造BSP
2.1下載和編譯網卡驅動
VMware為運行於其上的操作系統提供虛擬網卡支持,該網卡類操作系統 vmware 運行型即為AMD的PC-NET,在Tornado開發包中已經包含了該類型網卡的tornado 開發已經驅動程序,但經過測試,在VMware環境中該驅動無法正常工作vmware 經過環境,所以可從AMD的網站上下載最新的驅動程序。下載得到的得到下載最新是一個可執行的安裝程序,運行該程序將得到一個壓縮包得到運行安裝和一個幫助文件,按照該幫助的要求,將壓縮包直接釋放釋放直接要求到Tornado目錄下。如果提示是否允許覆蓋文件,則選擇允許。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目錄,並將上一步生成的文pentium tornado common件ln97xend.o復制到此目錄下。備份此目錄下的文件libdrv.a;
(4)運行命令arpentium -d libdrv.a ln97xEnd.o,刪除libdrv.a中原有的ln97xEndarpentium libdrv 命令模塊;
(5)運行命令arpentium -ra iOlicomEnd.o libdrv.a ln97xEnd.o將我們剛剛創建的新lniolicomend arpentium libdrv97xEnd模塊添加進去。
2.2修改配置文件
我們要修改編譯VxWorks的配置頭文件Config.h中定義的一些參數,config vxwork 參數使編譯出來的系統引導程序和VxWorks的映象符合我們的要求;同vxwork 編譯映象時還要修改sysLn97xEnd.c這個文件,以使系統的網絡功能正常sysln 正常 xend運行。
(1)定位到目錄C:\tornado2.2\target\config\pcPentium並打開該目錄下Config.h文件;
(2)查找到定義DEFAULT_BOOT_LINE宏的地方,修改預處理條件CPU == PENTIUM分支default pentium 預處理下的定義如下:
#define DEFAULT_BOOT_LINE \
"lnPci(0,0)your_host_name:e:\\vxWorks h=192.168.80.100 e=192.168.80.80 u=target pw=target tn=target"
其中:
- lnPci(0,0)指定了使用第0個網卡和第0個處理器,lnPci這個標處理器 lnpci 使用識會因為使用的驅動程序不同而有所不同,但這里用lnPci就有所不同 lnpci 使用可以了;
- host指定你的主機的名字,使用host就可以;
- e:\\vxWorks指定了VxWorks映象下載的完整路徑(后面會有說明);
- h=192.168.80.169是宿主機的IP地址,可以根據實際情況修改;
- e=192.168.80.254是目標機的IP地址,可以根據實際情況修改;
- u=target指定了FTP服務器的用戶名,這個FTP就是用來下載VxWorks映服務器 target vxwork象的;
- pw=target是FTP服務器與用戶名target對應的密碼;
- tn=target指定目標機的名字,任意指定即可。
(3)指定網卡驅動程序
首先定位到“Network driver options”這段文字,保證INCLUDE_END和INCLUDE_LN_97X_ENDnetwork includ driver這兩個宏處於定義狀態(define),其他的宏都處於未定義狀態(undefdefin undef 其他),即:
以下是引用片段:
#define INCLUDE_END
#undef INCLUDE_DEC21X40_END
#undef INCLUDE_EL_3C90X_END
#undef INCLUDE_ELT_3C509_END
#undef INCLUDE_ENE_END
#undef INCLUDE_FEI_END
#undef INCLUDE_GEI8254X_END
#define INCLUDE_LN_97X_END
#undef INCLUDE_ULTRA_END
#undef INCLUDE_BSD
#undef INCLUDE_EEX
#undef INCLUDE_EEX32
#undef INCLUDE_ELC
#undef INCLUDE_ESMC
(4)包含PC_CONSOLE
缺省情況下,VxWorks系統是不接受外部輸入設備(如鍵盤)的輸入vxwork 輸入外部,也不向外部輸出設備(如顯示器)輸出數據。為了便於調試顯示器數據外部,我們必須改變它的這種缺省狀態,包含對PC控制台的支這種控制包含持。查找定位宏INCLUDE_PC_CONSOLE,保證其處於定義狀態(define)即可,即consol includ defin:
以下是引用片段:
#define INCLUDE_PC_CONSOLE
#ifdef INCLUDE_PC_CONSOLE
# define PC_CONSOLE (0)
# define N_VIRTUAL_CONSOLES (2)
#endif
(5)修改sysLn97xEnd.c
打開C:\tornado2.2\target\config\pcPentium目錄下的sysLn97xEnd.c文件,先定位到“pcpentium tornado targetmemory-mapped IO base”這段文字,然后將其前面的參數由pciRsrc[endUnit].bar[1]修pcirsrc endunit memori改為NONE,保存即可,即:
以下是引用片段:
sprintf (paramStr, paramTemplate,
endUnit,
NONE,
pciRsrc[endUnit].bar[0],
PCI2DRAM_BASE_ADRS,
pciRsrc[endUnit].irqvec,
pciRsrc[endUnit].irq,
LN97X_CSR3_VALUE,
LN97X_OFFS_VALUE,
LN97X_RSVD_FLAGS,
& ln97xStrDesc[typeIdx]
);
2.3 編譯Bootrom和VxWorks映像
編譯Bootrom
打開Tornado開發工具,在Build菜單下選擇Build Boot ROM,選擇BSP為pcPentium,pcpentium tornado buildimage類型為bootrom,工具為gnu,如圖8。點擊OK,Bootrom就會編譯。bootrom 工具編譯
編譯VxWorks映像
編譯生成bootrom后,還要創建一個VxWorks映象(image),也就是VxWorks操作系bootrom vxwork 操作統本身的代碼,步驟為:
(1) 創建一個“bootable VxWorks image”的工程,BSP 選擇pentium;
(2) 選擇需要的VxWorks組件
如圖10,在這個例子中我們需要包括兩個重要的組件:Telnettelnet 需要重要 server 和 Target shell。前者使我們可以通過Telnet協議登錄到VxWorks操作系統操作系統 target server中;后者則可以讓我們通過命令行控制VxWorks系統。另外,需要vxwork 需要命令把所有C 相關的選項都包含進去。
完成選擇后,即可開始編譯程序。到此我們已經生成了VxWorks編譯程序 vxwork 即可的系統引導程序和運行時的代碼映象。在每次修改完系統運行映象系統的配置信息(如:config.h)后,都要重新創建一個工程來編譯VxWorksconfig vxwork 重新映象。將生成的名為“vxworks”的文件復制到D:\下。這個路徑vxwork 映象路徑是由上面我們所設置的DEFAULT_BOOT_LINE宏中的路徑參數決定的,必default 參數 boot須保持二者一致。
2.4 創建引導軟盤
由於目標機從軟盤啟動,我們需要制作VxWorks引導磁盤,用於vxwork 需要制作引導VxWorks操作系統映象。定位到C:\tornado2.2\target\config\pcPentium目錄,插入pcpentium 操作系統 tornado已經格式化好的軟盤,運行:
mkboot a: bootrom
該命令將在軟盤上建立VxWorks系統引導分區,並將引導程序復vxwork 命令建立制到軟盤上。
3.建立調試環境
3.1配置FTP服務器
宿主機上的FTP服務器用於在系統成功引導后,下載VxWorks的運服務器 vxwork 下載行時映象,最好使用Tornado開發環境自帶的FTP服務軟件。
如圖11,打開Tornado FTP Server,選擇“Security”菜單下的“Users/Rights”子菜tornado server secur單,創建User Name為“target”,修改“Home Directory”為“e:\”(即DEFAULT_BOOT_LINEdirectori default target參數中所指定VxWorks映像目錄),修改用戶名為“target”,對應密target vxwork 參數碼為“target”,點擊“Done”按鈕完成修改,FTP服務就啟動了target 修改啟動。
為了便於觀察引導程序是否從FTP上下載了VxWorks映像,最好打vxwork 是否程序開FTP Server的日志功能。選擇“Logging”菜單下的“Logging Options”子菜單server option 日志,其中除了“Winsock Calls”外,讓其他選項全都處於開啟狀態。winsock 開啟 call保持FTP Server窗口處於打開狀態,即保證FTP服務器處於運行狀服務器 server 運行態。
虛擬機從軟盤啟動,接下來會下載服務器上的e:\vxworks映像,接下來服務器 vxwork服務器的FTP會有相關的log,如圖12:
圖12 FTP服務器
3.2 配置target server
如圖13,打開您的Tornado開發環境,選擇“Tools->Target Server->Configure”菜單,configur tornado target在“Description”中任意填寫一個名字,這里是“net00”;在“Available Backdescript avail 填寫”中選擇“wdbrpc”,並在下面的IP地址框中填寫目標機的IPwdbrpc 填寫下面地址,這里是“192.168.80.80”(由DEFAULT_BOOT_LINE參數決定);將“Target Server Propertiesproperti default target”下拉框更改至“Core File and Symbols”,並在“File Path”一項中選擇symbol 更改 file您的映象的完整路徑,這里是“D:\VxWorks”(由DEFAULT_BOOT_LINE參數決定default vxwork 參數)。
圖13 配置Target Server
完成以上兩項配置,如果目標機已經啟動,點擊“Launch”按launch 配置已經鈕,就可以啟動Target Server了。
再回到Tornado開發環境,在工具條上的Target Server下拉框列表中選擇tornado target server“192.168.80.80@host”。這時您會發現工具條中一些原先處於“工具發現這時禁用”狀態的工具按鈕,現在都已經處於“激活”狀態了工具禁用已經。
試一試,我們打開TShell,並運行“i”命令察看目標機上當tshell 命令察看前運行的任務,效果如圖14:
圖14 在TShell中運行命令