Предположим, у вас есть встроенное устройство ARM и ноутбук на базе x64. Обе системы работают под управлением GNU/Linux. Если вы решите скопировать двоичный файл "ls" с ноутбука на встроенное устройство и запустить его на встроенном устройстве, будет ли он работать? Объясните свои рассуждения.
2 ответа
Предположим, у вас есть встроенное устройство ARM и ноутбук на базе x64. Обе системы работают под управлением GNU/Linux.
ХОРОШО.
Если вы решите скопировать двоичный файл "ls" с ноутбука на встроенное устройство и запустить его на встроенном устройстве, будет ли он работать?
Вот где это становится сложно. Это, очевидно, не будет работать как есть; наборы инструкций совершенно разные.
Тем не менее, это может быть сделано для запуска.
Очевидный выбор - это некая форма виртуализации или эмуляции. Эмулируя процессор и окружающие схемы поддержки, вы можете запускать любой исполняемый двоичный файл, при условии, что вы можете написать эмулятор, который достаточно близок к исходному аппаратному и программному обеспечению для получения желаемого результата.
Это делается все время; это сколько лет играм Sega или Nintendo, Apple] [программное обеспечение, и тому подобное, для работы на современных ПК. Когда целевая платформа имеет значительно большую вычислительную мощность, чем исходная платформа, и при наличии достаточно подробной документации аппаратного и микропрограммного обеспечения эмуляция часто является относительно простой. Рассмотрим для примера этот эмулятор IBM 5150, написанный на Javascript, который работает внутри вашего веб-браузера. Кросс-компиляция и эмуляция - относительно распространенный подход при разработке программного обеспечения для встраиваемых платформ.
Другой альтернативой было бы преобразование машинного кода в целевую архитектуру (в данном случае, на базе устройства ARM) с использованием компилятора. В зависимости от степени различия между архитектурами, это может быть тривиальным или очень сложным. Это было бы особенно проблематично, если окружающая схема в значительной степени отличается; например, видеоигра, которая использует специализированное аппаратное оборудование для обработки спрайтов и звука игровой консоли, вероятно, не сможет легко перейти на платформу, которая не имеет этих функций.
Реальный вопрос заключается в следующем: почему вы хотите сделать что-то подобное в первую очередь?
Использование бинарного файла, изначально созданного для целевой платформы, будет, когда это возможно, почти наверняка самым простым решением.
Нет. Потому что двоичный файл был скомпилирован для другого процессора. Он основан на наборе команд Intel x86 и не имеет смысла для ARM или любого другого процессора в этом отношении.