CD bootcode

John Baldwin jhb at freebsd.org
Thu Jun 7 16:07:31 UTC 2012


On Thursday, June 07, 2012 9:58:25 am rank1seeker at gmail.com wrote:
> ----- Original Message -----
> From: John Baldwin <jhb at freebsd.org>
> To: freebsd-hackers at freebsd.org
> Cc: rank1seeker at gmail.com
> Date: Thu, 7 Jun 2012 08:21:39 -0400
> Subject: Re: CD bootcode
> 
> > On Wednesday, June 06, 2012 12:15:14 pm rank1seeker at gmail.com wrote:
> > > FreeBSD's CD bootcode '/boot/cdboot' is targeting stage 3 boot -> loader
> > > For example, stage 2 boot '/boot/boot' is attempting the same.
> > > 
> > > In my case of a '/boot/loader', '/boot' is a symlink!
> > > 
> > > So if '/boot/boot' works with symlinks, why '/boot/cdboot' doesn't!
> > > Yes, I did use Rock-Ridge extensions, upon creation of 'cd.iso'
> > 
> > Because I didn't make cdboot's lookup routine handle symlinks.  It
> > also doesn't look at Rock-Ridge extensions and only uses the base
> > ISO-9660 directory entries.  That was enough fun to write in assembly.
> > OTOH, CD sectors are 2k, so you do have that much room to work with
> > and can probably fit a more advanced directory lookup into cdboot.
> > 
> > I'm happy to review any patches you come up with.
> > 
> > -- 
> > John Baldwin
> 
> 
> I need to correct myself.
> BOTH stage 2 boot '/boot/boot' AND '/boot/cdboot' don't work with symlinks!

Correct.

> '/boot/boot' on UFS sees symlink as file, same as '/boot/cdboot' does so on Rock-Ridge.
> 
> I can handle '/boot/boot' by providing full path to loader via 'boot.config'
> '/boot/cdboot' doesn't have such a file, so in '/usr/src/sys/boot/i386/cdboot/cdboot.s':
> --
> loader_paths:   .asciz  "/BOOT/LOADER"
>                 .asciz  "/boot/loader"
>                 .byte 0
> --
> 
> I injected third '.asciz' line with full path to 'loader' and recompiled it.
> And what is first line "/BOOT/LOADER" doing in there ?!?

Plain ISO-9660 always uses uppercase letters for filenames.  There is a mkisofs
flag to use lowercase, but by default it uppercases all filenames.

> But even when loader is finally started, loader handles symlinks on UFS (kicked by '/boot/boot'), BUT fails so, on Rock-Ridge iso (kicked by 
'/boot/cdboot')
> Looks like loader must be made into looking at Rock-Ridge extensions.

It is src/lib/libstand/cd9660.c that would have to be patched.  It already has
limited Rock-Ridge support, so adding symlink support to cd9660_open() may not
be that hard to do.

-- 
John Baldwin


More information about the freebsd-hackers mailing list