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