Как правильно прошить uboot на SD-карту?

Я экспериментировал со встроенным Linux, используя BeagleBone Black. Мне удалось создать минимальный дистрибутив Linux с использованием yocto.

Когда я хочу прошить вторичный загрузчик (MLO) и загрузчик (u-boot) на раздел FAT SD-карты, используя сценарий, который я нашел в руководстве, все работает, плата загружается. Но когда я хочу повторить все самостоятельно, не используя сценарий, плата не загружается с SD-карты (даже если те же файлы копируются в то же место, что и в сценарии). По-видимому, мои команды не делают то же самое, но я не понимаю, почему.

Ребята, можете ли вы помочь мне понять, в чем разница между моими командами и командами сценария? (FYI, скрипт копирует ядро ​​и 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!"

0 ответов

На вашей SD-карте вам нужен раздел в формате FAT32. Сначала смонтируйте этот раздел во временную директорию. Скопируйте MLO FIRST! А затем скопируйте u-boot.img. Скопируйте все эти данные в ОЗУ с помощью команды sync. Размонтируйте временный каталог, поэтому поток команд должен быть таким:

$ sudo mount /dev/MYDISK /mnt $ sudo cp MLO /mnt $ sudo cp u-boot.img /mnt $ sudo sync $ sudo umount /mnt

Другие вопросы по тегам