U-boot integration in the bootloader process of Rasperry Pi CM4

Anthony Arrascue anthony.arrascue at gmail.com
Wed Jul 7 10:05:40 CEST 2021


Hello everyone,

I am learning about u-boot and how this works in the Raspberry Pi system.
This is what I understood so far:

- The first stage from the RPI cannot or should be modified. In this stage
the BootROM simply loads the bootloader from the flash EEPROM.
- In the second stage the EEPROM boot loader finds and loads start.elf,
whose task is to load the kernel. It first reads* config.txt* which
contains a kernel parameter. This is where u-boot is "injected".
*kernel=u-boot.bin*

Then u-boot can then in turn load the actual kernel. For a CM4 this would
be "*kernel7l.img*".

I would be super satisfied with this knowledge, but in practice I have
(possibly) seen other ways of integrating u-boot. I am here referring, for
example, to Yocto recipes for the CM4 (meta-raspberrypi / u-boot). The boot
directory of such an image contains: *boot.scr*, *uboot.env*, and *uImage*.

The readable part of boot.scr specifies that uImage will be loaded:




*value bootargs /chosen bootargsfatload mmc 0:1 ${kernel_addr_r} uImageif
test ! -e mmc 0:1 uboot.env; then saveenv; fi;bootm ${kernel_addr_r} -
${fdt_addr}*

config.txt does not contain a kernel parameter.

*So here my questions:*
1) start.elf cannot be modified since it is proprietary. How can it load
u-boot if there is no kernel parameter in config.txt pointing to a binary
u-boot? boot.scr is supposed to run before u-boot.bin. Who reads and
executes boot.scr?
2) is uImage just another name for u-boot.bin?
3) In this scheme how does u-boot know it should load "*kernel7l.img*"?
4) Are there other ways of integrating u-boot in a RaspberryPi? Is there
any documentation which describes these different integration schemes?

Thank you very much for your help!

Best,

Anthony Arrascue


More information about the U-Boot mailing list