How to use our stock armv7-RPI2 images with QEMU?

Mark Millard markmi at dsl-only.net
Mon Dec 25 00:11:00 UTC 2017


Alexey Dokuchaev danfe at nsu.ru wrote on
Sun Dec 24 10:27:24 UTC 2017 :

> Hmm, where does one get u-boot.bin file?  I don't see it in the FreeBSD
> RPi2 image anywhere (expected to find under /boot).

In order to see how official RPI2 is put together
for a release:

# more /usr/src/release/arm/RPI2.conf
#!/bin/sh
#
# $FreeBSD: head/release/arm/RPI2.conf 325950 2017-11-17 17:36:45Z gjb $
#

EMBEDDED_TARGET_ARCH="armv7"
EMBEDDED_TARGET="arm"
EMBEDDEDBUILD=1
EMBEDDEDPORTS="sysutils/u-boot-rpi2 sysutils/rpi-firmware"
FAT_SIZE="50m"
FAT_TYPE="16"
IMAGE_SIZE="3072M"
KERNEL="GENERIC"
MD_ARGS="-x 63 -y 255"
NODOC=1
PART_SCHEME="MBR"
export BOARDNAME="RPI2"

arm_install_uboot() {
        UBOOT_DIR="/usr/local/share/u-boot/u-boot-rpi2"
        RPI_FIRMWARE_DIR="/usr/local/share/rpi-firmware"
        UBOOT_FILES="u-boot.bin"
        RPI_FIRMWARE_FILES="bootcode.bin config.txt \
                fixup.dat fixup_cd.dat fixup_db.dat fixup_x.dat \
                start.elf start_cd.elf start_db.elf start_x.elf"
        FATMOUNT="${DESTDIR%${KERNEL}}/fat"
        UFSMOUNT="${DESTDIR%${KERNEL}}/ufs"
        chroot ${CHROOTDIR} mkdir -p "${FATMOUNT}" "${UFSMOUNT}"
        chroot ${CHROOTDIR} mount_msdosfs /dev/${mddev}s1 ${FATMOUNT}
        chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${UFSMOUNT}
        for _UF in ${UBOOT_FILES}; do
                chroot ${CHROOTDIR} cp -p ${UBOOT_DIR}/${_UF} \
                        ${FATMOUNT}/${_UF}
        done
        for _UF in ${RPI_FIRMWARE_FILES}; do
                chroot ${CHROOTDIR} cp -p ${RPI_FIRMWARE_DIR}/${_UF} \
                        ${FATMOUNT}/${_UF}
        done
        chroot ${CHROOTDIR} cp -p ${UFSMOUNT}/boot/ubldr.bin \
                ${FATMOUNT}/ubldr.bin
        chroot ${CHROOTDIR} cp -p ${UFSMOUNT}/boot/dtb/rpi2.dtb \
                ${FATMOUNT}/rpi2.dtb
        chroot ${CHROOTDIR} touch ${UFSMOUNT}/firstboot
        sync
        umount_loop ${CHROOTDIR}/${FATMOUNT}
        umount_loop ${CHROOTDIR}/${UFSMOUNT}
        chroot ${CHROOTDIR} rmdir ${FATMOUNT}
        chroot ${CHROOTDIR} rmdir ${UFSMOUNT}
        
        return 0
}

So installing the port sysutils/u-boot-rpi2
provides:

/usr/local/share/u-boot/u-boot-rpi2/u-boot.bin

that is then copied to the msdosfs file system.

There are also files from the port
sysutils/rpi-firmware in :

/usr/local/share/rpi-firmware/

that are copied over.


I will warn that when I look at the console
record on the rpi2 that I use it shows:

Booting [/boot/kernel/kernel]...               
/boot/dtb/bcm2836-rpi-2-b.dtb size=0x346b
Loaded DTB from file 'bcm2836-rpi-2-b.dtb'.

This is different than the rpi2.dtb put on the
msdosfs in the script. The

/boot/dtb/bcm2836-rpi-2-b.dtb

is what the FreeBSD kernel uses in my context.
The

/boot/dtb/rpi2.dtb

copied to the msdosfs as rpi2.dtb may be for u-boot.

/boot/ubldr.bin is copied to the msdosfs as
well.

===
Mark Millard
markmi at dsl-only.net



More information about the freebsd-arm mailing list