幼虫

幼虫

Linuxで起動し、自動化スクリプトを実行し、自動的にWindowsから起動する必要があるアプリケーションがあります。 Kexecを使ってgrubを実行できますか?

別のユースケースは、Linuxカーネルを起動してプロセッサのマイクロコードを更新し、kexecGRUBまたはSyslinuxを起動してWindowsを起動することです。なぜなら、マイクロコードは完全な再起動後も維持されないからです。

聞いたgrub4dos(リンク(使用できません)アーカイブバージョン)、ところで廃止されたようですが、GRUB2を使ってできる方法はありますか?

デフォルトではロード可能なGRUBイメージが必要ですkexec。ここで見つけた画像を読み込もうとしています。説明するしかし、うまくいかないようです。どんなヒントでもくれてありがとう。


注:見つかったこの投稿2014年現在、kexecではこの機能は実装されていません。

ベストアンサー1

これはWindowsでは可能ですが、kexecせいぜい実験的なようです(完全にはテストされていません)。

幼虫

kexecgrub自体では不可能ですcore.img(互換性のあるバイナリ形式がないようです)。Launchpadのバグレポート。上記のエラーはまだ再現できます。

kexec -l /boot/grub2/i386-pc/core.img

によると、kexec --help現在、次のタイプがサポートされています。

elf-x86_64
multiboot-x86
multiboot2-x86
elf-x86
bzImage64
bzImage
beoboot-x86
nbi-x86

他のローダーをロードするには、これらの形式のいずれかを使用する必要があり、そうでない場合は互換性を追加する必要があります。 GRUBがどの形式を使用しているのかわかりません。簡単なfileコマンドで以下を生成します。

/boot/grub2/i386-pc/core.img: data

起動可能なGRUBイメージの作成

現在、次の可能性があるようです。

ブートローダー

lnxboot.imgLinux kernel x86 boot executeable bzImageカーネルにロードすることを意図しているようです。

その後、syslinux/isolinux/pxelinux/lilo または Linux カーネルをサポートする他のブートローダから grub2.bin をロードできます。

Kexecはそれをロードしますが、実行時に競合が発生します。

kexec -l /usr/lib/grub/i386-pc/lnxboot.img --initrd=/boot/grub2/i386-pc/core.img --debug

また、ロード時に問題があるようです(デバッグ出力の最初の数行)。

Try gzip decompression.
Try LZMA decompression.
lzma_decompress_file: read on /usr/lib/grub/i386-pc/lnxboot.img of 65536 bytes failed
[...]

Grub4Dos

Grub4Dosを簡単に見てください:

# file grub.exe
grub.exe: Linux kernel x86 boot executable bzImage, version \353kHdrS\003\002, RO-rootFS, Normal VGA

これは互換性があることを意味します。これはレガシーソフトウェアなので、私にとってはオプションではありません。

grub4dosしかし、ダウンロードを通じて0.4.4ロードできました。ソースフォージ次に、次を実行します。

kexec -l grub.exe
kexec -e

設定されていない場合は、しばらくしてGrub Shellに戻ります。使用したい場合は、必要に応じてgru4dos調整してください。cmdlineこのスレッドそれでも適用する必要があります。

Windows

KexecWindowsは単なる文章のようには見えないかもしれませんが、以前にすでに完了しました

この方向の作業のほとんどは、以下に関連しているようです。Linuxブートプロジェクト。ジタブ

私はこれらを見つけましたスライドショーこのgithubリポジトリ。このアイテムを機能させるために記事に記載されているようです。

可能に見えますが、作業がたくさん必要です(そして「生産準備」が可能な解決策はありません。少なくともまだ見つかりませんでした)。残念なことに、LinuxBootに関するドキュメントはあまりないと思われるので、開発者に連絡する必要があるかもしれません。これを行うより直接的な方法がすでに存在する可能性があります。

おすすめ記事