為 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"

然後我執行了update-grub每個 wiki 頁面並驗證了編譯選單中的條目(見下文)。

當我啟動系統時,該選項在主選單或高級選項下似乎不可用:

缺少 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 論壇

相關內容