Hi all,
Hope someone who know this top reads this.
I made the pflashs.img with u-boot-spl and used it as the flash memory (from
address 0x ~). So the u-boot-spl program runs.
And I guess I have to load (using qemu command option) a kind of image that
contains u-boot proper and make the u-boot-spl to load u-boot proper at another
address from that image and jump to that address.
How can I make that image using mkimage if I have the u-boot.bin file?
I think the command should start like 'mkimage -O u-boot -T ... ' but I don't
know what type I should give for -T option.
I will be very much grateful If anyone tells me how to do it.
By the way, I want to check pci_init function once u-boot proper runs and I
found pci_init is called in board_init_r when u-boot proper runs.
Thank you!
Chan Kim
-Original Message-
From: "Chan Kim"
To: "U-Boot Mailing List" ;
;
Cc:
Sent: 2023-05-08 (월) 18:40:49 (UTC+09:00)
Subject: How should I build u-boot for qemu_arm64_defconfig and run it on arm64
qemu virt machine?
Hello experts,
Today I tried this test from scratch.
In my environment, CROSS_COMPILE=aarch64-none-elf.
Under u-boot directory, when I do 'make CROSS_COMPILE=aarch64-none-elf-
qemu_arm64_defconfig' and 'make -j28', I see this error at the end.
aarch64-none-elf-ld.bfd: invalid length for memory region .sram
after examining it, I added in include/configs/qemu-arm.h,
#define CONFIG_SPL_MAX_SIZE value to 0x40
After fixing it, I got another similar error for .sdram and I added in
include/configs/qemu-arm.h,
#define CONFIG_SPL_BSS_START_ADDR 0x4080
#define CONFIG_SPL_BSS_MAX_SIZE 0x10
Now I can do 'make -j28' with no error.
But I found I have both 'u-boot' and 'spl/u-boot-spl' generated and I
realized for this qemu_arm64_defconfig, CONFIG_SPL=y and I get both u-boot
proper and u-boot spl. (SPL: secondary program loader, proper: main
bootloader. SPL runs first and the proper runs next).
Until now I did objcopy of the u-boot(proper) and then extended it to
0x40 byte. (the pflash size of the virt machine which starts at
address
0x).
$ aarch64-none-elf-objcopy -O binary u-boot.v2022.07/u-boot pflashp.img
$ dd if=/dev/zero of=pflashp.img bs=1c count=1 seek=67108863
And the qemu command is :
$ qemu-6.2.0/build/aarch64-softmmu/qemu-system-aarch64 -machine
virt,gic-version=max,secure=on,virtualization=true -cpu max -drive
if=pflash,file=pflashp.img -m 2G -nographic -device
loader,file=linux-5.15.68/arch/arm64/boot/Image,addr=0x8020
The qemu virt machine has RAM from 0x4000 until 0xbfff.
And I could see u-boot runs and it waits input for 3 seconds and outputs
the
u-boot prompt.
This is running u-boot (proper) from address 0 but since I have u-boot-spl
too, I should run it from u-boot-spl first, shouldn't I?
How am I supposed to run u-boot-spl and u-boot on this qemu machine? (from
lds files, it looks like they both start at address 0).
(qemu machine is arm64 virt machine, qemu 6.2.0).
Thank you.
Chan Kim