On Jul 31, 2013, at 6:38 AM, Daniel O'Connor wrote:
> Hi,
> I am trying to make a FreeBSD 9.2 hybrid image (ie ISO & USB from the
same file) and as part of that I need to use syslinux. Unfortunately I can't
get Syslinux's mboot.c32 to run the kernel or loader as suggested at
http://www.syslinux.org/wiki/index.php/Mboot.c32 - it reports "Invalid
Multiboot image: neither ELF header nor a.out kludge found".
>
> I suspect I would be able to use memdisk as I have used that in the past
with syslinux (for 7.x) however this was seems a lot cleaner and easier to
generate.
>
> Has anyone had any success with this?
>
Absolutely.
You can download and dissect the following to show you how it's done...
http://druidbsd.sourceforge.net/download.shtml#FreeBSD_Druid
It uses syslinux, as you can see here:
http://druidbsd.cvs.sourceforge.net/viewvc/druidbsd/druidbsd/druid/src/boot/freebsd/isolinux.cfg?revision=1.1&view=markup
As you can see, I use the memdisk.c32 module.
Notice that I append "iso raw" as options to memdisk.c32.
You may then be asking yourself... if the thing to do is to use memdisk with an
ISO... what's in said ISO?
http://druidbsd.cvs.sourceforge.net/viewvc/druidbsd/druidbsd/druid/mdroot/
Basically...
1. Kernel
2. Boot Forth
3. mfsroot
All that goes into an ISO. When memdisk initiates the ISO,
"/boot/cdboot" then gets invoked.
>From there, /boot/loader gets invoked.
>From there, the /boot/loader.rc is loaded.
>From there, loader.4th is loaded.
>From there, loader.conf is loaded.
In a normal FreeBSD boot process, then the kernel gets loaded (I've modified
that to not load the kernel until later -- because my Forth boot menu presents a
kernel selection option)
>From there, beastie.4th is loaded.
>From there, beastie-start is called and then the beastie menu is drawn.
NOTE: I've skipped a whole bunch of other Forth modules that were loaded
"at-once" indirectly
>From there, the user makes any boot option choices, and presses ENTER to
boot.
>From there, mfsroot.gz is loaded.
>From there, /stand/sysinstall gets invoked.
>From there, /install.cfg gets invoked.
>From there, /stand/fis gets invoked.
>From there, /dev/iso9660/druid gets mounted onto /cdrom (this ISO9660 volume
is actually _not_ the ISO that memdisk booted, but rather this is the actual
CDROM (or DVD) that you booted from (which contains both the syslinux boot
loader *and* the ISO it booted *and* anything else you want to access).
At this point, /cdrom is your ticket to freedom, busting out of the
double-encapsulation (first encapsulation is wrapping the kernel+forth+mfsroot
into an ISO, second level of encapsulation is from within the mfsroot; from
within the mfsroot, the GEOM provided /dev/iso9660/<VOLID> is an escape
hatch to the level *above* the ISO the mfsroot was embedded within).
--
Devin
_____________
The information contained in this message is proprietary and/or confidential. If
you are not the intended recipient, please: (i) delete the message and all
copies; (ii) do not disclose, distribute or use the message in any manner; and
(iii) notify the sender immediately. In addition, please be aware that any
message addressed to our domain is subject to archiving and review by persons
other than the intended recipient. Thank you.