使用crosstool-NG的ARM交叉编译器的正确选项是什么

时间:2012-04-20 21:11:09

标签: gcc arm cross-compiling toolchain crosstool-ng

我正在尝试使用crosstool-NG构建一个交叉编译器来定位在我的NAS机器上运行的处理器。

NAS框是ZyXEL NSA210,有example dmesg output/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(是)
  • Endianness(Little endian)
  • 比特(32位)
  • 默认指令集模式(手臂)
  • 使用EABI(是)
  • 架构级别--with-arch =()
  • 发出CPU组件--with-cpu =()
  • 调整CPU()
  • 使用特定的FPU()
  • 浮点(软件)
  • 目标CFLAGS()
  • 目标LDFLAGS()

我一直在尝试“架构级别”和“Emit汇编CPU”中的各种组合,例如arm926ej-sarmv5larmv5tej,但我不知道哪个选项在哪里。

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

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

到目前为止,尝试刚刚生成了Illegal instruction消息。

修改

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

1 个答案:

答案 0 :(得分:4)

尝试其中一个

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

--with-cpu=arm926ej-s

(两者都没有意义)。

否则你的选择看起来很好。

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

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