Короткий вопрос: как я могу надежно различить mips , mipsel , mips64 и mips64el в любом дистрибутиве Linux?
Более подробное объяснение:
Мы предоставляем статически построенные / независимые двоичные файлы (для TeX) для многих архитектур.Сценарий установки обычно запускает uname -s
и uname -m
для определения операционной системы и архитектуры.Двоичные файлы затем выбираются с сервера на основе этого решения, поэтому он должен работать надежно.И это так.Почти везде, кроме Mac OS X 10.6 и Debian.Mac будет сообщать i386 в ОС, в которой работают 64-разрядные приложения, а Debian сообщает mips64 для 32-разрядных ОС.
Debian в mips64 правильно сообщает тип процессора, но это не помогает мне по крайней мере по двум причинам:
- ОС 32-битная, а не 64-битная, как можно предположить из названия.
- Itработает в режиме с прямым порядком байтов.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.
Первая проблема уже была рассмотрена здесь: Как определить, является ли данный Linux 32-битным или 64-битным?
Команда
getconf LONG_BIT
правильно сообщает 32 в моей системе.
Но как мне определить, является ли она прямым или младшим порядковым номером?
Я понял, что config.guess может определить разницу, но это происходит благодаря запуску компилятора, который может отсутствовать на компьютере конечного пользователя.Вдобавок к этому config.guess полностью игнорирует тот факт, что операционная система работает в 32-разрядном режиме и ошибочно сообщает mips64el вместо mipsel .