用于 UEFI 引导 FreeBSD 的工作 GRUB 配置

用于 UEFI 引导 FreeBSD 的工作 GRUB 配置

我正在尝试使用 grub 双重启动运行 freeBSD 10.1 的 x86_64 机器。 FreeBSD Grub2-efi 安装似乎很顺利,但没有 grub.cfg。我手动创建了 grub.cfg。以下是我尝试过的配置和得到的结果。

我的设置:

gpart show -l
=>        6  146239733  da0  GPT  (558G)
          6         10       - free -  (40K)
         16        128    1  (null)  (512K)
        144     262144    2  efi  (1.0G) -----> MY ESP
     262288    1048576    3  rootfs  (4.0G) ----> freebsd+ grub are here
    1310864    2097152    4  swap  (8.0G)
    3408016    1048576    5  nextroot  (4.0G) 

Grub安装命令:

grub-install --target=x86_64-efi --efi-directory=/efi/ --bootloader-id=grub --boot-directory=/boot/ --modules="part_gpt part_msdos"

配置1:

    menuentry "FreeBSD" {
        insmod ufs2
        insmod bsd
        set root=(hd0,3)
        kfreebsd /boot/loader.efi
   }

结果:它抱怨“无效的 a.out 标头”。

配置2:

    menuentry "FreeBSD" {
        insmod ufs2
        insmod bsd
        set root=(hd0,3)
        kfreebsd /boot/loader
   }

结果:空白屏幕,顶部有白色模糊。是视频问题吗?

配置3:

menuentry "FreeBSD" {
    insmod ufs2
    insmod bsd
    insmod gfxterm
    insmod font
    insmod videotest
    insmod videoinfo
    set gfxmode=auto
    set kernvt="vt"
    set root=(hd0,3)
    kfreebsd /boot/boot1.efi
}

再次结果:空白屏幕,顶部模糊快速变化。

配置4:

menuentry "FreeBSD" {
    insmod ufs2
    insmod bsd
    insmod gfxterm
    insmod videotest
    insmod videoinfo
    set gfxmode=auto
    set kernvt="vt"
    set root=(hd0,3)
    chainloader /boot/boot1.efi
}

结果:签名不匹配。不启动

我不确定我错过了什么。有人可以检查一下我的 grub.cfg 吗?我有什么明显的遗漏吗?如果有人可以分享在 x86 上使用 UEFI 引导 grub 的 grub 配置,我将非常感激。

答案1

在 Linux 操作系统中,将新的 FreeBSD 条目添加到您的文件中,/etc/grub.d/40_custom然后重新生成grub.cfg文件:

rm /boot/grub/grub.cfg

将以下行添加到您的/etc/grub.d/40_custom

menuentry "FreeBSD" {
insmod ufs2
set root=(hd0,gpt3)
kfreebsd /boot/loader
}

跑步grub-mkconfig

grub-mkconfig -o /boot/grub/grub.cfg

编辑

您必须创建一个bios-boot分区(大小 = 1 M)

在 FreeBSD 中,grub从 ports collection 安装后,使用以下命令正确安装:

grub-install --modules=part_gpt /dev/ada0

使用gpart show命令获取正确的设备。

运行 grub-mkconfig -o /boot/grub/grub.cfg命令,它会grub.cfg为你生成一个。

相关内容