hay*_*art 6 architecture arm backwards-compatibility beagleboard
我需要在运行Ubuntu 12.04的BeagleBoard xM rev C上运行一个使用ftd2xx的程序.我正在尝试使用此处提供的ARM库libftd2xx.so .libFTDI不是一个选项.
我注意到的区别来自于运行readelf -hA
libftd2xx.so与BeagleBoard上的其他库有效.特定于arch的部分为ftd2xx提供操作系统名称为"ARM926EF-S",而为其他库提供操作系统名称为"7-A",为"v5TEJ"而不是"v7"提供CPU_arch.
我假设这意味着该库适用于ARM v5指令集,而BeagleBoard运行ARM v7.有没有办法让ftd2xx工作?
编辑:我被告知ARM7向后兼容ARM5,但这并不能解决我的问题.
另外需要注意的是,ldd libftd2xx.so
在BeagleBoard上运行不会列出依赖项,而是打印出来not a dynamic executable
,而它可以在其他库上运行.
编辑2:
这个问题似乎与软性和硬性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=soft
或编译mfloatabi=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为我提供了他们的库的硬浮版本.很多人单独要求后,我在这里提供:
v5TEJ 是 v7-A 指令集的子集。
该代码可能运行得慢一些,并且可能比所需的大一些,但它仍然应该可以工作,不会因非法指令等而崩溃。除了极少数例外,ARM 代码向后兼容以前的指令集。
如果代码无法在您的平台上运行,则很可能是其他原因,例如缺少 USB 子系统的访问权限等。
归档时间: |
|
查看次数: |
3242 次 |
最近记录: |