使用crosstool-NG构建ARM交叉编译器的正确选项有哪些?

6
我正在尝试使用crosstool-NG构建一个交叉编译器,以便针对我的NAS盒子上运行的处理器进行编译。
NAS盒子是ZyXEL 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

目标选项页面上的选项,标志和我的当前设置(括号中):

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

我一直在尝试在“体系结构级别”和“为CPU发出汇编”中使用各种组合,例如arm926ej-sarmv5larmv5tej,但我不知道哪个选项应该放在哪里。

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

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

到目前为止,我的尝试只产生了“非法指令”消息。

编辑

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

1个回答

7

试试以下其中一个

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

或者

--with-cpu=arm926ej-s

(两者都有的话没有意义)。

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

如果仍然无法正常工作,则需要查看库和头文件。如果要使用动态链接库,则需要具有与目标上的版本和名称匹配的库。如果要使用静态链接或将自己的共享库复制到目标(可能是非标准位置,需要额外配置),则应该可以。

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


谢谢您的帮助。为了澄清,我需要编译Linux版本才能在Linux下运行,还是可以编译裸机系统并在Linux下运行? - Silas Parker
2
在Linux下不能运行裸机程序。 - ams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接