My beaglebones black's eMMC disapears after enabling uboot overlays (when booting from SD)

Board: BeagleBone Black Old system: Debian 10 (worked) New system: Debian 13 (booting from microSD), kernel 6.15.11-bone27 Goal: Boot with eMMC visible (mmcblk1) and UARTs enabled.

Problem

When I uncomment this in /boot/uEnv.txt:

enable_uboot_overlays=1

the serial debug shows:

mmc1: Failed to initialize a non-removable card

and eMMC (/dev/mmcblk1) disappears. If I comment it out, eMMC works—but my UARTs aren’t initialized at boot (I need UART1/2/4).

I tried adding the eMMC overlay explicitly (with and without disabling the virtual eMMC overlay), but it didn’t help:

uboot_overlay_addr3=/lib/firmware/BB-BONE-eMMC1-01-00A0.dtbo
#disable_uboot_overlay_emmc=1   # tried both commented and uncommented

What I expect / ask

  • Why does enabling U-Boot overlays make the eMMC fail to initialize on Debian 13?
  • What’s the correct way to have eMMC + UARTs working together with U-Boot overlays?

Current /boot/uEnv.txt (Debian 13)

#Docs: http://elinux.org/Beagleboard:U-boot_partitioning_layout_2.0

uname_r=6.15.11-bone27
#uuid=
#dtb=

###U-Boot Overlays###
###Documentation: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian#U-Boot_Overlays
###Master Enable
enable_uboot_overlays=1
###
###Overide capes with eeprom
uboot_overlay_addr0=/lib/firmware/BB-UART2-00A0.dtbo
uboot_overlay_addr1=/lib/firmware/BB-UART4-00A0.dtbo
uboot_overlay_addr2=/lib/firmware/BB-UART1-00A0.dtbo
uboot_overlay_addr3=/lib/firmware/BB-BONE-eMMC1-01-00A0.dtbo
###
###Additional custom capes
#uboot_overlay_addr4=<file4>.dtbo
#uboot_overlay_addr5=<file5>.dtbo
#uboot_overlay_addr6=<file6>.dtbo
#uboot_overlay_addr7=<file7>.dtbo
###
###Custom Cape
#dtb_overlay=<file8>.dtbo
###
###Disable auto loading of virtual capes (emmc/video/wireless/adc)
#disable_uboot_overlay_emmc=1
disable_uboot_overlay_video=1
disable_uboot_overlay_audio=1
disable_uboot_overlay_wireless=1
disable_uboot_overlay_adc=1
###
###PRUSS OPTIONS
###pru_rproc (4.14.x-ti kernel)
#uboot_overlay_pru=AM335X-PRU-RPROC-4-14-TI-00A0.dtbo
###pru_rproc (4.19.x-ti kernel)
uboot_overlay_pru=AM335X-PRU-RPROC-4-19-TI-00A0.dtbo
###pru_uio (4.14.x-ti, 4.19.x-ti & mainline/bone kernel)
#uboot_overlay_pru=AM335X-PRU-UIO-00A0.dtbo
###
###Cape Universal Enable
enable_uboot_cape_universal=1
###
###Debug: disable uboot autoload of Cape
#disable_uboot_overlay_addr0=1
#disable_uboot_overlay_addr1=1
#disable_uboot_overlay_addr2=1
#disable_uboot_overlay_addr3=1
###
###U-Boot fdt tweaks... (60000 = 384KB)
#uboot_fdt_buffer=0x60000
###U-Boot Overlays###

console=ttyS0,115200n8
cmdline=fsck.repair=yes earlycon coherent_pool=1M net.ifnames=0 lpj=1990656 rng_core.default_quality=100 systemd.remount-fs=no rw

#In the event of edid real failures, uncomment this next line:
#cmdline=fsck.repair=yes earlycon coherent_pool=1M net.ifnames=0 lpj=1990656 rng_core.default_quality=100 video=HDMI-A-1:1024x768@60e

#Use an overlayfs on top of a read-only root filesystem:
#cmdline=fsck.repair=yes earlycon coherent_pool=1M net.ifnames=0 lpj=1990656 rng_core.default_quality=100 overlayroot=tmpfs

##enable Generic eMMC Flasher:
#cmdline=init=/usr/sbin/init-beagle-flasher

Old (working) /boot/uEnv.txt from Debian 10

#Docs: http://elinux.org/Beagleboard:U-boot_partitioning_layout_2.0

uname_r=6.15.11-bone27
#uuid=
#dtb=

