![如何正确地将 uboot 刷入 SD 卡?](https://linux22.com/image/1590367/%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E5%9C%B0%E5%B0%86%20uboot%20%E5%88%B7%E5%85%A5%20SD%20%E5%8D%A1%EF%BC%9F.png)
我一直在使用 BeagleBone Black 试验嵌入式 Linux。我已成功使用 yocto 创建了一个最小 Linux 发行版。
当我想使用我在教程中找到的脚本将辅助引导加载程序 (MLO) 和引导加载程序 (u-boot) 刷入 SD 卡的 FAT 分区时,一切正常,电路板启动。但是当我想自己重做所有事情,而不是使用脚本时,电路板无法从 SD 卡启动(即使相同的文件似乎被复制到了相同的位置,就像脚本一样)。显然,我的命令没有做同样的事情,但我不明白为什么。
你们能帮助我理解我的命令和脚本命令之间的区别吗?(仅供参考,脚本也将内核和 rootfs 复制到 SD 卡的不同分区上,但我可以重做那部分,所以这不是问题)
我的命令:
$ sudo cp ~/<path_to_file>/MLO /media/<USER>/boot/
$ sudo cp ~/<path_to_file>/u-boot.img /media/<USER>/boot/
剧本:
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: $0 [machine] [image]"
echo " machine is, e.g., beaglebone"
echo " image is, e.g., core-image-minimal"
exit 1
fi
if [ -z BUILDDIR ]; then
echo "Please source oe-init-build-env"
exit 1
fi
BOOT_PART=/media/${USER}/boot
ROOTFS_PART=/media/${USER}/rootfs
MACHINE=$1
IMAGE=$2-${MACHINE}
IMAGES_DIR=tmp/deploy/images/${MACHINE}
if [ ! -d $BOOT_PART ]; then
echo "Can't find $BOOT_PART on sdcard"
exit 1
fi
if [ ! -d $ROOTFS_PART ]; then
echo "Can't find $ROOTFS_PART on sdcard"
exit 1
fi
cp ${IMAGES_DIR}/MLO ${BOOT_PART}
if [ $? -ne 0 ]; then echo "Error: dd"; exit 1; fi
cp ${IMAGES_DIR}/u-boot.img ${BOOT_PART}
if [ $? -ne 0 ]; then echo "Error: dd"; exit 1; fi
sudo tar -C $ROOTFS_PART -xf ${IMAGES_DIR}/${IMAGE}.tar.bz2
if [ $? -ne 0 ]; then echo "Error: dd"; exit 1; fi
echo "Success!"
答案1
在您的 SD 卡上,您需要将分区设为 FAT32 格式。首先将该分区挂载到临时目录。首先复制 MLO!然后复制 u-boot.img。使用 sync 命令将所有数据复制到 RAM。卸载临时目录,因此命令流程应该是:
$ sudo mount /dev/MYDISK /mnt $ sudo cp MLO /mnt $ sudo cp u-boot.img /mnt $ sudo sync $ sudo umount /mnt