所以我有一个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,但不知道如何执行此操作。我试过了:
grub-install /dev/sdd
但是,当我将闪存芯片插入嵌入式设备并打开它时,grub 将无法加载(只是出现在黑屏上,光标闪烁——没有错误)。
答案1
经过大量搜索、大量猜测和检查,我找到了问题的解决方案:
第一个 dd rootfs 映像 buildroot 创建:
sudo dd if=./output/images/rootfs.ext2 of=/dev/sdd3
然后,将/boot从sdd3复制到sdd1,创建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
。