BeagleBone AI-64: Distro Boot Overview

WIP - This is also a going to be a wiki page, so it will change over time..

2022-06-17: First boards are now being shipped to end users.

TI J721e_evm boot sequence:

U-boot v2022.07-rc4 j721e_evm.rst

BeagleBone AI-64 boot sequence:

Major boot sequence differences between BeagleBone AI-64 and TI j721e_evm

microSD = nothing

use sfdisk and create the first classic fat partition, we used 128MB, as we store linux image, overlays, and all boot files..

sfdisk: [1M,128M,0xC,*]
sfdisk: [129M,,,-]

tiboot3.bin (fat partition)tispl.bin (fat partition)u-boot.img (fat partition)

eMMC = (bbb.io: Kingston) vs (TI: Micron)

At the time of this design, the Kingston 16GB eMMC used, only supports a boot0 size of 4MB where as the TI EVM uses XYZ at 8MB. TI placed all U-Boot files into boot0, while initially we were able to shrink U-Boot down enough to match this. We eventually ran into other random space errors. So bbb.io is diverging a little bit from TI, and only placing tiboot3.bin into boot0, and loading everything else from the fat partition like a classic microSD..

From linux, using mmc-utils our eMMC configuration is:

#mmc extcsd read /dev/mmcblk0
mmc bootpart enable 1 2 /dev/mmcblk0
mmc bootbus set single_backward x1 x8 /dev/mmcblk0
mmc hwreset enable /dev/mmcblk0

Since the original shipment of boards use a pre-production image where we tired to do everything in boot0, it’s best to clear out any remnants:

echo '0' >> /sys/class/block/mmcblk0boot0/force_ro
dd if=/dev/zero of=/dev/mmcblk0boot0 count=32 bs=128k
dd if=./tiboot3.bin of=/dev/mmcblk0boot0 bs=128

Layout is the same as microSD:

sfdisk: [1M,128M,0xC,*]
sfdisk: [129M,,,-]

tiboot3.bin (boot0 eMMC)tispl.bin (fat partition)u-boot.img (fat partition)

Building U-Boot (2020-06-17)

Today, building U-boot for this target is a little complex, while TI is currently submitting patches to add these options to U-boot mainline..

Mainline RFC Making sure you're not a bot!

#arm-trusted-firmware
ATF_TAG=bbb.io-08.01.00.006

#optee_os
TEE_TAG=08.01.00.005

#U-Boot
UB_TAG=v2021.01-ti-08.01.00.006
UB_CONFIG=j721e_evm_
UB_ATF=bl31.bin
UB_TEE=tee-pager_v2.bin
UB_DM=ipc_echo_testb_mcu1_0_release_strip.xer5f
mkdir -p /opt/u-boot/$(TARGETDIR)/
mkdir -p ./tmp/arm-trusted-firmware/
git clone -b $(ATF_TAG) https://git.beagleboard.org/beagleboard/arm-trusted-firmware.git --depth=1 ./tmp/arm-trusted-firmware/
cd ./tmp/arm-trusted-firmware/
make -j4 CROSS_COMPILE=aarch64-linux-gnu- CFLAGS= LDFLAGS= ARCH=aarch64 PLAT=k3 TARGET_BOARD=generic SPD=opteed all
cp -v ./tmp/arm-trusted-firmware/build/k3/generic/release/bl31.bin /opt/u-boot/$(TARGETDIR)/
mkdir -p ./tmp/optee_os/
git clone -b $(TEE_TAG) https://git.beagleboard.org/beagleboard/optee_os.git --depth=1 ./tmp/optee_os/
cd ./tmp/optee_os/
make -j4 CFLAGS= LDFLAGS= PLATFORM=k3-j721e CFG_ARM64_core=y
cp -v ./tmp/optee_os/out/arm-plat-k3/core/tee-pager_v2.bin /opt/u-boot/$(TARGETDIR)/
cp -v debian/ipc_echo_testb_mcu1_0_release_strip.xer5f /opt/u-boot/$(TARGETDIR)/
mkdir -p ./tmp/u-boot/
git clone -b $(UB_TAG) https://git.beagleboard.org/beagleboard/u-boot.git --depth=1 ./tmp/u-boot/
cd ./tmp/u-boot/
make CROSS_COMPILE=arm-linux-gnueabihf- $(UB_CONFIG)r5_defconfig O=../r5
make -j5 CROSS_COMPILE=arm-linux-gnueabihf- O=../r5
cd ./tmp/u-boot/
make CROSS_COMPILE=aarch64-linux-gnu- $(UB_CONFIG)a72_defconfig O=../a72
make -j5 CROSS_COMPILE=aarch64-linux-gnu- ATF=/opt/u-boot/$(TARGETDIR)/$(UB_ATF) TEE=/opt/u-boot/$(TARGETDIR)/$(UB_TEE) DM=/opt/u-boot/$(TARGETDIR)/$(UB_DM) O=../a72

partition layout and folder name..

Mounting the fat partition at /boot/firmware was used to better align with what Debian is doing for the Pi

This allows Debian to better control /boot/* and just cp our needed boot files to /boot/firmware in kernel post install scripts..

extlinux.conf configuration

why extlinux.conf? u-boot/doc/README.distro at master · ARM-software/u-boot · GitHub

This is located under /boot/firmware/extlinux/extlinux.conf (from within u-boot’s context it’s the 1st partition /extlinux/extlinux.conf)

eMMC:

label Linux eMMC
    kernel /Image
    append console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02800000 root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait net.ifnames=0
    fdtdir /
    initrd /initrd.img

microSD

label Linux microSD
    kernel /Image
    append console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02800000 root=/dev/mmcblk1p2 ro rootfstype=ext4 rootwait net.ifnames=0
    fdtdir /
    initrd /initrd.img

pxe “overlay” support was added very late (just a week or two before bbb.io announced this board..) in

    fdtoverlays /overlays/k3-j721e-beagleboneai64-RPi-7inch-panel.dtbo

Multiple overlays can be applied in order:

    fdtoverlays /overlays/first-overlay.dtbo /overlays/second-overlay.dtbo /overlays/third-overlay.dtbo

When working on overlays, make sure to use the serial debugger, when U-Boot fails to apply an overlay there is NO backup boot option, board will end up stuck in U-Boot, waiting for some user intervention.

Regards,

Looks like the only closed proprietary firmware needed to boot is the SYSFS image. Do you think it is feasible to replace it with open firmware?

Regards,
Dimitar

That firmware “DM” comes from another TI git repo, i’m pretty sure it’s open source, just a pain to build…

to date, i’ve been copying it from TI’s SDK build… But now that the boards are out, we need to show how it’s built.

Regards,

Edit… @dinux oh fun, Free RTOS and a custom build system… processor-sdk/coresdk_rtos_releases - Unnamed repository; edit this file 'description' to name the repository.

Edit2 sysfw stuff here… [PATCH RFC v3 00/11] Integration of tiboot3.bin, sysfw.itb and

That’s great, thanks! I would love to use the board with fully free software stack.

I tried to download using repo, but the manifests seem to point to internal-only TI servers:

$ repo init -u https://git.ti.com/git/processor-sdk/coresdk_rtos_releases.git -m j721e/psdk.xml
$ repo sync
ssh: Could not resolve hostname bitbucket.itg.ti.com: Name or service not known