在Yocto构建的自定义Linux分区安装GRUB时遇到错误的求助
我来帮你搞定这个GRUB安装的问题!你碰到的failed to get canonical path of 'overlay'错误,本质是因为LMDE Live系统用了OverlayFS作为根文件系统,GRUB的安装工具没法正确识别这种特殊的挂载结构,所以直接跑grub-install /dev/sda会报错。下面是亲测有效的解决步骤:
第一步:正确挂载目标分区
首先得把你的Yocto自定义Linux所在的/dev/sda1挂载到Live系统的某个目录,比如我习惯用/mnt/yocto-root:
sudo mkdir -p /mnt/yocto-root sudo mount /dev/sda1 /mnt/yocto-root
第二步:直接用LMDE的GRUB安装工具指定目标根目录
不用折腾chroot(毕竟你的Yocto系统里没装GRUB),直接给grub-install加--root-directory参数,告诉它要把GRUB的核心文件安装到目标分区的对应路径下,同时把MBR写到磁盘/dev/sda:
sudo grub-install --root-directory=/mnt/yocto-root /dev/sda
这个参数会让GRUB跳过当前Live系统的OverlayFS根目录,直接以你挂载的Yocto分区作为根来处理安装,完美避开overlay路径的问题。
第三步:生成GRUB配置文件
安装好GRUB的核心文件后,还得生成启动配置grub.cfg,不然系统启动时GRUB不知道要加载哪个内核。你可以用LMDE的grub-mkconfig工具直接生成到目标分区的对应位置:
sudo grub-mkconfig -o /mnt/yocto-root/boot/grub/grub.cfg
⚠️ 注意:生成完后最好检查一下/mnt/yocto-root/boot/grub/grub.cfg里的内核和initramfs路径,确保和你Yocto系统里的实际文件路径匹配(比如Yocto的内核可能叫vmlinuz-<your-yocto-version>,initramfs同理),如果路径不对,手动修改一下就行。
额外检查项
- 确认
/dev/sda是你要安装MBR的物理磁盘(不是分区,比如sda1是分区,sda才是磁盘本身) - 目标分区
/dev/sda1的/boot目录要有足够空间存放GRUB的文件 - 如果挂载时出现权限问题,加
-o rw参数确保挂载为读写模式:sudo mount -o rw /dev/sda1 /mnt/yocto-root
备注:内容来源于stack exchange,提问作者mrhip

