Questions about using my own Arm Trusted Firmware on Rock 5 ITX

Hi community,

I want to use my customized Arm Trusted Firmware in Rock 5 ITX. I follow the guide in edk2-rk3588 and do following things:

  • Compile the firmware with customized Arm Trusted Firmware (done)

  • Install the supported OS (failed)

    • Following the supported OS, I tried to install Armbian rk3588-live-iso in ROCK 5 ITX.

    • However, the balenaEtcher suggests that the operating system iso is missing a partition table (i.e., non-bootable).

    • Then I ignored the warning and flashed the iso into my SD card. As expected, the Rock 5 ITX still uses the default image in the integrated eMMC module and cannot boot from my SD card image.

  • Install the firmware image (haven’t done it)

    • I read the guide Flash the firmware, which suggests that I can flash the UEFI image into a removable SD card or the integrated eMMC module.

    • I want to flash the firmware into the SD card as I need to modify the Arm Trusted Firmware frequently. In this way, I must flash the supported OS into the integrated eMMC module. However, since I can’t boot the Armbian rk3588-live-iso from the SD card, I haven’t tried to flash it into the eMMC module.

I would appreciate it if someone in the community has experience with flashing ROCK 5 ITX UEFI and can give me some suggestions. Thank you very much!

This may help maybe: https://wtarreau.blogspot.com/2024/05/an-affordable-10gbe-capable-nas.html

I managed to force the board to boot from SD. It’s not trivial, you need to connect a pin to ground via a 20k resistor. In fact the maskrom button is connected to a SARADC input and 8 different values are recognized. It just turns out that there’s no easy option to force booting from the SD (that would be great). When you look at your board close to the maskrom button, you should touch the resistor here while inserting the power connector:

           ____
      o---[____]---o  <-- here

  +-------------+
  |    /   \    |
==|   |     |   |== <-- or here
  |    \   /    |
  +-------------+

Then it will boot from the SD. I need to document this somewhere.

Thank you for your answer. But based on my experience, ROCK 5 ITX uses the SD card as the first boot device. I don’t need to do such operations.

My understanding is that it always loads the boot loader from the eMMC, and the boot loader then loads your extlinux.conf, kernel, DT and initrd from the SD. That could correspond to your observation in point 1: “the Rock 5 ITX still uses the default image in the integrated eMMC module and cannot boot from my SD card image”.

With the resistor method, the CPU will load the boot loader from the SD, so if the image is correct, it should work. The advantage is that it saves you from having to risk “bricking” your board by flashing an image that does not work.

I think the reason why I can’t boot from sd card is that my image (i.e., my manually combined uefi+iso) is not correct. I have confirmed that my device can boot the os in sd card if I install a correct image in it. So I think the resistor way is not the solution for my case.
I want to find a correct way to create a bootable image by integrating the uefi image and the iso image. However, I don’t know how to do it :frowning:

I doubt it will load an uefi image from the SD, because my understanding is that by default it uses the boot loader from the eMMC which looks for extlinux on the SD. Thus the SD’s boot loader is not used by default. That’s what I’m doing with the resistor, forcing the SoC to load the boot loader from the SD instead of the eMMC.

1 Like

I think you are right. I use lsblk to list the disk on ROCK 5 ITX and get following result:

NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mtdblock0     31:0    0   16M  0 disk
mmcblk1      179:0    0 29.7G  0 disk
├─mmcblk1p1  179:1    0   16M  0 part /config
├─mmcblk1p2  179:2    0  300M  0 part /boot/efi
└─mmcblk1p3  179:3    0 29.4G  0 part /
mmcblk0      179:32   0  7.3G  0 disk
mmcblk0boot0 179:64   0    4M  1 disk
mmcblk0boot1 179:96   0    4M  1 disk
zram0        254:0    0  3.9G  0 disk [SWAP]

The mtdblock0 is the SPI flash. The mmcblk0 is the integrated eMMC and mmcblk1 is my SD card.
I try to break the mtdblock0 (SPI flash) and mmcblk0 (eMMC) but the device can still boot. I guess ROCK 5 ITX uses mmcblk0boot0 and mmcblk0boot1 (maybe there is a uboot image in here) to boot the device defaultly. I will try to see whether your resistor method can help me boot the device with the uefi in SD card.

Yes that’s plausible. You can also check the contents of the mmcblk0boot* devices using xxd -a /dev/mmcblk0boot0. For me both are empty.

These devices are purely virtual and on all boards so far they could be ignored. I doubt the ITX really uses them.