[BBAI64] Factory eMMC U-Boot always runs first; holding BOOT does not force SD card U-Boot source

Holding BOOT still starts factory 2022 eMMC U-Boot. I cannot get the first stage bootloader source to be from my SD card. I cannot boot or flash modern SD images.

I’m confused about how the BOOT button actually changes the boot path on BeagleBone AI-64.

From the BBAI64 Boot config diagram:

It looks like holding BOOT makes the SD card the only boot option (MMC/SD as both primary and backup). From my understanding, there should be no way the eMMC boots… unless the MMC/SD firmware explicitly bounces the boot back to the eMMC.

What I’m seeing instead:

Note the board still has the original 2022 U-Boot on eMMC. This is a fresh factory board never touched.

  • I hold BOOT, apply power, and that old 2022 eMMC U-Boot still starts.
  • The 2022 eMMC U-boot then tries to boot my Yocto image from the SD card.
  • Boot then fails because that old U-Boot cannot load /k3-j721e-beagleboneai64.dtb… my yocto image does not have this dtb at root.

My expectation was that with BOOT held on power cycle, the eMMC U-Boot would never run at all, ROM / SoC baked early boot would load everything from the SD card. U-boot on my SD card would then apply and load device tree stuff, and then fire up Linux.

Questions:

  1. Is there a reliable way to force a full boot chain (tiboot3 / tispl / U-Boot) from the MMC/SD on this board? Importantly, this is without any involvement of U-boot on the eMMC …From my understanding, the BOOT button should force this, but does not.
  2. How can I get modern U-boot on the eMMC? I have attempted booting BBAI64 Debian 13.5 2026-05-19 Minimal (v6.12.x-ti) - BeagleBoard and BBAI64 Debian 13.3 2026-02-12 Minimal Flasher (v6.12.x-ti) - BeagleBoard without success… While holding the BOOT button down, the ancient 2022 U-Boot is still the first bootloader to kick off, and it cannot load the newest beagle images… Same errors as when I attempt to load my Yocto compile SD card images, no k3-j721e-beagleboneai64.dtb at root on my SD card.
  3. Is there some beagle hardware bug in how the BOOT button is wired on this device?
  4. Maybe the specific new board I have has a malfunctioning BOOT button?

Logs
emmc-with-2022-firmware-no-boot-button.txt (9.6 KB)
yocto-on-sd-emmc-with-2022-firmware-no-boot-button.txt (11.0 KB)
yocto-on-sd-emmc-with-2022-firmware-with-boot-button.txt (11.0 KB)
yocto-on-sd-emmc-with-2022-firmware-with-reset+boot-button.txt (10.6 KB)
emmc-after-apt-ugrade+opt-u-boot-bb-u-boot-beagleboneai64-install-emmc-sh-no-boot-button.txt (11.0 KB)

The best method, insert power, hold boot, toggle reset, lift up boot.

The R5 is usually so quick to read from the eMMC, that it can boot up before the user button is detected by the bootrom on a fresh power up, from any small voltage on the pin.

One sure way, when you boot into your image.. clear the boot0 partition on the eMMC:

if [ -b /dev/mmcblk0 ] ; then
	mmc bootpart enable 1 2 /dev/mmcblk0
	mmc bootbus set single_backward x1 x8 /dev/mmcblk0
	mmc hwreset enable /dev/mmcblk0

	echo "Clearing eMMC boot0"

	echo '0' >> /sys/class/block/mmcblk0boot0/force_ro

	echo "dd if=/dev/zero of=/dev/mmcblk0boot0 count=32 bs=128k"
	sudo dd if=/dev/zero of=/dev/mmcblk0boot0 count=32 bs=128k

	echo "dd if=/boot/firmware/tiboot3.bin of=/dev/mmcblk0boot0 bs=128k"
	sudo dd if=/boot/firmware/tiboot3.bin of=/dev/mmcblk0boot0 bs=128k
	sync

btw, in theory with your yocto image, you should be able to use: GitHub - beagleboard/u-boot-beagleboneai64 · GitHub

to force upgrade it:

wget https://raw.githubusercontent.com/beagleboard/u-boot-beagleboneai64/refs/heads/main/public/get_n_install.sh ; \
chmod +x get_n_install.sh ; \
sudo ./get_n_install.sh

(noticed how old that is.. crap i need to push a update soon.)

Regards,

Hi Robert,

I was working with Kevin on this. He was working with yocto and I was working with the beagle flasher image BBAI64 Debian 13.3 2026-02-12 Minimal Flasher (v6.12.x-ti) to get the modern boot loader on the emmc.

I found that when I ran the get_n_install.sh script on the AI64’s emmc:

The emmc was left with a mixed boot chain:

  • new tiboot3.bin
  • old tispl.bin + old u-boot.img in execution path

To get the beagle flasher image to boot with the mixed boot chain, I did this on the flasher SD card:

# 1. Copy DTB to /
cp ti/k3-j721e-beagleboneai64.dtb .

# 2. Decompress kernel
gunzip -c Image.gz > Image

# 3. Fix extlinux.conf (change all Image.gz → Image)
sed -i 's|kernel /Image\.gz|kernel /Image|g' extlinux/extlinux.conf

This let me flash the emmc and then once it was updated to 13.3 2026-02-12 minimal, I was able to boot from the SD with the minimal image BBAI64 Debian 13.5 2026-05-19 Minimal (v6.12.x-ti).

We will continue to review. Our goal is to have a production ready imager to rapidly deploy with.

Regards,

Fred

Update: Have to run this to get 13.5 2026-05-19 minimal stable:

sudo systemctl disable --now iwd
sudo systemctl mask iwd
sudo systemctl disable --now bb-usb-gadgets.service
sudo systemctl mask bb-usb-gadgets.service
sudo reboot