[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