短的問題:我怎麼能可靠地在任何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發行版。
的第一個問題已經解決這裏:How to determine whether a given Linux is 32 bit or 64 bit?
命令
getconf LONG_BIT
正確地報告我的系統上32。
但是,我該如何確定它是大端還是小端?
我發現config.guess可以確定差異,但它通過運行最終用戶計算機上可能不存在的編譯器來實現。除此之外,config.guess完全忽略了這樣的事實,即操作系統在32位模式下工作,並錯誤地報告了 mips64el而不是 mipsel。
什麼毛病我下面提供的答案嗎?請接受它,如果沒有。 – mattst88