他のシステムで使用されているハードドライブにgrubをインストールします。

他のシステムで使用されているハードドライブにgrubをインストールします。

したがって、次のパーティションテーブルを含む組み込みシステム用の512MBフラッシュチップがあります。

p1: 32MB boot partition
p2: 200MB recovery partition
p3: 200MB normal partition

私はUbuntu(開発)マシンでbuildrootを使用して「通常の」パーティションの200MB ext2イメージをコンパイルしています。この時点で、私の開発ボックスでは、buildrootで生成されたイメージをフラッシュチップに追加します(/ dev / sddのide-USBコネクタを使用して接続されています)。

dd if=./output/images/rootfs.ext2 of=/dev/sdd3

いいですね。 /dev/sdd3 をマウントし、組み込みデバイスが使用するファイルシステム全体を表示できます。

今、私はこのフラッシュチップにグラブをインストールしたいのですが、どうすればいいのかわかりません。私は試した:

grub-install /dev/sdd

ただし、内蔵デバイスにフラッシュチップを挿入して電源を入れると、グラブはロードされません(カーソルが点滅している黒い画面にのみ表示されます。エラーはありません)。

答え1

多くの検索と推測、確認の最後に問題の解決策を見つけました。

最初の dd rootfs イメージ buildroot は以下を生成します。

sudo dd if=./output/images/rootfs.ext2 of=/dev/sdd3

次に、sdd3からsdd1に/bootをコピーし、menu.lstファイルを作成し、bzImageをコピーします。

最後に grub を実行します。

sudo grub --device-map=/dev/null
> device (hd0) /dev/sdd
> root (hd0,0)
> setup (hd0)
> quit

ドライブをシステムに接続するだけで、すべてがロードされます。

答え2

Grubに、ディスクが新しいシステムのプライマリハードドライブになることを知らせ、ブートセクタに合わないブートローダの部分を見つけることができる場所を教えてください。 Grubは、起動時にディスク名と実行中のオペレーティングシステムのディスク名との対応をデバイスマップとして参照します。

/media/sdd3/boot/grub/device.map含めるように編集すると思います。

(hd0) /dev/sdd

それからgrub-install --root-directory=/media/sdd3/boot/grub/device.map

関連情報