Bug 14916 - build buildroot with glibc and linux kernel 5.4, start with qemu will cause error: "FATAL: kernel too old"
Summary: build buildroot with glibc and linux kernel 5.4, start with qemu will cause e...
Status: RESOLVED NEEDINFO
Alias: None
Product: buildroot
Classification: Unclassified
Component: Other (show other bugs)
Version: 2022.02.3
Hardware: All Linux
: P5 major
Target Milestone: 2022.02
Assignee: unassigned
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-07-18 02:43 UTC by Fugui Liu
Modified: 2022-10-25 20:22 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Fugui Liu 2022-07-18 02:43:14 UTC
Refer to this article for details: https://www.jianshu.com/p/55952ae88965

1. qemu start error
[ 3.405278] Run /sbin/init as init process
FATAL: kernel too old
[ 3.484534] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00
[ 3.484974] CPU: 0 PID: 1 Comm: init Not tainted 5.4.195 #1

2. environment
host 	      arch    linux kernel 	 buildroot  glibc
ubuntu 20.04  x86_64  5.4.0-195/5.4.195  2022.02.3  2.34

3. error analysis
- buildroot set `BR2_TOOLCHAIN_HEADERS_AT_LEAST` to `5.4`
- but glibc's `--enable-kernel=X.Y.Z`
- buildroot missing `Z`

4. temporary solution
modify buildroot's .config `BR2_TOOLCHAIN_HEADERS_AT_LEAST` to `5.4.0`

5. recompile and start ok
Comment 1 Thomas Petazzoni 2022-07-18 21:43:10 UTC
Thanks for the bug report. I am surprised we never realized this before.

Isn't the solution as simple as:

diff --git a/package/glibc/glibc.mk b/package/glibc/glibc.mk
index f3a08fbf24..6c54d044a5 100644
--- a/package/glibc/glibc.mk
+++ b/package/glibc/glibc.mk
@@ -99,7 +99,7 @@ GLIBC_MAKE = $(BR2_MAKE)
 GLIBC_CONF_ENV += ac_cv_prog_MAKE="$(BR2_MAKE)"
 
 ifeq ($(BR2_PACKAGE_GLIBC_KERNEL_COMPAT),)
-GLIBC_CONF_OPTS += --enable-kernel=$(call qstrip,$(BR2_TOOLCHAIN_HEADERS_AT_LEAST))
+GLIBC_CONF_OPTS += --enable-kernel=$(call qstrip,$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)).0
 endif
 
 # Even though we use the autotools-package infrastructure, we have to

Indeed, $(BR2_TOOLCHAIN_HEADERS_AT_LEAST) never includes the minor version as far as I can see. Yann, any opinion?
Comment 2 Yann E. MORIN 2022-07-18 22:00:57 UTC
(In reply to Thomas Petazzoni from comment #1)

> -GLIBC_CONF_OPTS += --enable-kernel=$(call strip,$(BR2_TOOLCHAIN_HEADERS_AT_LEAST))
> +GLIBC_CONF_OPTS += --enable-kernel=$(call qstrip,$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)).0

It should not be necessary, because the glibc machinery explicitly already adds
a buncha dot-zeroes:

https://github.com/bminor/glibc/blob/master/sysdeps/unix/sysv/linux/configure.ac#L39
(mips has a special case, but uses the same construct).

    user_version=$((`echo "$minimum_kernel.0.0.0" | [....]

with minimum_kernel defined there, from --enable-kernel=NNN :

    https://github.com/bminor/glibc/blob/master/configure.ac#L273

Note that this is not recent; it's been there since 48d0c5d847a, in 2000...

So yeah, weird...
Comment 3 Fugui Liu 2022-07-19 03:27:55 UTC
(In reply to Thomas Petazzoni from comment #1)

The solution I want is to be able to set the minior version when we `make xxconfig`.

(In reply to Yann E. MORIN from comment #2)

I tested multi combinations.
1. buildroot-2022.02.3 with glibc 2.34 linux kernel 5.4/5.15
2. buildroot-2020.08 with glibc 2.31 linux kernle 5.4/5.7
All throw error: FATAL: kernel too old

If I modify buildroot's .config `BR2_TOOLCHAIN_HEADERS_AT_LEAST` to `5.4.0`, everything is ok.

You can try to build and start.
Comment 4 Yann E. MORIN 2022-07-23 14:05:51 UTC
Fugui Liu, All,

Can you provide a defconfig that exhibits the issue, please?

Regards,
Yann E. MORIN.
Comment 5 Thomas Petazzoni 2022-10-25 20:22:57 UTC
No feedback from the contributor, insufficient information to reproduce, so closing the bug.