Subject: Re: 3/60 Not Booting?
To: Mike Dugas <mad@Poseidon.Token.Net>
From: Volker Seebode <vas@plesnik.bonsai.de>
List: port-sun3
Date: 10/01/1996 12:50:06
On Mon, 30 Sep 1996, Mike Dugas wrote:
> Date: Mon, 30 Sep 1996 13:00:32 -0400 (EDT)
> From: Mike Dugas <mad@Poseidon.Token.Net>
> To: "Gordon W. Ross" <gwr@mc.com>
> Cc: port-sun3@NetBSD.ORG
> Subject: Re: 3/60 Not Booting?
>
>
>
> On Mon, 30 Sep 1996, Gordon W. Ross wrote:
>
> > > Date: Sun, 29 Sep 1996 22:47:17 -0400
> > > From: Mike Dugas <mad@Poseidon.Token.Net>
> > >
> > > Hello-
> > >
> > > I have a Sun 3/60 I am trying to get running (it should have been running
> > > yesterday, really), but I have a problem. I'm making the tapes on my Linux
> > > box, and they boot fine, so I know it's reading them properly, but when
> > > I try to boot the boot tape, I get this:
> > >
> > > Auto-boot in progress...
> > >
> > > EEPROM boot device...st(0,0,0)
> > > >> NetBSD tapeboot [$Revision 1.3 $]
> > > 466260+284056+87436+[41688+45445]exec: short read
> > > tapeboot: 1: Input/output error
> > > tapeboot: segment? [1]
> > >
> > > And my cursor sits on the last line waiting for my input.
> > > What should I do?
> >
> > Just press enter.
> >
>
> I've tried everything. I've pressed enter, I've typed 2, I've typed 3,
> I can't get it to work at all. I even went to the extent of pulling
> memory, and making the tape and having mt write the eof at the end of each
> tape segment. I can't get it to work AT ALL.
>
I've got the same machine and exactly the same problem. Fortunately I
found a way using tapeboot by putting the different segments on different
tapes. Bug in tapeboot?
Perhaps you might try to boot your sun via NFS. I've got it running
booting from a FreeBSD server with a patched mountd.
BTW: there is another problem concerning the tape driver. Any time
a SOFT ERROR occurs, NetBSD panics with "done > todo".
scsi/st.c, line 1680-1690 netbsd-current:
>>>>>>>>>>>>>>>>>>>>
/*
* Get the sense fields and work out what code
*/
if (sense->error_code & SSD_ERRCODE_VALID)
info = _4btol(sense->info);
else
info = xs->datalen; /* bad choice if fixed blocks */
if ((sense->error_code & SSD_ERRCODE) != 0x70)
return -1; /* let the generic code handle it */
if (st->flags & ST_FIXEDBLOCKS) {
xs->resid = info * st->blksize;
<<<<<<<<<<<<<<<<<<<<<
So if (sense->error_code & SSD_ERRCODE_VALID) == 0 and
(st->flags & FIXEDBLOCKS) != 0,
xs->resid will be assigned to xs->datalen*st->blksize! I inserted an
if-statement and now it works:
>>>>>
if (st->flags & ST_FIXEDBLOCKS) {
if (sense->error_code & SSD_ERRCODE_VALID) /* <---- */
xs->resid = info * st->blksize;
<<<<<
--
Volker Seebode | Email: vas@plesnik.bonsai.de |