看到有许多网友问询在vxworks下怎么完结在线晋级,逐个答复了屡次,仍是没能说理解。因而决议把自己曾经实践做的进程描绘一下,期望能对咱们有所协助。如有不当之处,请指出。自己曾经在ppc860T, ppc850, pentium-pc104(加doc2000)的方针机上完结过。
1 首要,需求在方针机上完结文件体系,比方运用trueFFS,用dosFS初始化tffs设备。在完结tffs驱动之后,能够调用usrTffsConfig(0,0,/flash);假如成功,在shell下调用devs指令,应该能够看到 /flash设备。
2 板子上首要应该有bootrom,假如没有,运用仿真器写入。
3 让板子flash中的bootrom发动,经过网络加载vxworks。更新vxworks,应该使方针机在vxworks操作体系的支撑之下。即在运转vxworks时更
新存储在flash中的vxworks映象。
该vxworks中应该包括tffs组件,并用usrTffsConfig创立一个tffs设备。假如创立不成功,先调用sysTffsFormat格式化该设备,再创立。
这个vxworks中,应该包括下列代码(也能够发动结束之后,经过target server动态下载):
STATUS myftp(char* host, char* user, char* passwd, char* srcFile, char* desFile)
{
int fd, total = 0;
int ctrlSock;
int dataSock;
char buf [1024];
int nBytes;
remove ( desFile);
fd=open(desFile,0x202,0);
if (ERROR==fd)
{
return ERROR;
}
if (ftpXfer (host,user,passwd , , RETR %s,NULL, srcFile, ctrlSock, dataSock) == ERROR)
{
return (ERROR);
}
while ((nBytes = read (dataSock, buf, 512)) > 0)
{
total += nBytes;
write(fd, buf, nBytes);
}
close(fd);
close (dataSock);
close (ctrlSock);
if(total > 0)
{
return ERROR;
}
return OK;
}
各参数的意义为:
char* host: 主机ip地址,该主机上寄存了最新的vxworks映象。
char* user: ftp的用户名。
char* passwd: ftp的暗码。
char* srcFile: 主机上vxworks映象的文件名,一般为vxworks。
char* desFile: 方针机上寄存的vxworks文件名,一般为vxworks。
4 因为后边vxworks将从tffs中加载,而不是经过网络,因而应该在usrAppInit中初始化网络接口。
在tornado2.0.x下能够这样做:
usrNetEndDevStart(cpm,0);
usrNetIfConfig(cpm,0,192.168.0.240,cpm,0xffffff00);
在tornado2.2.x下,能够这样做:
ipAttach(0,cpm);
ifMaskSet (cpm0, 0xffffff00);
ifAddrSet (cpm0,192.168.0.240);
5 方针机发动结束之后,在某一台主机上翻开ftp server,该主机上寄存了最新的vxworks映象文件。此外,还应该创立一个用户,比方用户名和暗码均为“target”,设置它的home directory为最新的vxworks的途径。
6 在方针机的target shell中履行myftp,比方:myftp(192.168.0.1, target, target, vxWorks, vxWorks)假如履行成功,回来OK(0),否则为ERROR(-1)。不成功,则检查网络和ftp服务器端的服务和装备。
这样,新的vxworks就寄存于tffs设备中,需求重新发动方针机,使其运转新的vxworks(本文中的vxworks既包括了操作体系,也包括了用户应用程序)。
7 咱们需求更新bootrom,使方针机加电后直接从tffs设备中加载vxworks。为此,修正bsp的config.h文件:
#define DEFAULT_BOOT_LINE \
tffs=0,0(0,0)host:/flash/vxWorks h=192.168.0.118 e=192.168.0.120 u=target pw=target
#define INCLUDE_TFFS
#define INCLUDE_DOSFS
假如是在tornado2.0.x下,还需求修正 \target\config\comps\src\net\usrNetBoot.c文件:
if ( (strncmp (sysBootParams.bootDev, scsi, 4) == 0)
|| (strncmp (sysBootParams.bootDev, ide, 3) == 0)
|| (strncmp (sysBootParams.bootDev, ata, 3) == 0)
|| (strncmp (sysBootParams.bootDev, fd, 2) == 0))
改为:
if ( (strncmp (sysBootParams.bootDev, scsi, 4) == 0)
|| (strncmp (sysBootParams.bootDev, ide, 3) == 0)
|| (strncmp (sysBootParams.bootDev, ata, 3) == 0)
|| (strncmp (sysBootParams.bootDev, tffs, 4) == 0)
|| (strncmp (sysBootParams.bootDev, fd, 2) == 0))
8 build bootrom,生成能够运用的bootrom.bin文件。在这一步之前,应该首要make clean。
9 更新bootrom时,咱们能够直接运用vxworks中FTP Client和Network Remote I/O Support组件。为此,需求使当时正在运转的vxworks是通
过网络加载的,这样vxworks发动结束之后,当时默许途径是主机上vxworks映象文件地点的目录,能够用pwd和ls指令检查。把上一步中生成的
bootrom.bin文件拷贝到该目录下。该主机上相同需求发动ftp server服务。
10 在方针机的target shell中履行
tffsBootImagePut 0,0×100,bootrom.bin
正常情况下就能够经过tffs文件体系在线更新了bootrom,使其从tffs设备中加载vxworks。