【问题标题】:Compile an old Linux kernel on Ubuntu 16.04 LTS在 Ubuntu 16.04 LTS 上编译旧的 Linux 内核
【发布时间】:2016-10-14 14:57:00
【问题描述】:

我尝试在 Ubuntu 16.04 LTS 上编译 Linux 内核 3.10.31。 我曾经在 Ubuntu 12.04 LTS 上编译过完全相同的内核,一切运行良好。

在 Ubuntu 16.04 上,gcc 版本为gcc-5; 在 Ubuntu 12.04 上,gcc 版本为gcc-4.6

3.18之前的Linux内核内核好像不能用gcc-5编译。内核3.10.31在make编译时报如下错误

 fatal error: linux/compiler-gcc5.h: No such file or directory

我尝试在 Ubuntu 16.04 上安装 gcc-4.7 并将 /usr/bin/gcc 更改为指向 gcc-4.7。这可以解决上述错误。但是,在我运行make后会导致新问题

$linux/arch/x86/Makefile:98: stack protector enabled but no compiler support
make[1]: Nothing to be done for 'all'.
make[1]: Nothing to be done for 'relocs'.
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CC      kernel/bounds.s
gcc-4.7.real: error: unrecognized command line option ‘-no-pie’
linux/./Kbuild:35: recipe for target 'kernel/bounds.s' failed
make[1]: *** [kernel/bounds.s] Error 1
Makefile:835: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2

我的问题是:

在 Ubuntu 16.04 上使用旧的编译链编译旧的内核 3.10.31 有没有一种巧妙的方法?

非常感谢您的帮助!任何建议都非常感谢。

【问题讨论】:

    标签: linux ubuntu gcc linux-kernel


    【解决方案1】:

    我想我找到了解决办法。

    我们不必安装旧版本的 gcc。我们只需要将文件compiler-gcc5.h from herefrom here复制到include/linux/中即可。它将解决编译问题。

    【讨论】:

    【解决方案2】:

    Ubuntu 16.04 现在仍然支持 gcc-4.7,所以你可以安装它,然后你可以通过update-alternatives 选择 gcc 的版本来使用它。

    例如:

    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 40
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50
    sudo update-alternatives --config gcc # here you choose by hint
    

    如果直接下载compiler-gcc5.h,可能会遇到我在Ubuntu 16.04.3 x64编译3.3.8时遇到的arch/x86/kvm/svm.c error invalid character之类的问题。

    【讨论】:

      【解决方案3】:

      打开 Makefile,查找 CFLAGS_EXTRA 并在其中添加以下选项 -fno-pie。 见,https://askubuntu.com/questions/851433/kernel-doesnt-support-pic-mode-for-compiling

      【讨论】:

        猜你喜欢
        • 2020-07-12
        • 2016-08-29
        • 2016-02-01
        • 2017-06-26
        • 2016-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-22
        相关资源
        最近更新 更多