如何正确地将 uboot 刷入 SD 卡?

如何正确地将 uboot 刷入 SD 卡?

我一直在使用 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

相关内容