On 2014年09月18日 14:56, Khem Raj wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 9/16/14 8:06 AM, Kai Kang wrote:
Make aarch aarch64 kernel depend on libgcc. In arch/arm64/Makefile, it
adds LIBGCC to libs-y:
LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
libs-y += $(LIBGCC)
If build without libgcc, the value of LIBGCC is just libgcc.a without
parent directory. linux-yocto fails to build:
| LD vmlinux.o
| aarch64-poky-linux-ld.bfd: cannot find libgcc.a: No such file or directory
Add libgcc to aarch64 kernel dependency.
really ? usually kernel has its own routines to substitute libgcc needs.
why is it different here.
It calls script link-vmlinux.sh to link vmlinux.o. It runs function
vmlinux_link() in the script:
if [ "${SRCARCH}" != "um" ]; then
${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
-T ${lds} ${KBUILD_VMLINUX_INIT} \
--start-group ${KBUILD_VMLINUX_MAIN} --end-group ${1}
var KBUILD_VMLINUX_MAIN is defined in top Makefile:
export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y) $(drivers-y) $(net-y)
And arch aarch64 adds LIBGCC to var libs-y:
LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
libs-y += $(LIBGCC)
If doesn't do libgcc:popualte_sysroot, LIBGCC just get value 'libgcc.a'
rather than 'absolute path' to libgcc.a.
In script link-vmlinux.sh, it expands to:
+ modpost_link vmlinux.o
+ aarch64-poky-linux-ld.bfd -r -o vmlinux.o arch/arm64/kernel/head.o
init/built-in.o --start-group usr/built-in.o
arch/arm64/kernel/built-in.o arch/arm64/mm/built-in.o kernel/built-in.o
mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o
crypto/built-in.o block/built-in.o arch/arm64/lib/lib.a lib/lib.a
*libgcc.a* arch/arm64/lib/built-in.o lib/built-in.o *libgcc.a*
drivers/built-in.o sound/built-in.o firmware/built-in.o net/built-in.o
--end-group
Because no libgcc.a in current directory, error shows twice:
aarch64-poky-linux-ld.bfd: cannot find libgcc.a: No such file or directory
aarch64-poky-linux-ld.bfd: cannot find libgcc.a: No such file or directory
So I add libgcc as dependency of aarch64 kernel.
And one thing more, in kernel source directory arch, only few arches
depends on LIBGCC:
$ grep -rw LIBGCC arch/
./openrisc/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
-print-libgcc-file-name)
./openrisc/Makefile:libs-y += $(LIBGCC)
./parisc/Makefile:LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS)
-print-libgcc-file-name)
./parisc/Makefile:libs-y += arch/parisc/lib/ $(LIBGCC)
./hexagon/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
-print-libgcc-file-name)
./hexagon/Makefile:libs-y += $(LIBGCC)
./arc/Makefile:LIBGCC := $(shell $(CC) $(ARC_LIBGCC) $(cflags-y)
--print-libgcc-file-name)
./arc/Makefile:libs-y += arch/arc/lib/ $(LIBGCC)
./m32r/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
-print-libgcc-file-name)
./m32r/Makefile:libs-y += arch/m32r/lib/ $(LIBGCC)
./xtensa/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
-print-libgcc-file-name)
./xtensa/Makefile:libs-y += arch/xtensa/lib/ $(LIBGCC)
./xtensa/boot/boot-redboot/Makefile:LIBGCC := $(shell $(CC)
$(KBUILD_CFLAGS) -print-libgcc-file-name)
./xtensa/boot/boot-redboot/Makefile: $(Q)$(LD) $(LD_ARGS) -o $@ $^
-L/xtensa-elf/lib $(LIBGCC)
./cris/Makefile:LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS)
-print-file-name=libgcc.a)
./cris/Makefile:libs-y += arch/cris/$(SARCH)/lib/ $(LIBGCC)
./arm64/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
-print-libgcc-file-name)
./arm64/Makefile:libs-y += $(LIBGCC)
By coincidence, there is no arch Yocto support before.
Regards,
Kai
Signed-off-by: Kai Kang <kai.k...@windriver.com>
---
meta/recipes-kernel/linux/linux-yocto.inc | 1 +
1 file changed, 1 insertion(+)
diff --git a/meta/recipes-kernel/linux/linux-yocto.inc
b/meta/recipes-kernel/linux/linux-yocto.inc
index 4ed3188..db693e6 100644
--- a/meta/recipes-kernel/linux/linux-yocto.inc
+++ b/meta/recipes-kernel/linux/linux-yocto.inc
@@ -7,6 +7,7 @@ LIC_FILES_CHKSUM =
"file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
INC_PR = "r4"
DEPENDS += "xz-native bc-native"
+DEPENDS_aarch64 += "libgcc"
this should be using append instead of +=
OK.
Thanks,
--Kai
# A KMACHINE is the mapping of a yocto $MACHINE to what is built
# by the kernel. This is typically the branch that should be built,
- --
- -Khem
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
Comment: GPGTools - https://gpgtools.org
iEYEARECAAYFAlQagi0ACgkQuwUzVZGdMxQfGwCaAuY+dIXbAnQ9tTOIA4MFSwhe
wEwAn1FxFeun292octWdy0sYJqtGRPOb
=5Tcg
-----END PGP SIGNATURE-----
--
Regards,
Neil | Kai Kang
--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core