1

上周我一直在尝试设置一个编译器,它可以编译为带有 mips 架构的 netbsd。

我在互联网上找不到任何如何做到这一点。所有文档都涉及将内核编译到体系结构而不是程序。

怎么会这么难......

主机是netbsd amd64机器

4

2 回答 2

1

适当地设置编译器。将它指向 TOOLDIR 中的 gcc 版本。在这种情况下,类似于 mips--netbsd-gcc。一定要确保 TOOLDIR 在您的路径上,以便驱动程序可以找到正确的汇编程序、正确的加载程序和正确的库。

以 src/bin/* 中的 Makefile 为例,通读系统 mk 包含引用的文件(在 src/share/mk 中)

于 2014-06-02T00:19:19.533 回答
0

一般来说,目标是有一个工作的交叉编译器和一个用于目标的文件系统根目录,所有这些都安装在您的开发机器上。需要目标根目录,因为您需要各种库来构建用户态应用程序。这些库需要为目标编译,而不是为主机编译。

假设您从源代码构建所有内容,则如下所示:

  1. 为工具链选择一个前缀(比如/opt/mips),为目标的根文件系统选择另一个前缀(比如/opt/target)。所有这些都在您的开发机器上,而不是在目标上!

  2. 为您的目标配置、构建和安装交叉编译器。这进入工具链前缀。

  3. 为您的目标配置、构建和安装内核,并将其安装到目标根前缀中。这应该安装稍后需要的必要内核开发头文件。如果您可以在不编译内核的情况下安装此类头文件,那么您当然可以拥有更多的权力。

  4. 为您的目标配置、构建和安装 C 库(例如 glibc)到目标根目录。

  5. 配置、构建和安装用户态应用程序需要的任何其他库 - 到目标根目录。

  6. 最后,配置、构建和安装用户态应用程序。安装到目标根目录后,您可以将其复制到目标的相同前缀中(/opt/target如之前建议的那样)。

    通常要安装到不同的前缀中 - 一个与构建主机上的内容重叠的前缀(如/usr) - 你需要做一些技巧来愚弄make install看到目标前缀而不是你自己的前缀。一个简单的方法是在您的构建主机上拥有一个 chroot 环境,您可以在其中以/usr只读方式绑定挂载前缀(例如 ),并mount_union在其上覆盖可写 ( )。

当您为目标构建东西时,您当然需要将适当的参数传递给configure

于 2014-06-02T15:35:24.683 回答