Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 2 Feb 2008 00:08:12 +0200
From:      "Adrian Penisoara" <ady@freebsd.ady.ro>
To:        ticso@cicely.de
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Squeezing out some 70 bytes out of the boot2 loader
Message-ID:  <78cb3d3f0802011408p6061353ei76a077cfadd4e379@mail.gmail.com>
In-Reply-To: <20080121003847.GI22192@cicely12.cicely.de>
References:  <78cb3d3f0801201239x18c339a6sbc6a04d2b5670b81@mail.gmail.com> <20080121003847.GI22192@cicely12.cicely.de>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi,

On Jan 21, 2008 2:38 AM, Bernd Walter <ticso@cicely12.cicely.de> wrote:

> On Sun, Jan 20, 2008 at 10:39:45PM +0200, Adrian Penisoara wrote:
> > Hello
> >
> >   I am trying to hack in some symlink support into the
> [sys/boot/i386/]boot2
> > bootloader (for my project [1]) and I seem to fall short of about 69
> bytes:
> >
> > as  -o boot2.o boot2.s
> > ld -static -N --gc-sections -nostdlib -Ttext 0x2000 -o
> > boot2.out/build/obj/build/src/sys/boot/i386/boot2/../btx/lib/crt0.o
> > boot2.o sio.o
> > objcopy -S -O binary boot2.out boot2.bin
> > btxld -v -E 0x2000 -f bin -b
> > /build/obj/build/src/sys/boot/i386/boot2/../btx/btx/btx -l boot2.ldr  -o
> > boot2.ld -P 1 boot2.bin
> > kernel: ver=1.01 size=7b0 load=9000 entry=9010 map=16M pgctl=1:1
> > client: fmt=bin size=1581 text=0 data=0 bss=0 entry=0
> > output: fmt=bin size=1e45 text=114 data=1d31 org=0 entry=0
> > -69 bytes available
> > *** Error code 1
> >
> >   What can I do to get room for about 70-100 bytes for these changes to
> make
> > it into the bootloader ?
> >
> > [1] I'm trying to get support for /boot being mounted as a separate FS
> and
> > as such I would need to have a "self-pointing" symlink (e.g. "boot -> ."
> )
> > to easily mask the fact that the boot stuff is now right in the root of
> that
> > FS. Fortunately the FORTH loader does support symlinks and I do not get
> > problems with it. I know that I can use /boot.kernel as a workaround,
> but
> > that is not too elegant.
>
> The support is already there - at least to some definition.
> You just need to symlink it the other way, so the kernel sees the
> symlink and not the bootcode:
> Mount your boot-FS into /bootdir with a /boot subdir inside.
> So on ypur running system you have /bootdir/boot.
> Then symlink /boot on your real /-FS to /bootdir/boot and you are fine
> with tools expecting /boot on your running system.
> Fill the directory with the usual content.
> boot2 and later loader stages will just see it's normal /boot inside
> with everything in it.


  Yes, it would work indeed, with quite minimal overhead, but it's not
elegant enough for my taste.

  Fortunately /boot/loader knows how to deal with symlinks so I can push [1]
a "boot -> ." symlink [2] into the boot partition, it's just the boot2
loader who doesn't know about this.

[1] Actually I also need to get the boostrap code file (/boot/boot used by
bsdlabel -B) out of the way first, renaming it to something more meaningful
(e.g. /boot/bootstrap).
[2]  I seem to remember Linux was once doing this symlink once, but I guess
that nowadays, when GRUB became the default bootloader, its utility has
disappeared.


> This is already published on http://wiki.freebsd.org/ZFSOnRoot for
> having a non UFS filesystem as /.
>

Actually  I am trying to build myself a ZFS root structure too. Thanks for
the tip.

Regards,
Adrian Penisoara
ROFUG / EnterpriseBSD



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