在ARM V7平台ARM v5的共享库(ftd2xx) - 硬软VS浮法问题(ARM v5 shar

2019-07-21 05:37发布

我需要运行上运行Ubuntu 12.04的BeagleBoard我XM转C使用ftd2xx的程序。 我试图用libftd2xx.so提供的ARM库在这里 。 libFTDI是不是一种选择。

我注意到的差异是由运行readelf -hA上libftd2xx.so VS上的工作BeagleBoard的其他库。 具体拱形部分提供OS名称为“ARM926EF-S”为ftd2xx代替“7-A”为其他图书馆和CPU_arch为“v5TEJ”而不是“V7”。

我假设这意味着库是指针对ARM V5指令集,以及BeagleBoard的运行ARM V7。 有没有办法让ftd2xx工作?

编辑:我已经告诉ARM7是向后兼容ARM5,但并没有解决我的问题。

另外要注意的是,运行ldd libftd2xx.so的BeagleBoard的未列出的依赖关系,但打印出not a dynamic executable ,而它适用于其他库。

编辑2:

这个问题似乎是用软VS硬浮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为我提供了他们的图书馆的硬浮版本,它的工作原理。 我在这里提供它之后很多人都单独请求是:

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

Answer 1:

v5TEJ是V7-A的指令集的一个子集。

该代码可以运行有点慢,可能会比需要更大了一点,但它应该不会崩溃因非法指令左右仍然工作。 除了极少数例外ARM代码向后兼容以前的指令集。

如果代码不能在你的平台上工作,它是别人很可能像失踪的访问权限USB子系统左右。



Answer 2:

请参阅我的引擎收录输出straceldd采用ARM926处理器。 内部的二进制文件libftd2xx1.1.12有多个处理器。 确保您使用release/build/arm926 。 我可以运行statictest的ARM926 CPU上二进制,eglibc和Linux 2.6.36。

ldd的输出,需要以下库。

  • libdl.so.2 -动态加载。
  • librt.so.1 -实时库
  • libpthread.so.0 -并行线程
  • libgcc_s.so.1 -海湾合作委员会的助手。
  • libc.so.6 - eglibc库
  • ld-linux.so.3 - Linux的共享库加载器。

功能性ldd不需要和下面的命令应显示库,

LD_TRACE_LOADED_OBJECTS=1 LD_WARN=yes LD_BIND_NOW=yes LD_VERBOSE=yes \
 /lib/ld-linux.so.3 ./libftd2xx.so.1.1.12 

验证statictest二进制工作。 如果是的话,尝试设置LD_LIBRARY_PATHrelease/build/arm926/libftd2xx.so.1.1.12位置。 从strace输出,路径/lib/tls/v5l/lib/tls优于/lib 。 上面列出的所有库应该在/lib 。 你可以尝试ln (硬链接),他们到该位置。 此外,从strace输出,所述/proc/bus/usb文件系统应安装。 这是一个内核配置选项。 /sys/bus/usb/devices被广泛使用,以找到装置; 这是不可能的,这是缺少对你的Ubuntu 12.04 ARM Linux操作系统。 还有一个libd2xx_table.so这是最有可能用来寻找非标准的USB描述符。

最后,这将有助于更具描述性的问题。 您尝试运行一些程序,并没有输出? 或者你运行的程序,它有一个例外? 如果statictest ARM二进制运行失败,那么你原来的假设可能是正确的。 这可能是旧的2.6.32内核(或ld-linux.so)发现ARM926EJ-S兼容,但你的新的Ubuntu 12.04没有找到它兼容。 在这种情况下,使用man ld-linux电脑主机上看到ld-linux.so环境变量。 具体而言, LD_DEBUGLD_ASSUME_KERNEL可能是有帮助哄加载器加载的二进制文件。



文章来源: ARM v5 shared library (ftd2xx) on ARM v7 platform - hard vs soft float issue