Как правильно прошить 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