Problem booting FreeBSD from cboot FreeBSD from cdrom using grubdrom using grub

John Baldwin jhb at freebsd.org
Wed Dec 21 07:45:41 PST 2005


On Tuesday 20 December 2005 11:43 pm, Tony wrote:
> Hi,
>   I'm trying to make an iso image that will boot FreeBSD using GRUB boot
> loader.
>   Grub will boot /boot/loader and the loader will boot /boot/kernel. It
> goes well on my disk, but when I try to make a livecd, it fails. I spend
> some time figuring out that /boot/loader does not probe cd it self, it
> depends on boot2 to tell him which cd to boot from. So I did some hack
> on /boot/loader.

Why do you need to use GRUB?  The current cdboot + /boot/loader stuff works as 
is.  boot2 doesn't actually pass the special CD flag, cdboot does.  The patch 
below is not quite acceptable for the tree as there are non-CD cases where 
you could get that error.  If you ahve a way to patch GRUB to set the CD flag 
in the bootinfo struct when it boots from CD that would be ideal.

> Bellow is the diff: 
> *** sys/boot/i386/loader/main.c.bak     Sun Dec 11 19:32:29 2005
> --- sys/boot/i386/loader/main.c Sun Dec 11 22:04:29 2005
> ***************
> *** 228,235 ****
>       if ((new_currdev.d_type == biosdisk.dv_type) &&
>         ((new_currdev.d_kind.biosdisk.unit = bd_bios2unit(biosdev)) ==
> -1)) {
>         printf("Can't work out which disk we are booting from.\n"
> !              "Guessed BIOS device 0x%x not found by probes, defaulting
> to disk0:\n", biosdev);
> !       new_currdev.d_kind.biosdisk.unit = 0;
>       }
>       env_setenv("currdev", EV_VOLATILE, i386_fmtdev(&new_currdev),
>                i386_setcurrdev, env_nounset);
> --- 228,238 ----
>       if ((new_currdev.d_type == biosdisk.dv_type) &&
>         ((new_currdev.d_kind.biosdisk.unit = bd_bios2unit(biosdev)) ==
> -1)) {
>         printf("Can't work out which disk we are booting from.\n"
> !              "Guessed BIOS device 0x%x not found by probes, defaulting
> to cd0(%d):\n", biosdev, biosdev);
> ! bc_add(biosdev);
> !           new_currdev.d_type = bioscd.dv_type;
> !           new_currdev.d_dev = &bioscd;
> !           new_currdev.d_kind.bioscd.unit = bc_bios2unit(biosdev);
>       }
>       env_setenv("currdev", EV_VOLATILE, i386_fmtdev(&new_currdev),
>                i386_setcurrdev, env_nounset);
>
> Then the kernel starts, but when the kernel try to mount the root fs, it
> stops. I have the follow line in my /etc/fstab
> /dev/acd0c              /               cd9660  ro          0       0
>
> I am stranded. Can anyone help?  I'm using FreeBSD 5.4
>
> thanks
> Tony
>
>
>
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-hackers mailing list