###U-Boot Overlays###
###Documentation: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian#U-Boot_Overlays
###Master Enable
enable_uboot_overlays=1
###
###Overide capes with eeprom
uboot_overlay_addr0=/lib/firmware/BB-UART2-00A0.dtbo
uboot_overlay_addr1=/lib/firmware/BB-UART4-00A0.dtbo
uboot_overlay_addr2=/lib/firmware/BB-UART1-00A0.dtbo
###
#uboot_overlay_addr0=<file0>.dtbo
#uboot_overlay_addr1=<file1>.dtbo
#uboot_overlay_addr2=<file2>.dtbo
#uboot_overlay_addr3=<file3>.dtbo
###
###Additional custom capes
#uboot_overlay_addr4=<file4>.dtbo
#uboot_overlay_addr5=<file5>.dtbo
#uboot_overlay_addr6=<file6>.dtbo
#uboot_overlay_addr7=<file7>.dtbo
###
###Custom Cape
#dtb_overlay=<file8>.dtbo
###
###Disable auto loading of virtual capes (emmc/video/wireless/adc)
#disable_uboot_overlay_emmc=1
disable_uboot_overlay_video=1
disable_uboot_overlay_audio=1
disable_uboot_overlay_wireless=1
disable_uboot_overlay_adc=1
###PRUSS OPTIONS
###pru_rproc (4.14.x-ti kernel)
#uboot_overlay_pru=AM335X-PRU-RPROC-4-14-TI-00A0.dtbo
###pru_rproc (4.19.x-ti kernel)
uboot_overlay_pru=AM335X-PRU-RPROC-4-19-TI-00A0.dtbo
###pru_uio (4.14.x-ti, 4.19.x-ti & mainline/bone kernel)
#uboot_overlay_pru=AM335X-PRU-UIO-00A0.dtbo
###
###Cape Universal Enable
enable_uboot_cape_universal=1
###
###Debug: disable uboot autoload of Cape
#disable_uboot_overlay_addr0=1
#disable_uboot_overlay_addr1=1
#disable_uboot_overlay_addr2=1
#disable_uboot_overlay_addr3=1
###
###U-Boot fdt tweaks... (60000 = 384KB)
#uboot_fdt_buffer=0x60000
###U-Boot Overlays###

console=ttyS0,115200n8
cmdline=fsck.repair=yes earlycon coherent_pool=1M net.ifnames=0 lpj=1990656 rng_core.default_quality=100 systemd.remount-fs=no rw

#In the event of edid real failures, uncomment this next line:
#cmdline=fsck.repair=yes earlycon coherent_pool=1M net.ifnames=0 lpj=1990656 rng_core.default_quality=100 video=HDMI-A-1:1024x768@60e

#Use an overlayfs on top of a read-only root filesystem:
#cmdline=fsck.repair=yes earlycon coherent_pool=1M net.ifnames=0 lpj=1990656 rng_core.default_quality=100 overlayroot=tmpfs

##enable Generic eMMC Flasher:
#cmdline=init=/usr/sbin/init-beagle-flasher

Relevant boot log

debug: [enable_uboot_overlays=1] ...
uboot_overlays: Switching too: dtb=am335x-boneblack-uboot.dtb ...
uboot_overlays: loading /lib/firmware/BB-UART2-00A0.dtbo ...
uboot_overlays: loading /lib/firmware/BB-UART4-00A0.dtbo ...
uboot_overlays: loading /lib/firmware/BB-UART1-00A0.dtbo ...
uboot_overlays: loading /lib/firmware/BB-BONE-eMMC1-01-00A0.dtbo ...
uboot_overlays: loading /lib/firmware/BB-BONE-eMMC1-01-00A0.dtbo ...
...
mmc1: Failed to initialize a non-removable card

Things I tried (all permutations)

  • Comment/uncomment:
    • enable_uboot_cape_universal=1
    • uboot_overlay_addr3=/lib/firmware/BB-BONE-eMMC1-01-00A0.dtbo
    • disable_uboot_overlay_emmc=1
    • uboot_overlay_pru=AM335X-PRU-RPROC-4-19-TI-00A0.dtbo

Still can’t get eMMC + UARTs to work together with enable_uboot_overlays=1.

Any known changes in Debian 13/U-Boot overlay behavior that would cause eMMC to fail? What’s the recommended overlay setup so eMMC initializes and UARTs are enabled?

U-boot on your eMMC is too old…

Where can I find the new one?

the uboot on my emmc is the one from debian 10. The uboot in the SD is from debian 13, isn’t it?

I’ve found the issue!

First, I finally copied the device tree overlay files from the correct place /boot/dtbs/6.16.5-bone16, and then I fixed the GPIO pin configuration.

My uEnv.txt:

...
enable_uboot_overlays=1
###
###Overide capes with eeprom
uboot_overlay_addr0=/lib/firmware/BB-UART2-00A0.dtbo
uboot_overlay_addr1=/lib/firmware/BB-UART4-00A0.dtbo
uboot_overlay_addr2=/lib/firmware/BB-UART1-00A0.dtbo
uboot_overlay_addr3=/lib/firmware/BB-BONE-eMMC1-01-00A0.dtbo
... 

#disable_uboot_overlay_emmc=1
disable_uboot_overlay_video=1
disable_uboot_overlay_audio=1
disable_uboot_overlay_wireless=1
disable_uboot_overlay_adc=1
...
uboot_overlay_pru=AM335X-PRU-UIO-00A0.dtbo
###
###Cape Universal Enable
enable_uboot_cape_universal=1
...

Now my strugle is how to configure the device tree overlay.
I need P9_19 to be my RS485 RTS, but I can’t figure out how to switch it on and off!

1 Like