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

372
Tailor

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

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

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

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

0
Может быть, вы можете попробовать с контейнером? Babblo 5 лет назад 0
Контейнер, как контейнер Docker? ты можешь это объяснить? Tailor 5 лет назад 0
Что вы подразумеваете под «запустить C-файл»? Вы хотите запустить программу на C, скомпилированную для работы на другом оборудовании, которое вы эмулируете? Или скомпилировать программу на C, используя компилятор для другого оборудования, работающего в эмуляторе? Или вы ищете переводчика C? Или что? AFH 5 лет назад 2
Согласитесь с @AFH - этот вопрос не имеет особого смысла. Не могли бы вы объяснить контекст вашей проблемы? slhck 5 лет назад 0
У меня была идея эмулировать процессор для запуска различных программ. Начнем с того, что я хотел эмулировать процессор и запустить, например, простой привет мир, написанный на C. Tailor 5 лет назад 0
Учитывая это, ответ может не иметь большого смысла. Вы хотите проверить, как или может ли скомпилированная вами программа работать на платформе ARM? (Пожалуйста, ответьте людям с @username, иначе они не получат уведомление.) slhck 5 лет назад 1
Да, вот что я пытаюсь сделать Tailor 5 лет назад 0
Простой ответ заключается в том, что вам придется скомпилировать (и связать) программу на C, прежде чем вы сможете выполнить ее с помощью эмулятора ARM (или любого процессора в этом отношении). Вы можете кросс-компилировать вашу C-программу на хосте (наиболее разумный выбор) с помощью кросс-цепочки инструментов или скомпилировать ее с помощью эмулятора ARM, если на ней установлены ОС и набор инструментов. sawdust 5 лет назад 1

2 ответа на вопрос

1
slhck

Ваш вопрос состоял в том, можете ли вы протестировать данный 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 5 лет назад 1
0
LPChip

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

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

В этом есть смысл. Спасибо за ваш ответ, вы мне очень помогли! Tailor 5 лет назад 0
Пожалуйста. :) LPChip 5 лет назад 0
@LPChip См. Комментарий ОП по этому вопросу. Я думаю, что они могут попробовать что-то другое - я также не уверен, о чем конкретно вы говорите с «эмулятором вашего процессора». Конечно, C-файл никогда не может быть запущен напрямую, но я думаю, что здесь есть более практичный пример использования, на который OP хочет ориентироваться. slhck 5 лет назад 0
@slhck, ИМХО, LPChip разъяснил техническое определение «barebone» CPU против «урезанного» ПК для OP. Что заставило ОП задать этот вопрос на 1-м месте. Я также ответил бы прямо «нет», но объяснение помогает ОП понять, что ему / ей понадобится программа на языке ассемблера / шестнадцатеричном формате для своих целей, вместо «нормального» кода на языке c настройка компилятора / сборки / запуска. (: p._phidot_ 5 лет назад 1
* «Инструкции процессора, он же язык ассемблера» * - Неправильно, язык ассемблера не является машинным кодом. * «двоичный исполняемый файл, представляющий собой список инструкций по сборке» * - неправильно, инструкции по сборке не являются машинным кодом. Язык ассемблера использует мнемонику, тогда как машинный код имеет числовые коды операций. Язык ассемблера имеет такие функции, как метки, которые правильно оцениваются при добавлении / удалении кода / данных. Принимая во внимание, что машинный код имеет только числовые адреса, его придется пересчитывать вручную при изменении кода. sawdust 5 лет назад 0
* «Когда у вас есть C-файл, и вы хотите его запустить, вам нужен ** интерпретатор **, чтобы ЦПУ понимал ** сценарий **» * - Ваше (небрежное?) Использование слов, которые также иметь конкретные технические значения могут привести к неправильному пониманию. * «Но операционная система - это GUI ...» * - Не каждая ОС имеет или нуждается в GUI. sawdust 5 лет назад 1

Похожие вопросы