[yocto] kernel/ libc compatibility problems
Herman van Hazendonk
me at herrie.org
Mon May 15 03:13:55 PDT 2017
Hi Paul,
As per glibc 2.24 you'll need the a 3.2 kernel at least
(https://abi-laboratory.pro/tracker/changelog/glibc/2.24/log.html):
"The minimum Linux kernel version that this version of the GNU C Library
can be used with is 3.2, except on i[4567]86 and x86_64, where Linux
kernel version 2.6.32 or later suffices (on architectures that already
required kernel versions more recent than 3.2, those requirements remain
unchanged). Linux 3.2 or later kernel headers are required on all
architectures."
You could try --enable-kernel=2.6.32 as per instructions on:
http://www.linuxfromscratch.org/lfs/view/7.10/chapter05/glibc.html but
not guaranteed that will work.
We're running into the same issues for our project which uses some
"older open" ARM based chipsets which only have a 3.0 kernel available
for example.
Best regards,
Herman
On 2017-05-15 11:52, Paul Roy wrote:
> Hi
> I´m using Yocto to create a new machine definition for a Gedeon-LX
> board. I can compile the kernel and all the rootfs binaries, but
> kernel boot crashes exactly at the /sbin/init load moment. It seems a
> problem with some mismatch among kernel and libc library present in my
> rootfs, because if I copy the /libs directory from my previous
> (old,and working) version, boot process is successful. I think i´ve
> narrowed the problem down to libc.so library not been compatible with
> my kernel, so some problem happens just when the kernel has to prepare
> the right loading enviroment (ld-linux.so / libc etc) for first user
> space program (init).
> Also, I have NO problems creating my Linux system with same Yocto
> enviroment/recipes for other platforms, so I think the problem is I´m
> not correctly telling Yocto with libc version to use for my "new"
> machine. Trying to change from -march=gedeon to -march=i686 for all
> the compilation flags does not change result.
>
> How can I know where exactly is this mismatch? Where do I set specific
> librart version for my compilations?
>
> My machine definition:
>
> DEFAULTTUNE ?= "x86"
> TARGET_FPU ?= "soft"
>
> TUNE_PKGARCH = "${TUNE_PKGARCH_tune-${DEFAULTTUNE}}"
>
> # ELF32 ABI
> TUNEVALID[m32] = "IA32 ELF32 standard ABI"
> TUNECONFLICTS[m32] = "m64 mx32"
> TUNE_ARCH .= "${@bb.utils.contains("TUNE_FEATURES", "m32", "i586", ""
> ,d)}"
> #TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "m32", " -m32",
> "", d)}"
>
> #Add our tunning for this processor
> TUNEVALID[geode] = "Optimizations for Geode LX"
> TUNE_CCARGS .="-Os -pipe -march=geode -mmmx -m3dnow
> -fomit-frame-pointer"
>
> # Another try with no success
>
> # TUNE_CCARGS .="-Os -pipe -march=geode -mno-mmx -mno-sse -mno-sse2
> -mno-3dnow -fomit-frame-pointer"
> # TUNE_CCARGS .="-Os -pipe -march=i386 -mtune=pentium3
> -DU_HAVE_GCC_ATOMICS=0"
> # TUNE_CCARGS .="-Os -pipe -march=i686"
>
> # Add our machine in case we want to override with _geode
> MACHINEOVERRIDES =. "geode"
>
> # Default Tune configurations
> AVAILTUNES += "x86"
> TUNE_FEATURES_tune-x86 = "m32"
> BASE_LIB_tune-x86 = "lib"
> TUNE_PKGARCH_tune-x86 = "x86"
> PACKAGE_EXTRA_ARCHS_tune-x86 = "${TUNE_PKGARCH_tune-x86}"
>
> # All this is based on x86-atom-64.conf
>
> #TARGET_ARCH = "i586"
> TARGET_ARCH = "i686"
> BINARY_LOCALE_ARCHES =. " geode"
> PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
> PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
>
> KERNEL_IMAGETYPE = "bzImage"
> PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
>
> GLIBC_ADDONS = "nptl"
> GLIBC_EXTRA_OECONF = "--with-tls"
> # GLIBC_EXTRA_OECONF = "--with-tls --with-cpu=geode"
>
> IMAGE_FSTYPES ?= "ext2.gz"
>
> MACHINE_FEATURES = "kernel26 serial screen keyboard pci usbhost acpi
> ext2 x86"
> MACHINE_EXTRA_RRECOMMENDS = " kernel-modules"
>
> BASE_PACKAGE_ARCH = "i586"
>
> require conf/toolchain/i585-glibc-linux.conf
> require conf/mvl-lsb.conf --> It contains DISTROOVERRIDES .=
> ":linuxstdbase"
More information about the yocto
mailing list