ubldr to kernel handoff fails

glenn pygr at sonic.net
Wed Sep 23 04:02:35 UTC 2020


Problem: ubldr fails to pass control to a FreeBSD kernel when U-boot 2018.01 is used but succeeds with U-boot 2013.01

Details: I've built a working OPNsense 20.7 installation on a HardenedBSD 12.1 OS running off an SD card in a SolidRun ClearFog Base. The U-boot for this is a customization of 2013.01. Everything works as expected, but I want to update U-boot to 2018.01.

To that end I use dd to copy over a custom 2018.01 U-boot image to the beginning of the SD card. The FAT partition and the UFS partition are untouched by this.



U-boot proper and ubldr function as expected. When given the location of a dtb that I know that works, the boot progress halts immediately after: 
	
	Kernel entry at 0xc00180...
	Kernel args: (null)

is printed to the serial console.

Removing the SD card and mounting the UFS file system on another FreeBSD system, I've checked that "readelf /mnt/boot/kernel/kernel" reports that the kernel entry address is indeed 0xc00180.

Some months ago I ran into a problem that had the same symptoms, but that turned out to be a device tree issue where the serial console wasn't properly configured. That doesn't seem to be the case here, since the failed and successful systems use the same dtb file.

A possible explanation occurs to me that the underlying U-boot API that ubldr depends on has changed in its functionality so that ubldr no longer works properly.

This is a baffling issue for me and I would appreciate any ideas anyone has on the matter.


More information about the freebsd-arm mailing list