带有交叉工具NG的ARM交叉编译器的正确选项是什么?



我正在尝试构建一个交叉编译器,以使用 crosstool-NG 针对在我的 NAS 盒上运行的处理器。

NAS盒是合勤NSA210,有一个示例dmesg输出,/proc/cpuinfo是:

Processor       : ARM926EJ-S rev 5 (v5l)
BogoMIPS        : 183.09
Features        : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 5
...
Hardware        : Oxsemi NAS
Revision        : 0000
Serial          : 00000d51caab2d00

目标选项页面上的选项、标志和我在 () 中的当前设置:

  • 目标架构(臂)
  • 使用 MMU(是)
  • 字节序(小端序)
  • 位数(32 位)
  • 默认指令集模式(arm)
  • 使用 EABI(是)
  • 体系结构级别 --with-arch= ()
  • 发出 CPU 程序集 --with-cpu= ()
  • 针对 CPU 进行调整 ()
  • 使用特定的 FPU ()
  • 浮点数(软件)
  • 目标旗帜 ()
  • 目标 LDFLAGS ()

我一直在尝试"架构级别"和"CPU 的发出程序集"中的各种组合,例如 arm926ej-sarmv5larmv5tej ,但我不知道哪个选项在哪里。

我已将目标操作系统设置为裸机,因为crosstool-NG没有盒子上使用的Linux版本。

此外,一旦构建了工具链,我是否需要再次将相同的选项传递给编译器。

到目前为止,通过尝试刚刚产生了Illegal instruction信息。

编辑

如果有人能指出我一篇关于设置 ARM GCC 工具链的文章,并明确参考如何找出正确的参数,那将回答我的问题。

试试其中之一

--with-arch=armv5te
--with-tune=arm926ej-s

--with-cpu=arm926ej-s

(两者兼而有之是没有意义的)。

否则,您的选择看起来不错。

如果它仍然不起作用,那么您需要查看库和标头。如果要使用动态链接的库,则需要具有与目标、版本和名称相关的库。如果你想使用静态链接,或者将你自己的共享库复制到目标上(也许在一个非标准的地方,这需要额外的配置),你应该没问题。

无论哪种方式,您都需要内核标头匹配。您可能可以从 kernel.org 下载一些现代内核标头。

相关内容

  • 没有找到相关文章

最新更新