是否需要使用工具链来编译内核?

Is it necessary to use a toolchain to compile a Kernel?

我想开始使用此开发板进行开发:Pm-Pv-D525

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

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

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

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

还有一个相对简单的 32 位 x86 工具链,用于安装 yocto 项目。您可以找到安装说明 here. I prefer the approach titled "Using a Cross-Toolchain Tarball" and you can find the necessary downloads here。首先 select 您的主机架构(来自您的问题最有可能 x86_64),然后 select 您的目标架构(再次来自您的问题最有可能 poky-glibc-x86_64- core-image-sato-i586-toolchain-1.8.sh)。