我想在我的Ubuntu 22.04笔记本电脑上运行一个研究项目。该项目需要为访客QEMU VM构建和运行5.2.21
Linux内核。我在Ubuntu 22.04笔记本电脑上构建Linux 5.2.21
时遇到以下错误:
error: ‘-mindirect-branch’ and ‘-fcf-protection’ are not compatible
字符串
我意识到它需要一个旧版本的GCC。所以我尝试使用gcc-8 docker容器编译内核。
~/linux-src:
▶ docker run --rm --user $(id -u):$(id -g) -v $(pwd):/code gcc-8 make -C /code
型
显示错误:
HOSTCC /code/tools/objtool/fixdep.o
/code/tools/objtool//fixdep: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /code/tools/objtool//fixdep)
/code/tools/objtool//fixdep: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /code/tools/objtool//fixdep)
/code/tools/build/Makefile.build:96: recipe for target '/code/tools/objtool/fixdep.o' failed
型
这是我的Dockerfile
:
FROM gcc:8
#FROM ubuntu:18.04
#FROM gcc:8.5.0-buster
#FROM ubuntu:20.04
#ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y && apt-get install -y --no-install-recommends \
build-essential libssl-dev libncursesw5-dev git curl bc \
flex bison libelf-dev make cmake
型
如何修复此version
GLIBC_2.33'未找到'错误?
在Ubuntu 22.04上构建一个旧的Linux内核有什么解决方案吗?
更新:
我可以通过将主机目录Map到docker来构建内核,但我需要克隆Linux内核并在docker容器中构建Linux内核。
▶ docker run --rm -it --user $(id -u):$(id -g) -v $(pwd):/code gcc-8.5 bash
I have no name!@15e678776a72:/$ cd /code/test; git clone ... linux-x86
I have no name!@15e678776a72:/code/test/linux-x86$ time make -j20
... ...
Kernel: arch/x86/boot/bzImage is ready (#1)
型
在这种情况下,看起来docker容器中的libcMap错误。
1条答案
按热度按时间tvz2xvvm1#
以下是我的解决方案,使用Docker容器在最新的Ubuntu 22.04上构建旧的Linux内核:
Dockerfile
(gcc-8.5,具有所有必要的内核构建依赖项):字符串
构建docker镜像:
型
使用gcc-8.5从docker容器编译旧的Linux内核:
型