我需要在运行Ubuntu 12.04的BeagleBoard xM rev C上运行一个使用ftd2xx的程序。我正在尝试使用here提供的ARM库libftd2xx.so。 libFTDI不是一个选择。

我注意到的区别来自在libftd2xx.so上运行readelf -hA与BeagleBoard上其他可运行的库的比较。特定于arch的部分将ftd2xx的操作系统名称命名为“ARM926EF-S”,而不是其他库的OS名称命名为“7-A”,将CPU_arch的名称命名为“v5TEJ”而不是“v7”。

我假设这意味着该库适用于ARM v5指令集,而BeagleBoard正在运行ARM v7。有什么方法可以使ftd2xx正常工作吗?

编辑:有人告诉我ARM7与ARM5向后兼容,但这不能解决我的问题。

还要注意的另一件事是,在BeagleBoard上运行ldd libftd2xx.so不会列出依赖项,但是会打印出not a dynamic executable,而在其他库中也可以使用。

编辑2:

问题似乎与软 float ABI与硬 float ABI有关。我在BeagleBoard xM上有一个gnueabihf图像。当我尝试使用静态libftd2xx.a编译示例程序时,我得到了很多这样的信息:
/usr/bin/ld: error: static_link_uses VFP register arguments, libftd2xx.a(file.o) does not
/usr/bin/ld: failed to merge target specific data of file libftd2xx.a(file.o)

如果我尝试使用mfloat-abi=softmfloatabi=softfp进行编译,我会得到
In file included from /usr/include/stdio.h:28:0,
from main.c:12:
/usr/include/features.h:324:26 fatal error: bits/predef.h: No such file or directory
compilation terminated

我还尝试使用arm-linux-gnueabi而不是arm-linux-gnueabihf进行交叉编译,但是生成的程序无法在BeagleBoard上执行。有什么我能做的还是不可能的?

- - - - - 解决方案 - - - - - - - -

遇到一些麻烦之后,FTDI为我提供了可以使用的硬 float 版本的库。在许多人单独要求后,我在这里提供它:

https://s3.amazonaws.com/hayk-public/arm926-hf.zip

最佳答案

v5TEJ是v7-A指令集的子集。

该代码的运行速度可能会慢一些,可能会比要求的大一些,但是尽管如此,它仍可以正常工作而不会因非法指令等而崩溃。除了极少数异常(exception),ARM代码向后兼容先前的指令集。

如果代码在您的平台上不起作用,则很有可能是其他原因,例如缺少对USB子系统的访问权限等。

关于architecture - ARM v7平台上的ARM v5共享库(ftd2xx)-硬浮点与软浮点问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15306447/

10-11 08:59