Radxa Zero summary (usual and unusual source of errors)

A lot of questions and errors have same reasons, let collect usual and unusual source of errors.

  1. Radxa Zero aka Amlogic Meson G12A (S905Y2) hardware bootloader will look for next stage bootloader on eMMC (and than SD) at sector one (1 sector = 512 Byte, sector count start with 0)

  2. If eMMC exist it is better to zero out eMMC to reduce source of errors and use only a SD at first beginning. SD layout/content is easier to create/verify at different host.

  3. In this eco system HW bootloader usual find a next-stage bootloader called U-Boot at sector one.

  4. If using partition layout keep in mind to use obsolete MSDOS partition layout and not modern GPT layout because GPT will write itself to sector one.
    Hence HW bootloader will not find any working next-stage bootloader.
    Also leave room for U-Boot content, feature-rich U-Boot size is usual below 4MiB, so very first partition must start at 4MiB or higher.

  5. If U-Boot is starting keep in mind that usually U-Boot listing to serial0 / ttyAML0 / UART_AO_A for abort AUTOBOOT and allow manual kernel selection.
    Hence if you connect a chatty device e.g. GPS receiver to serial0 this device maybe interrupt U-Boot Autoboot.

  6. Use serial0 / ttyAML0 / UART_AO_A for U-Boot and Kernel output and debugging only and active serial1 / ttyAML1 / UART_AO_B for other devices.

  7. For activation serial1 you may need add additional devicetree info to kernel. U-Boot usually support DISTRO cmd, which mean “extlinux” subdirectory at boot volume. An entry in extlinux.conf can look like:

label kernel (console at ttyAML0/UART_AO_A/PIN8tx/PIN10rx)
kernel /kernel
initrd /initmpfs
devicetree /dts/meson-g12a-radxa-zero.dtb
# enable ttyAML1/UART_AO_B/PIN35tx/PIN37rx
devicetree-overlay /dts/overlay/radxa-zero-uart-ao-b-89.dtbo
append console=ttyAML0,115200 rw rootwait rootfstype=ext4 root=/dev/mmcblk0p2

  1. For Radxa Zero Hardware revision V1.51 additional radxa-zero-uart-ao-b-89.dtbo will break PowerLED support because uart-ao-b dtbo include HW <V1.51 PowerLed stuff, but this is easy to fix.

  2. Let PowerLED work for you. I usually use this latter

  • HW start -> PowerLED on
  • U-Boot start -> PowerLED on (U-Boot: gpio set aobus-banks10)
  • Kernel start -> PowerLED periodically blink (kernel: led heartbeat mode)
  • OS started -> PowerLED flicker if IO (kernel: led mmc0 mode)
  1. Every distro may work silent different (include different errors).
    At best using own U-Boot and own kernel compilation. Because mainline U-Boot and Linux Kernel do not support this eco system currently you need patched mainline.
    Fortunately Radxa team do this effort and provide a patched mainline U-Boot and Linux Kernel at https://github.com/radxa-repo/bsp/
1 Like