Experimental Physics and
| |||||||||||||||||
|
Hi Maren, I can't speak for Maren, but I do know that there was a problem with the standard vxWorks bootRom code's use of FTP. There are two TCP sockets involved in an FTP file transfer, a command socket and a data socket, and the bootRom doesn't actually close its data socket before sending "QUIT" through the command socket, which is apparently not legal according to the official FTP spec. Prior to Solaris 9, the Sun version of ftpd didn't mind which order you did those operations in, but other ftpd implementations don't like it. Sun switched to a different ftpd in Solaris 9, and we found we couldn't boot any of our IOCs after that particular OS upgrade until we reverted the ftpd back to the Solaris 8 binary (which runs perfectly well under Solaris 9). They also broke their tftp server, but the Red Hat Linux one works perfectly well so I just switched to using that instead. My guess is that JACH are hitting the same problem when trying to boot from Linux. There is a fix to the bootRom code (see the patch below), but you have to reprogram all your IOC bootroms to the patched version to be able to use it. An alternative would be to look for a different, more lenient implementation of ftpd. - Andrew This patch modifies the <tornado>/target/config/all/bootConfig.c file: Index: bootConfig.c =================================================================== RCS file: /home/phoebus/TORNADO5/cvsroot/config/all/bootConfig.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- bootConfig.c 12 Mar 2003 22:53:28 -0000 1.2 +++ bootConfig.c 22 Jan 2004 21:18:42 -0000 1.3 @@ -2492,11 +2492,11 @@ while ((read (fd, command, sizeof (command))) > 0); + close (fd); if (bootFtp) (void) ftpCommand (errFd, "QUIT",0,0,0,0,0,0); } - close (fd); close (errFd); return (OK); @@ -2510,5 +2510,6 @@ while ((read (fd, command, sizeof (command))) > 0); + close (fd); if (bootFtp) { @@ -2520,6 +2521,7 @@ { char buf [100]; int errBytesRecv = fioRead (errFd, buf, sizeof (buf)); + close (fd); if (errBytesRecv > 0) { @@ -2530,7 +2532,6 @@ } } - close (fd); close (errFd); return (ERROR);
| ||||||||||||||||
ANJ, 02 Sep 2010 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing · |