如何从 EFI shell 使用 bcfg 向内核添加启动参数?

如何从 EFI shell 使用 bcfg 向内核添加启动参数?

efibootmgr在 EFI 启动菜单中创建了无效条目。例如,efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_x64.efi -L "rEFInd Boot Manager"在启动菜单中添加了无法启动的日文字符。

另一方面,bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"工作得很好。

现在我想直接启动,vmlinuz-linux而不是通过refind。有人知道如何将参数传递给内核吗?没有参数的话是:bcfg boot add 3 fs0:\vmlinuz-linux "linux"但我需要使用什么选项来添加initrd=\initramfs-linux.img root=/dev/sda2

谢谢

答案1

我在某款 (Supermicro) 主板上也遇到过类似的问题,虽然 Steve 建议使用文本文件,但还是有些微妙之处。我尝试记录以下过程:

  1. 如果你没有bcfg,你首先需要获取一份 EFI 2.x shell。主板固件可能有 1.x。Arch 维基有更多详细信息,但对于最多64 位现代系统,你需要Shell.efi这里并重命名它shellx64.efi并将其直接放置在 EFI 系统分区的根目录中。如果您的主板提供了Launch EFI Shell from filesystem device,请使用它。否则,您可以使用内置 shell 来启动更新的 shell。请参阅维基百科了解更多信息。

  2. 进入 2.x shell 后,您需要确保您的启动选项存在。您可以使用 列出选项bcfg boot dump -b-b启用分页器,如more)。如果它不存在,您需要添加一个,最好将其添加到列表顶部。您可以浏览 - 使用 列出文件系统map -b,查找以fslike开头的条目fs0:,然后使用lslike ls fs0:\ls fs0:\EFI\等探索目录。

    找到引导加载程序的路径(和正确的fs设备)后,添加它(如原始问题所示):

    bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"
    

    将其添加为第 4 个启动项(从 0、1、2、3 开始数)

  3. 添加启动选项后(使用 进行验证bcfg boot dump -b),您需要添加可选数据(启动参数)。正如 Steve 简要提到的,最可靠的方法是将这些参数保存到文件中,然后使用 导入它们bcfg -opt。但是,据我所知,这附加选项,因此最好bcfg boot rm先关闭启动选项,然后按照步骤 2 重新添加。一旦有了干净的条目,就可以添加可选数据。例如:

    edit fs0:\EFI\refind\options.txt
    

    这将打开文件编辑器。输入您的选项(一行),然后按 F2 保存。按 F3 退出。您也可以在操作系统中编辑此文件,但您必须将其保存为 UTF-16 (LE,little-endian)。EFI Shell 的编辑器会自动执行此操作。

    下一步是导入选项:

    bcfg boot -opt 3 fs0:\EFI\refind\options.txt
    

    再次,3指定启动项。这应该与您添加的启动项相匹配。不要多次运行此命令 - 您必须rm重新运行add该条目,然后才能更改选项。

  4. 使用 验证启动选项和可选数据bcfg boot dump -v -b

答案2

我遇到了同样的情况。我相信解决方案将涉及使用 -opt 参数,无论是与 add 一起内联还是作为附加命令。到目前为止,我还没有成功将所有参数放在引号字符串中。我的下一次尝试是使用 edit 创建一个文件,并使用 -opt 传递文件名。

如果成功,请更新此线程。

因此,在 uefi shell 中,我使用 edit 在介质上与内核相同的位置创建一个 opt 文件。在其中,我将内核选项放在一行上。然后我使用命令 bcfg boot -opt 0 FS0:\filename 您可能需要使用不同的 FS 编号、-opt 编号和文件名来匹配您的配置。

答案3

您输入的第一个命令是正确的。您可以使用另一个命令添加选项。对于您的具体情况,它是:

Shell> bcfg boot -opt 3 "initrd=\initramfs-linux.img root=/dev/sda2"

答案4

您应该像这样使用它,而不是还/dev/sda必须使用partuuiduuid像这样:

--disk /dev/sdX --part Y --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img' --verbose

相关内容