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

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

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

我一直在尝试“架构级别”和“为 CPU 发射程序集”中的各种组合,例如arm926ej-s, armv5l, armv5tej,但我不知道哪个选项在哪里。

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

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

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

编辑

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

4

1 回答 1

7

Try one of these

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

or

--with-cpu=arm926ej-s

(there's no point in having both).

Otherwise your options look fine.

If it still doesn't work then you need to look at the libraries and headers. If you want to use dynamically linked libraries then you'll need to have ones that match those on the target, version wise and name wise. If you want to use static linking, or copy your own shared libraries onto the target (in a non-standard place, perhaps, which would need extra config), you should be fine.

Either way, you'll need your kernel headers to match. You can probably just download some contemporary kernel headers from kernel.org.

于 2012-04-25T15:15:08.203 回答