Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 Oct 2002 08:32:46 -0700
From:      Peter Wemm <peter@wemm.org>
To:        Poul-Henning Kamp <phk@critter.freebsd.dk>
Cc:        ticso@cicely.de, cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: booting UFS2 on alpha (was: cvs commit: src/sys/boot/common ufsread.c) 
Message-ID:  <20021011153246.84E6D2A88D@canning.wemm.org>
In-Reply-To: <14845.1034332326@critter.freebsd.dk> 

next in thread | previous in thread | raw e-mail | index | archive | help
Poul-Henning Kamp wrote:
> In message <20021010210124.GV17920@cicely8.cicely.de>, Bernd Walter writes:
> 
> >>>>boot dka400
> >(boot dka400.4.0.6.0 -flags 0)
> >block 0 of dka400.4.0.6.0 is not a valid boot block
> >bootstrap failure
> >
> >This one is my biggest problem.
> >SRM doesn't accept the disklabel.
> >Once I dd the first 512 bytes from an old disk SRM is happy.
> >I compared them with hexdump, but wasn't able to find the reason.
> 
> Is there some place which documents what the requirements for being
> a valid boot-block is ?

sbin/disklabel.c:
        /*
         * Generate the bootblock checksum for the SRM console.
         */
        for (p = (u_long *)boot, i = 0, sum = 0; i < 63; i++)
                sum += p[i];
        p[63] = sum;

And:
        /*
         * On the alpha, the primary bootstrap starts at the
         * second sector of the boot area.  The first sector
         * contains the label and must be edited to contain the
         * size and location of the primary bootstrap.
         */
        n = read(b, boot + dp->d_secsize, (int)dp->d_bbsize);
        if (n < 0)
                err(4, "%s", xxboot);
        bootinfo = (u_long *)(boot + 480);
        bootinfo[0] = (n + dp->d_secsize - 1) / dp->d_secsize;
        bootinfo[1] = 1;        /* start at sector 1 */
        bootinfo[2] = 0;        /* flags (must be zero) */


The first sector has a tiny table starting at bytes 480 and on.
480-487: size of boot code
488-495: start of boot code
496-511: 64 bit checksum of sector 0.

Sector 0 is also the disklabel (the traditional BSD location) rather than
sector 1 like on i386.

Cheers,
-Peter
--
Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com
"All of this is for nothing if we don't go to the stars" - JMS/B5


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021011153246.84E6D2A88D>