[Question] build error "undefined reference to `fdtdec_setup_memory_banksize'" (running u-boot and linux on qemu arm64 machine using SPL BOOT from RAM mode)
Chan Kim
ckim at etri.re.kr
Wed May 3 11:07:51 CEST 2023
Hello u-boot experts,
I tried running u-boot on qemu arm64 machine and wanted to make u-boot-spl
automatically switch to linux.
(I asked this question on qemu-discuss email, but no answer yet, so I ask it
here with some update).
I used u-boot v2022.07 and I wanted to use SPL mode and 'Boot from RAM'
mode. So when calling qemu, I give option so that linux kernel image is at
certain DRAM address already, and I wish u-boot will switch to the kernel
address.
Originally, the qemu-arm64 board doesn't support SPL so I added/fixed some
things.
I added in arch/arm/Kconfig, under config ARCH_QEMU,
select SPL
select RAM
select SPL_DM
select SUPPORT_SPL
select SPL_RAM_SUPPORT
select SPL_RAM_DEVICE
select SPL_OS_BOOT
select SPL_OF_LIBFDT
select OF_LIBFDT
select SPL_LIBGENERIC_SUPPORT
To make some errors in the link script, I added in
include/configs/qemu-arm.h,(in the qemu machine, DRAM seemd to start at
0x40000000 and it said dtb is placed at the first 2MB)
#define CONFIG_SYS_INIT_RAM_ADDR 0x40200000
#define CONFIG_SPL_MAX_SIZE 0x400000
#define CONFIG_SPL_BSS_START_ADDR 0x40800000
#define CONFIG_SPL_BSS_MAX_SIZE 0x100000
and I added this function at board/emulation/qemu-arm/qemu-arm.c to avoid
compile error(undefined ref for spl_boot_device).
#include <asm/spl.h>
u32 spl_boot_device(void)
{
return BOOT_DEVICE_NONE;
}
This is how I compile u-boot-spl.
$ make CROSS_COMPILE=aarch64_none_elf- qemu_arm64_defconfig
$ make CROSS_COMPILE=aarch64_none_elf- -j28
But I see this compile errors (see at the bottom).
ENVC include/generated/env.txt
UPD include/generated/timestamp_autogenerated.h
CFGCHK u-boot.cfg
ENVP include/generated/env.in
ENVT include/generated/environment.h
OFCHK .config
CC cmd/version.o
CC env/common.o
AR cmd/built-in.o
CC lib/efi_loader/dtbdump.o
CC lib/efi_loader/initrddump.o
CC lib/efi_selftest/efi_selftest_miniapp_exception.o
CC lib/efi_selftest/efi_selftest_miniapp_exit.o
CC lib/efi_selftest/efi_selftest_miniapp_return.o
LD lib/efi_selftest/efi_selftest_miniapp_return_efi.so
aarch64-none-elf-ld.bfd LD
lib/efi_selftest/efi_selftest_miniapp_exception_efi.so
: warning: -z norelro ignored
aarch64-none-elf-ld.bfd: warning: -z norelro ignored
OBJCOPY lib/efi_selftest/efi_selftest_miniapp_return.efi
lib/efi_selftest/../../tools/file2include
lib/efi_selftest/efi_selftest_miniapp_return.efi > \
lib/efi_selftest/efi_miniapp_file_image_return.h
OBJCOPY lib/efi_selftest/efi_selftest_miniapp_exception.efi
lib/efi_selftest/../../tools/file2include
lib/efi_selftest/efi_selftest_miniapp_exception.efi > \
lib/efi_selftest/efi_miniapp_file_image_exception.h
AR env/built-in.o
CC lib/efi_selftest/efi_selftest_startimage_return.o
CC lib/efi_selftest/efi_selftest_exception.o
LD lib/efi_selftest/efi_selftest_miniapp_exit_efi.so
aarch64-none-elf-ld.bfd: warning: -z norelro ignored
OBJCOPY lib/efi_selftest/efi_selftest_miniapp_exit.efi
lib/efi_selftest/../../tools/file2include
lib/efi_selftest/efi_selftest_miniapp_exit.efi > \
lib/efi_selftest/efi_miniapp_file_image_exit.h
CC lib/efi_selftest/efi_selftest_load_file.o
CC lib/efi_selftest/efi_selftest_loadimage.o
CC lib/efi_selftest/efi_selftest_startimage_exit.o
LD lib/efi_loader/initrddump_efi.so
aarch64-none-elf-ld.bfd: warning: -z norelro ignored
OBJCOPY lib/efi_loader/initrddump.efi
LD lib/efi_loader/dtbdump_efi.so
aarch64-none-elf-ld.bfd: warning: -z norelro ignored
OBJCOPY lib/efi_loader/dtbdump.efi
CC spl/common/spl/spl.o
AR lib/efi_selftest/built-in.o
AR lib/built-in.o
AR spl/common/spl/built-in.o
LD spl/u-boot-spl
aarch64-none-elf-ld.bfd: drivers/core/device.o: in function `alloc_priv':
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/core/device.c:308:
undefined reference to `memalign'
aarch64-none-elf-ld.bfd:
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/core/device.c:340:
undefined reference to `calloc'
aarch64-none-elf-ld.bfd: drivers/core/device.o: in function
`device_bind_common':
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/core/device.c:64:
undefined reference to `calloc'
aarch64-none-elf-ld.bfd:
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/core/device.c:118:
undefined reference to `calloc'
aarch64-none-elf-ld.bfd:
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/core/device.c:137:
undefined reference to `calloc'
aarch64-none-elf-ld.bfd:
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/core/device.c:151:
undefined reference to `calloc'
aarch64-none-elf-ld.bfd:
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/core/device.c:234:
undefined reference to `free'
aarch64-none-elf-ld.bfd: drivers/core/uclass.o: in function `uclass_add':
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/core/uclass.c:72:
undefined reference to `calloc'
aarch64-none-elf-ld.bfd:
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/core/uclass.c:78:
undefined reference to `calloc'
aarch64-none-elf-ld.bfd:
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/core/uclass.c:101:
undefined reference to `free'
aarch64-none-elf-ld.bfd:
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/core/uclass.c:106:
undefined reference to `free'
aarch64-none-elf-ld.bfd: drivers/firmware/psci.o: in function `psci_bind':
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/firmware/psci.c:101:
undefined reference to `device_is_compatible'
aarch64-none-elf-ld.bfd:
/home/ckim/SuperCom/U-BOOT/temp/u-boot.v2022.07/drivers/firmware/psci.c:102:
undefined reference to `device_is_compatible'
aarch64-none-elf-ld.bfd: u-boot-spl: hidden symbol `calloc' isn't defined
aarch64-none-elf-ld.bfd: final link failed: bad value
make[1]: *** [scripts/Makefile.spl:525: spl/u-boot-spl] Error 1
make: *** [Makefile:2106: spl/u-boot-spl] Error 2
How can I remove this kind of errors?
If someone could provide me an anser or hind, I will be very grateful.
Thank you!
Chan Kim
More information about the U-Boot
mailing list