【问题标题】:Is it necessary to use a toolchain to compile a Kernel?是否需要使用工具链来编译内核?
【发布时间】:2015-07-02 12:28:33
【问题描述】:

我想开始将此板用于开发目的:Pm-Pv-D525

我的目标是编译 32bit 内核并构建根文件系统等。该板在 Intel Atom D525 上运行(架构:x86_64)。我想使用 Eclipse 并对其进行交叉编译和调试。我在 x64 机器上使用 ubuntu 14.04 LTS

我找了很久。我安装了库和其他软件包。但是我没有想出一个完整的工具链来用于 Intel Atom 开发,就像 ARM 或 PowerPC 使用的那样。

我应该将 GNU 工具链用作带有选项 -m32 等的交叉工具吗?这是要走的路吗? 欢迎任何想法!

【问题讨论】:

    标签: eclipse gcc kernel 32bit-64bit toolchain


    【解决方案1】:

    100% 没有必要,如果您。当您在 64 位机器上构建内核,尤其是 32 位内核时,如果没有交叉编译器,您使用的是不是为您的目标架构开发的 gcc。这会导致兼容性问题。最大的违规者之一是诸如 stddef.h、stdint.h 和 stdarg.h 之类的东西。这是特定于架构的。为了解决这个问题,您经常会看到在构建没有交叉编译器的内核时传递了-nostdinc 标志。这将禁用包括默认头文件,例如 stddef.h,让开发人员创建这些头文件。你可以实现这些,但它通常很棘手,如果你弄错了,将很难调试。另一个我个人经历过的大问题是编译器版本会破坏你的内核构建。假设您将机器升级到下一个 Linux 发行版。由于 gcc 的变化,现在您的内核很有可能无法构建。当我从不知道 .eh_frames 的 gcc/ld 升级到知道的 gcc/ld 时,我遇到了这种情况。这破坏了链接步骤并需要调整链接描述文件。如果我的小组使用的是交叉编译器,这将不是问题(顺便说一句,这是导致我们切换到交叉编译器的原因)。还有许多其他原因,其中一些基于更多的意见。有关更多信息,您可以查看 osdev 页面Why do I need a Cross Compiler?

    另外一个相对简单的 32 位 x86 工具链安装是 yocto 项目使用的工具链。您可以找到安装说明here。我更喜欢标题为“使用跨工具链压缩包”的方法,您可以找到必要的下载 here。首先选择您的主机架构(从您的问题中最有可能是 x86_64),然后选择您的目标架构(再次从您的问题中最有可能是 poky-glibc-x86_64-core-image-sato-i586-toolchain-1.8.sh)。

    【讨论】:

    • 感谢您的详细解答。现在,我将按照您的建议,分享过程和后果。也许在我的业余时间,我可以和 gnu 一起去看看差异。国王问候@esm
    猜你喜欢
    • 2021-08-03
    • 2013-12-09
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    相关资源
    最近更新 更多