? ? ?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?
unitNum?
procnum?
flags?
?
?
?
?
?
?
?
ead?
bad?
had?
gad?
bootFile:?
usr:?
passwd:?
other:?
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.
?
在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""