
On Thu, 29 Aug 2024 at 10:40, Tomaž Zaman tomaz@mono.si wrote:
I get this:
No UEFI binary known at 0x81000000
Are you building the kernel with all the appropriate UEFI shim bits? Installing the EFI kernel pieces etc?
Sorry, I can't help with kernel build process bits, you'll need to google that.
*Tomaž Zaman, *CEO Mono Technologies Inc. +386 30 651 645
On 29 Aug 2024 at 11:38 +0200, Peter Robinson pbrobinson@gmail.com, wrote:
On Thu, 29 Aug 2024 at 10:31, Tomaž Zaman tomaz@mono.si wrote:
Doesn’t work - at least not correctly:
=> fatload mmc 0:1 $fdt_addr_r /boot/dtb/fsl-ls1046a-rdb-sdk.dtb 31793 bytes read in 4 ms (7.6 MiB/s) => fatload mmc 0:1 $kernel_addr_r /EFI/boot/grubaa64.efi 3978688 bytes read in 168 ms (22.6 MiB/s) => setenv fman_ucode => bootefi $kernel_addr_r $fdt_addr_r Failed to load EFI variables WARNING failed to get smmu node: FDT_ERR_NOTFOUND WARNING failed to get smmu node: FDT_ERR_NOTFOUND Booting /\EFI\boot\grubaa64.efi Welcome to GRUB!
Because of those FDT_ERR_NOTFOUND kernel reports a bunch of errors and doesn’t boot with all the hardware support I need it to.
On the other hand, if I run the same kernel/devicetree/initramfs with booti, bypassing the Grub completely, it works fine. The problem is, I need Grub2 for his project.
What if you boot the kernel directly using bootefi rather than booti?
*Tomaž Zaman, *CEO Mono Technologies Inc. +386 30 651 645
On 29 Aug 2024 at 10:02 +0200, Peter Robinson pbrobinson@gmail.com, wrote:
On Thu, 29 Aug 2024 at 05:14, Tomaž Zaman tomaz@mono.si wrote:
I’m working on an arm64 board with an NXP LS1046A CPU and I simply cannot get Grub to load a different device tree than the one that’s provided to it by the EFI Stub.
=> fatload mmc 0:1 $kernel_addr_r /EFI/boot/grubaa64.efi => fatload mmc 0:1 $fdt_addr_r /boot/dtb/fsl-ls1046a-rdb-sdk.dtb => bootefi $kernel_addr_r $fdt_addr_r
At his point, I get a couple of errors like “smmu node not found”.
However, if I, instead of "fsl-ls1046a-rdb-sdk.dtb” use "fsl-ls1046a-rdb.dtb”, then I get to Grub without any errors.
And this is where I encounter the issue. Because I would like to use a different DTB for booting Linux than the one that’s provided by the EFI configuration table, I set
devicetree /boot/dtb/fsl-ls1046a-rdb-sdk.dtb linux /boot/vmlinuz-6.6.3-arm64 initrd /boot/initrd.img-6.6.3-arm64
In this case, the devicetree instruction gets ignored completely, and before I see kernel loading, the message “Using FDT from the EFI configuration table"
Is there a way for me to override/replace the device tree that u-boot passed to Grub? I tried passing the “dtb=“ parameter to the kernel boot command, but in that case, I get "EFI stub: ERROR: Failed to handle fs_proto” because kernel when booting doesn’t appear to have access to the same filesystem that Grub does.
Why don't you load a new one into memory with u-boot and then grub will already have the one you want to use and grun doesn't need to do anything. Something like this on the U-Boot command line would load the DT and grub and start to boot:
load mmc 0:1 ${kernel_addr_r} EFI/BOOT/BOOTAA64.EFI load mmc 0:1 ${fdt_addr_r} dtb/${fdtfile} bootefi ${kernel_addr_r} ${fdt_addr_r}
You'll need to adjust for storage, partitions, file paths etc.
Thank you!
(this is my first time using *any* mailing list, so apologies if this is the wrong address to send this question to)
Tomaž Zaman, CEO Mono Technologies Inc. +386 30 651 645
[cid:18EB2FEE485A4DD7A1CE716CE14FCBC7]