Я разработал симулятор MIPS I с помощью Verilator, который позволяет мне конвертировать Verilog-код в C++. Я пытаюсь запустить программу C++ на моем процессоре, но у меня есть некоторые проблемы. Моя цель состоит в том, чтобы:Вопрос о связи/Загрузка и симулятор
- написать тестовую программу в C++
- обобщит эту программу с помощью кросс-компилятор G ++ (MIPS-Linux)
- берут генерироваться ELF файл и разобрать его с помощью objdump
- магазин в весь дамп двоичного объекта в текстовом файле
- открыт текстовый файл в моем тренажере
- выполнения какой-либо текст манипулирования функции, чтобы изолировать часть HEX дамп objdump
- загружает весь массив эльфов в память моего процессора (карта памяти C++, содержащая элементы, побитые их адресом в памяти, как определено файлом ELF.)
- запустить программу, установив счетчик программ и отпустив его до выхода программа.
Проблема будет в виде шагов 7 и 8. У меня есть очень рудиментарное понимание формата файлов ELF. Насколько я могу судить (readelf может использоваться для вывода начальной точки программы), программа ounter должна быть установлена первоначально по адресу начала раздела .text. К сожалению, это не приводит к правильной работе программы на моем процессоре.
Я проверил правильное выполнение программы моего процессора, написав программы сборки, загрузив их в симуляторы сборки MIPS и проверив инструкцию по инструкции, что файл регистра и сгенерированная адресация совпадают. Я не понимаю, почему я не могу получить даже программу «helloworld» для запуска путем написания на C++, компиляции и загрузки в «память»? Я не очень хорошо разбираюсь в этой области. Я мог бы использовать некоторую помощь, чтобы понять это.
Я понимаю, что .text и .data содержат все необходимое для запуска моей программы. Это, очевидно, не так, потому что, когда я пересекаю раздел .text, моя программа не выполняется правильно. Есть ли что-то еще, что мне нужно сделать с файлом ELF, прежде чем загружать его в память?
Кроме того, я попытался написать сборку и компиляцию строк для проверки моего процессора, но после компиляции я не могу найти свою программу (я просто повторяю addi $ 0x12ab ...) снова и снова. Затем я ищу 0x12ab в шестнадцатеричном дампе файла elf. Таким образом, я не смог найти свою программу в файле эльфа. –
Итак, глядя на симулятор ZVRBA, кажется, что файл ELF загружается в память очень похоже на Я в основном отрубаю все символы из файла эльфа после того, как HEX сбрасывает его, и я добавляю элемент на карту памяти, используя каждый шестнадцатеричный адрес инструкции/данных в качестве ключа. Затем я получаю доступ с помощью ключа адреса. важными аспектами этого процесса являются загрузка всех элементов на их правильный адрес и установка указателей программы, глобального, стека и рамки в нужные места. Поскольку это то, что я делаю, я думаю, что могу предположить, что t Я должен изменить свой компилятор. –