短的问题:我怎么能可靠地在任何Linux发行MIPS,mipsel体系,MIPS64和mips64el区分?当dpkg-architecture不存在时,如何区分linux上的mips cpu类型?
更详细的解释:
我们提供静态内置/分配独立的二进制文件(特)许多体系。安装脚本通常运行uname -s和uname -m来确定操作系统和体系结构。根据该决定从服务器获取二进制文件,因此它需要可靠地工作。它确实如此。除了Mac OS X 10.6和Debian外,几乎在任何地方。 Mac会在运行64位应用程序的操作系统上报告i386,而对于32位操作系统,Debian报告mips64。
的Debian上MIPS64正确报告处理器类型,但是这并不能帮助我至少有两个方面的原因:
操作系统是32位,而不是64位的名称可能暗示。
它以小端模式运行。 Debian称mipsel,而不是mips。它通常可以切换,但操作系统只能在一种模式下运行,并且mips软件通常与mipsel不兼容。
这里有一些输出从系统命令:
$ file my_binary_name
my_binary_name: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, with unknown capability 0xf41 = 0x756e6700, with unknown capability 0x70100 = 0x1040000, stripped
$ dpkg-architecture
DEB_BUILD_ARCH=mipsel
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_ARCH_CPU=mipsel
DEB_BUILD_ARCH_BITS=32
DEB_BUILD_ARCH_ENDIAN=little
DEB_BUILD_GNU_CPU=mipsel
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=mipsel-linux-gnu
DEB_HOST_ARCH=mipsel
...
dpkg的架构将是完美的任务,但它不存在于其他Linux发行版。
命令
getconf LONG_BIT
正确地报告我的系统上32。
但是,我该如何确定它是大端还是小端?
我发现config.guess可以确定差异,但它通过运行最终用户计算机上可能不存在的编译器来实现。除此之外,config.guess完全忽略了这样的事实,即操作系统在32位模式下工作,并错误地报告了mips64el而不是mipsel。
2011-08-18
Mojca
+0
什么毛病我下面提供的答案吗?请接受它,如果没有。 –