Имитирующий код ARM
Я хотел бы имитировать код ARM. Например, я хочу запустить такой код:
MOV R0, #5
ADD R0, R0, #1
//somehow output R0
и он выведет 6 на некоторое программное обеспечение на моем Ubuntu. Возможно ли это?
10 ответов
Кейл МДК смогите быть использовано для того чтобы сымитировать коды рукоятки. Он обеспечивает Моделирования И Отладки перспектива которую можно использовать для того чтобы зондировать набор регистра руки, содержание памяти, ЕТК...
MDK-Lite оценочная версия доступна бесплатно для максимального размера кода 32KB.
Linux версия MDK недоступна. Но Keil MDK отлично работает над вина в Ubuntu.
установка Keil uVision MDK на Вино:
Шаг 1: Установите wine на Ubuntu
откройте терминал и введите:
sudo apt-get install wine
Шаг 2: Скачать Кейл МДК.
Шаг 3: Установите MDK
Правой Кнопкой Мыши на MDK исполняемый файл и выбираем " Открыть С Помощью Wine Windows Program Loader" выбор.
Шаг 4: вызовите Keil uVision MDK на Ubuntu
откройте терминал и введите:
wine ~/.wine/drive_c/Keil/UV4/Uv4.exe
Шаг 5: Установите Flash Magic (Необязательно)
Flash Magic-это инструмент, используемый для загрузки программного обеспечения для плат Keil. Скачать Flash Magic Software и установить его на вино (см. предыдущие шаги).
создайте ссылку COM1 на последовательный порт. Откройте терминал и тип:
ln -s /dev/ttyS0 ~/.wine/dosdevices/COM1
создание и отладка проекта Keil uVision MDK:
Шаг 1: создайте проект Keil UVision для цели ARM7.
В Панели инструментов Keil UVision выберите Проект - > Новый Проект.
перейдите в папку, где вы хотите создать этот проект.
введите имя проекта и нажмите кнопку сохранить.
выберите ARM -- > ARM7(маленький С обратным порядком байтов) как устройство для мишени. нажимать OK.
Шаг 2: Создайте исходный файл сборки для целевой
В Панели инструментов Keil UVision выберите Файл --> Новая. Добавьте следующий код во вновь созданный файл:
AREA text, code, readonly
ENTRY
MOV R0, #5
ADD R0, R0, #1
END
укажите tab-space перед каждым оператором сборки, как это сделано выше. Сохраните файл с помощью '.s' создать элемент или F7 для компиляции исходного файла.
Шаг 5: имитация / отладка приложения
В Панели инструментов Keil UVision выберите Debug--> Start / Stop Debug Session или Сочетание Клавиш Ctrl + Клавишу F5.
перспектива отладки открывается с видом регистра слева, видом кода в центре, видом памяти справа внизу, так далее...
используйте клавиши отладки для выполнения кода:
наблюдать вид регистра в конце выполнения программы:
В Панели инструментов Keil UVision выберите Debug--> Start / Stop Debug Session или Сочетание Клавиш Ctrl + Клавишу F5 выйти из перспективы отладки.
Если вы создадите его в фактический исполняемый файл, вы можете использовать QEMU эмулятор ARM для его запуска.
вы можете запустить код arm через QEMU, который является эмулятором, но я не думаю, что вы можете выводить непосредственно на другую часть программного обеспечения, потому что QEMU также является программным обеспечением, но вы можете использовать что-то вроде общей памяти или даже файла (предупреждение параллельный доступ к файлу может потребовать мьютекса) для передачи результатов из эмулятора в программное обеспечение хоста и обратно, даже если это может быть немного медленным
эта статья дает пошаговое введение в использование QEMU для моделирования кода baremetal ARM: http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/
конечно, вам не нужно заботиться о c вещи и может разместить сборку непосредственно в запуске.s
я думаю, что вы ищете способ printf
значение, возвращаемое функцией сборки ARM из программы на языке C. Вы можете сделать это с помощью симулятора командной строки arm-elf-run
доступно с arm-elf-gcc тулчейна. Вы можете скачать toolchain из http://www.gnuarm.com/bu-2.16.1_gcc-4.0.2-c-c++_nl-1.14.0_gi-6.4_x86-64.деготь.bz2. (Просто распакуйте архив в какую-нибудь папку и при необходимости добавьте <path>/gunarm-4.0.2/bin/
к вашей системе PATH
переменная)
для начала вам нужно организовать свой код ARM в функцию сборки внутри сборки (.файл ы), скажем myasm.s
. Теперь вам нужно написать тестовый код в C (test.c
, например), чтобы вызвать функцию сборки и printf возвращаемое значение, используя наши знакомые printf()
. Вы можете найти исходный код ниже:
myasm.s:
.align
.global myasmfunc @ Required, so that this func can be
@ accessed from main() in test.c
@ A sample asm function that
@ returns the value 6
myasmfunc: MOV R0, #5
ADD R0, R0, #1 @ Now R0 contains 6.
@ By the default ARM calling convention,
@ R0 will be used to pass return values
@ to the calling function
MOV PC, LR @ Return from myasmfunc()
вы можете использовать код в этом репозитории git в качестве отправной точки:
https://github.iu.edu/geobrown/c335-assembly-examples
как упоминали другие, вам сначала нужно установить QEMU для эмуляции оборудования ARM, и вам нужно будет иметь какой-то способ компиляции вашего кода (я рекомендую CodeSourcery Lite Edition Toolchain). Затем отредактируйте TOOLROOT
запись в Makefile.common
файл, чтобы указать на место установки вашего toolchain и просто запустите команду make test
после того, как вы написали свой код сборки и передали его в тестовый файл C.
код в этом репозитории предоставляет кучу примеров, которые вы можете адаптировать к своим собственным целям, и тестовые файлы C позволят вам вызвать код сборки и вывести результаты на свой терминал в Ubuntu. :)
Я всегда использую небольшой QEMU ARM VM для тестирования программ ARM.
вы можете скачать его с debian а затем запустите его с помощью: (более подробная информация)
qemu-system-arm -localtime -m 256 -M versatilepb -kernel vmlinuz-2.6.32-5-versatile -initrd initrd.img-2.6.32-5-versatile -hda debian_squeeze_armel_standard.qcow2 -append "root=/dev/sda1" $@
поскольку он имитирует полную систему arm, вы можете написать на нем программы (например, с vim + gcc), а затем протестировать их там.
Не уверен, почему никто еще не упомянул об этом, но вы можете получить "реальная" и доступная платформа руки экспериментировать с, с малина pi.
Он не поставляется с Ubuntu по умолчанию,насколько мне известно, он поставляется с ремиксом Debian под названием Raspbian (но также может запускать Fedora, Arch или Debian plain).
когда дело доходит до поддержки этой платформы, есть - книги для этого и у него даже есть собственное сообщество Stack Exchange sub.
Если вы планируете написать эмулятор ARM в C, вы можете использовать код в этом репозитории в качестве отправной точки. https://github.com/omufeed/ARMAssemblyEmulatorWithC Он имеет трубопровод размера 4. Инструкции по обработке данных реализованы, и он обрабатывает переполнение и несут флаги. Также реализованы ветви и прерывания. Он принимает инструкцию по сборке в качестве входного сигнала и имитирует конечное состояние памяти после завершения инструкции. Есть некоторые примеры входов добавил в код комментарии. Подробнее вhttp://www.omidmufeed.com/arm-assembler-emulator-with-c/