Перейти к содержимому

Можно ли запустить C-File с помощью эмулятора процессора ARM?

0

У меня была идея эмулировать процессор ARM для запуска разных программ. Для начала я хотел эмулировать процессор и запустить, например, простой «привет мир», написанный на C.

К сожалению, я не нашел ответа с помощью Google и т. Д.

Можно ли запустить, например, C-File, используя эмулятор процессора ARM?

Я думал об эмуляции процессора без графического интерфейса - просто используя командную строку, на которой я хочу запустить C-файл.

548 просмотров
Tailor спросил 7 лет назад
T 3

2 ответа

1

Ваш вопрос состоял в том, можете ли вы протестировать данный C-файл на архитектуре процессора, отличной от машины, на которой вы работаете. Например, у вас может быть компьютер под управлением Windows с процессором Intel, но вы хотите попробовать программу на платформе ARM. Это, конечно, можно сделать.

Следует отметить, что код C никогда не запускается непосредственно на процессоре; сначала он должен быть переведен (скомпилирован) в машинный код, так как разные платформы требуют разные машинные коды для того же. Это то, что делает компилятор.

Вы можете указать компилятору компилировать ваш код в другую целевую платформу. Это называется кросс-компиляцией . Этот пост в блоге, например, описывает, как кросс-компилировать программу Hello World в ARM, используя arm-linux-gnueabi-gccкомпилятор (который вы можете получить из Ubuntu apt install gcc-arm-linux-gnueabi).

Я должен добавить, что такого рода вещи под хостами Linux несколько проще, чем с Windows, но, возможно, это личный уклон.

После кросс-компиляции вашей программы вы можете протестировать ее на целевой платформе. Для этого вам, конечно, понадобится эмулятор ЦП, но одного этого эмулятора будет недостаточно, так как вам нужна операционная система поверх него *, которая может загрузить соответствующую скомпилированную программу C и выполнить ее как процесс. ARM Lab VM делает это для ARM. Это виртуальная машина, которая эмулирует платформу ARM на любой хост-платформе.

* Если эта программа сама по себе не «голая», это означает, что она работает без промежуточной операционной системы.

  • "... так как вам нужна операционная система ..." * - Если у вас нет автономной, или автономной программы.
sawdust · 7 лет назад · 1
slhck ответил 7 лет назад
S 157 904
0
Принятый ответ

Ответ - нет. Процессор понимает только инструкции процессора, он же язык ассемблера. Когда у вас есть C-файл, и вы хотите его запустить, вам нужен интерпретатор, чтобы процессор понимал сценарий. Это означает, что скрипт скомпилирован в двоичный исполняемый файл, представляющий собой список инструкций по сборке, которые будет понятен процессору.

Но если ваш эмулятор ЦП имеет некоторый интерфейс и операционную систему, вы можете использовать эту операционную систему для запуска компилятора, и в этом случае вы можете запустить C-File через компилятор. Но операционная система - это графический интерфейс, которого вы хотите избежать, так что ... это возвращает меня к первому абзацу.

В этом есть смысл. Спасибо за ваш ответ, вы мне очень помогли!

Tailor · 7 лет назад · 0

Пожалуйста. :)

LPChip · 7 лет назад · 0

@LPChip См. Комментарий ОП по этому вопросу. Я думаю, что они могут попробовать что-то другое - я также не уверен, о чем конкретно вы говорите с «эмулятором вашего процессора». Конечно, C-файл никогда не может быть запущен напрямую, но я думаю, что здесь есть более практичный пример использования, на который OP хочет ориентироваться.

slhck · 7 лет назад · 0

@slhck, ИМХО, LPChip разъяснил техническое определение «barebone» CPU против «урезанного» ПК для OP. Что заставило ОП задать этот вопрос на 1-м месте. Я также ответил бы прямо «нет», но объяснение помогает ОП понять, что ему / ей понадобится программа на языке ассемблера / шестнадцатеричном формате для своих целей, вместо «нормального» кода на языке c настройка компилятора / сборки / запуска. (:

p._phidot_ · 7 лет назад · 1
  • «Инструкции процессора, он же язык ассемблера» * - Неправильно, язык ассемблера не является машинным кодом. * «двоичный исполняемый файл, представляющий собой список инструкций по сборке» * - неправильно, инструкции по сборке не являются машинным кодом. Язык ассемблера использует мнемонику, тогда как машинный код имеет числовые коды операций. Язык ассемблера имеет такие функции, как метки, которые правильно оцениваются при добавлении / удалении кода / данных. Принимая во внимание, что машинный код имеет только числовые адреса, его придется пересчитывать вручную при изменении кода.
sawdust · 7 лет назад · 0
  • «Когда у вас есть C-файл, и вы хотите его запустить, вам нужен ** интерпретатор **, чтобы ЦПУ понимал ** сценарий **» * - Ваше (небрежное?) Использование слов, которые также иметь конкретные технические значения могут привести к неправильному пониманию. * «Но операционная система - это GUI ...» * - Не каждая ОС имеет или нуждается в GUI.
sawdust · 7 лет назад · 1
LPChip ответил 7 лет назад
L 35 008