X32 拡張機能用に Grub に追加のブート オプションを追加しますか?

X32 拡張機能用に Grub に追加のブート オプションを追加しますか?

私はフリー/オープンソース プロジェクトに携わっています。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のグラブ2ドキュメントには改善の余地が多々あります。メニュー エントリを色付けする方法のみが説明されています (このようなことは考えられません...)。

医師の指示に従った後、私は次のことを期待しました。

  • デビアンGNU/Linux
  • Debian GNU/Linux (X32)
  • 高度なオプション
  • メモリテスト (memtest86+)
  • メモリテスト (memtest86+、シリアル)
  • ...

Grub に X32 ブート オプションを追加し、「Debian GNU/Linux (X32)」のような名前を付け、ブート中にカーネルのブート オプションであることを確認し、またはの後も変更が維持されるようにするにはどうすればよいですupgradedist-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 で起動するかしないかを選択する方法を見つけたいということですね。これには 2 つの異なる方法があります。

  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.cfgmenuentry 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最初のエントリとは異なる名前に変更することを忘れないでください。そうしないと、2 つのエントリを区別できなくなります。

実行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=bargrubに追加できる

ターミナルから実行:

gksudo gedit /etc/default/grub

パスワードを入力してください。

GRUB_CMDLINE_LINUX_DEFAULT で始まる行を見つけて、その末尾に foo=bar を追加します。例:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash foo=bar"

ファイルを保存してエディターを閉じます。

最後に、ターミナルを起動して次のコマンドを実行します。

sudo update-grub

GRUB の設定ファイルを更新します (おそらくパスワードを入力する必要があります)。

次回の再起動時に、カーネルはブートパラメータで起動されるはずです。

出典: Grub フォーラム

関連情報