为 Grub 增加用于 X32 扩展的额外启动选项?

为 Grub 增加用于 X32 扩展的额外启动选项?

我参与了一个免费/开源项目。Debian 维护人员报告了在 X32(不是拼写错误;不是 X86)下出现故障的情况,我正在尝试设置一个测试环境来重现该故障。

根据 Debian 的X32 移植维基,我需要在内核中启用 X32 扩展。为此,我需要添加 Grub 条目。下面是我添加到的内容/etc/default/grub,它取自 wiki 页面(除了我注释了默认条目)。

# GRUB_CMDLINE_LINUX_DEFAULT="syscall.x32=y quiet"
GRUB_CMDLINE_LINUX="syscall.x32=y"

然后,我按照 wiki 页面执行操作update-grub并验证了编译菜单中的条目(见下文)。

当我启动系统时,主菜单或高级选项下似乎没有该选项:

缺少 X32 的 Grub 条目

Debian 的Grub2文档还有很多不足之处。它只讨论了如何为菜单项着色(您无法编造这类东西……)。

按照医生提供的处方后,我预期会出现以下情况:

  • Debian GNU/Linux
  • Debian GNU/Linux(X32)
  • 高级选项
  • 内存测试(memtest86+)
  • 内存测试(memtest86+、串行)
  • ...

如何向 Grub 添加 X32 启动选项,给它一个像“Debian GNU/Linux (X32)”这样的名字,确保它是启​​动期间内核的启动选项,并确保更改在或之后仍然upgrade存在dist-upgrade


根据 Marius 下面的回答,我添加了以下内容/etc/grub.d/40_custom

menuentry 'Debian GNU/Linux (X32)' --class debian --class gnu-linux --class gnu --class os
  $menuentry_id_option 'gnulinux-simple-a4af7dfc-640c-4aa8-bf0b-068af3d72b01' {
    linux/boot/vmlinuz-4.2.0-1-amd64 root=UUID=a4af7dfc-640c-4aa8-bf0b-068af3d72b01 ro syscall.x32=y quiet
}

它按预期提供了命名条目,但导致启动错误:

error: can't find command: `linux/boot/vmlinuz-4`

我认为这是由于 Emacs 中的复制/粘贴造成的(它显然删除了空格???)。所以我把它改成了linux /boot/vmlinuz-4.2.0-1-amd64...。结果导致内核崩溃:

在此处输入图片描述

答案1

如果我理解正确的话,您需要找到一种方法来选择是否使用/不使用 X32 进行启动。您可以通过两种不同的方式进行操作:

  1. 根据需要。启动时,在启动菜单中点击eedit向下滚动到以下行

    linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff quiet splash
    

并将其修改为

  linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff syscall.x32=y quiet 

现在继续启动。

  1. 系统地。目录中/etc/grub.d/有一个条目,,40_custom它就是为此使用的。您必须在其中复制文件的一部分:包含在括号之间和括号末尾的/boot/grub/grub.cfg部分 , 。包含后,修改行menuentry Debian GNU/Linux...}

     linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff quiet splash
    

进入

     linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff syscall.x32=y quiet

另外,请记住将菜单项的名称更改为40_custom与第一个条目不同的名称,否则您将无法区分这两个条目。

运行update-grub之后就完成了。

答案2

如果您只想在顶层菜单中选择最新内核,请不要在 中输入“syscall.x32=y” /etc/default/grub。而是找到

linux_entry "${OS}" "${version}" simple \
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"

并在/etc/grub.d/10_linux其后添加:

linux_entry "${OS} (X32)" "${version}" simple \
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} syscall.x32=y"

然后运行update-grub进行相应更新/boot/grub/grub.cfg

这样,我可以使用“syscall.x32=y”选项启动最新的内核,但我没有注意到没有它启动有什么区别。那是在 Xubuntu 15.10 64 位中。至于 grub 包升级后配置是否保留,我不知道;也许安装程序会注意到一个自定义配置文件并为您提供保留它的选项。至少这在内核更新后仍然存在。

答案3

您可以foo=bar在 grub 中添加

从终端运行:

gksudo gedit /etc/default/grub

并输入您的密码。

找到以 GRUB_CMDLINE_LINUX_DEFAULT 开头的行,并将 foo=bar 附加到其末尾。例如:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash foo=bar"

保存文件并关闭编辑器。

最后,启动终端并运行:

sudo update-grub

更新 GRUB 的配置文件(您可能需要输入密码)。

下次重启时,内核应该使用启动参数启动

来源:Grub 论坛

相关内容