boot程式的主要功能是引導vxworks 核心,是以boot程式需要知道vxworks的核心存放在何處,通過什麼手段去擷取。在vxworks預設的boot程式裡有一條内建的default boot line,它指明了獲得vxworks核心的途徑,在boot程式啟動時,它先尋找NVRAM裡面有無boot line,如沒有,則等裡的内容添入BOOT_PARAMS結構裡,然後,啟動程式和vxworks核心利用此結構尋找啟動參數。
typedef struct
{
char bootDev [BOOT_DEV_LEN];
char hostName [BOOT_HOST_LEN];
char targetName [BOOT_HOST_LEN];
char ead [BOOT_ADDR_LEN];
char bad [BOOT_ADDR_LEN];
char had [BOOT_ADDR_LEN];
char gad [BOOT_ADDR_LEN];
char bootFile [BOOT_FILE_LEN];
char startupScript [BOOT_FILE_LEN];
char usr [BOOT_USR_LEN];
char passwd [BOOT_PASSWORD_LEN];
char other [BOOT_OTHER_LEN];
int procNum;
int unitNum;
int flags;
} BOOT_PARAMS;
下面看boot line結構:
bootDev(unitNum,procNum) hostname:bootFile e=ead b=bad h=had g=gad u=username pw=password f=flags tn=targetName s=startupScript o=other
bootDev / 裝置名,軟碟:fd; 硬碟:ATA;網絡要根據網卡的類型來做:NE2000及其相容網卡為ENE,3COM以太網卡為ELT,Intel網卡為EEX,Intel82559網卡為fei ,3C905B PCI網卡為elPci。
unitNum / 裝置單元号,一般指為0
procnum / cpu的處理器号,一般為0
flags / 辨別,十六進制數,意義如下:
0x01: 關閉對處理器0的系統控制
0x02: 将局部symbols和全局symbols裝入目标機symbols表
0x04: 禁止自動啟動(即由使用者輸入boot line)
0x08: 快速boot(不計數等待使用者輸入)
0x40: 使用BOOTP or DHCP client
0x80: 使用TFTP擷取image,否則使用RSH或FTP,用FTP時pw不為空
0x100: 使目标機登記為一個代理ARP client
ead / 目标機ip位址,此值如為空,網絡接口不被幫定
bad / 背闆接口
had / 主機ip位址
gad / 網關位址,如果主機和目标機不在一個局網裡,需要
bootFile: / 存放vxworks image的路徑
usr: / 使用FTP或RSH時的使用者名
passwd: / ftp password
other: / 從網絡啟動時此值可為空,當從軟碟或硬碟啟動時,如果此值為你的網絡裝置,boot會為你綁定網絡裝置
hostname: / 主機名,任意
targetName:/目标機名
startupScript: / 腳本名,在boot以後的target shell裡執行
在boot line中,e,b,h等等參數都不要求次序,你也可以讓它為空值,如”pw= ”就是指密碼為空參數,
看一個例子:
ene(0,0) lijun:c:/tornado/target/config/pc486/vxworks e="10".132.3.40 h="10".132.3.37 u="x86" pw="apue" tn="rod"
在上例中,網卡為NE2000及相容網卡,主機名為lijun ,vxworks image存放在c:/tornado/target/config/pc486這個目錄下,目标機的網絡位址為10.132.3.40 主機的網絡位址為10.132.3.37,通過FTP伺服器下載下傳,使用者名為x86,密碼為apue,目标機名為rod
再看一個例子:
fd="0",0(0,0) lijun:/fd0/vxWorks e="10".132.3.40 h="10".132.3.37 u="x86" o="ene"
這個例子裡面,用的是軟碟啟動vxworks ,在軟碟做好boot 後,還需要把vxworks image拷入軟碟,在boot 起來以後,引導程式會在軟碟裡尋找vxworks,并把它啟動。
軟碟用fd0表示,硬碟用ATA(0,0),最後的參數o="ene" 表示網絡裝置是NE2000網卡,并将之和ip位址綁定。
上面是有關boot的一些總述。
在vxworks裡面,針對每一種的bsp(什麼叫bsp?參看本文上),都有各自的配置檔案,在C:/Tornado/target/config/bspname/config.h裡, 打開config檔案,就會看到上面所說的 default_boot_line,接下來要做的就是根據你的情況修改此行參數,使之符合自己的要求。 在實時應用系統的開發調測階段,往往采用以PC機作為目标機來調測程式。主機PC和目标機PC之間可采取序列槽或是網口進行聯結。由于大多數目标已配有網卡,網絡聯結成為最簡單快速的連接配接方式。下面是它的詳細步驟:
1)、修改通用配置檔案//Tornado/target/config/bspname/config.h.
針對不同的網卡,其名稱不同,如NE2000及其相容網卡為ENE,3COM以太網卡為ELT,Intel網卡為EEX,Intel82559網卡為fei ,3C905B PCI網卡為elPci。(以3COM以太網卡為例)
2)、針對目标機的網卡,#define INCLUDE_ELT,同時 #undef 其它網卡
在config.h檔案中修改相應網卡類型(如網卡為3COM網卡)的定義部分:
#define IO_ADRS_ELT 網卡I/O位址
#define INT_LVL_ELT 網卡中斷号
3)、修改#define DEFAULT_BOOT_LINE的定義:
#elif (CPU_VARIANT == PENTIUM) (修改此行後的DEFAULT_BOOT_LINE)
#define DEFAULT_BOOT_LINE /
"elt(0,0)主機辨別名:vxWorks h=主機IP e=目标機IP u=登入使用者名 pw=密碼 tn=目标機名"
例如:#define DEFAULT_BOOT_LINE /
"elt(0,0)comps:VxWorks h="10".132.101.88 e="10".132.101.82 u="x86" pw="xxx" tn="x86""