Подтвердить что ты не робот

Низкоуровневая отладка на основе qemu

Мне нужно проверить код низкого уровня на архитектуре ARM. Обычно эксперименты довольно сложны на реальной доске, поэтому я думал о QEMU.

То, что я хотел бы получить, - это какая-то отладочная информация, такая как printfs или gdb. Я знаю, что это просто с linux, поскольку он реализует как драйвер устройства для QEMU Integrator, так и функцию gdb, но я не работаю с Linux. Также я подозреваю, что извлечение такого рода функций из исходного кода ядра Linux будет сложным.

Я ищу из некоторой простой операционной системы, которая уже реализует одну из этих функций. У вас есть совет?

4b9b3361

Ответ 1

Вам не нужна целевая ОС для отладки кода, который работает внутри QEMU - QEMU уже делает это для вас.

В частности, QEMU поддерживает удаленную отладку из GDB - вы можете запускать QEMU с соответствующими параметрами командной строки и экспортировать интерфейс, к которому может подключиться копия GDB (работает на главной машине). В этот момент вы можете отлаживать программу в GDB почти так же, как если бы вы запускали ее на главной машине.

http://wiki.osdev.org/GDB, по-видимому, имеет немного более основную информацию; возможно, недостаточно, чтобы полностью начать работу, но, по крайней мере, дать вам основную идею и некоторые условия для поиска в документации QEMU и GDB. Пропустите бит о "Реализация GDB Stubs", который здесь не применяется, поскольку QEMU уже имеет его, и начните в разделе "Использование заглушек эмулятора". Краткая форма заключается в том, что вы запускаете QEMU с опцией -s (экспортируете соединение GDB на localhost: 1234) и опцию -s (дождитесь завершения команды GDB "продолжить" перед запуском), а затем в GDB on ваш хозяин говорит target remote :1234 вместо run. Кроме того, конечно, вам нужно использовать ARM-версию GDB, а не native-x86.

(Кроме того, если вы готовы заплатить за коммерческое решение, toolchain CodeSourcery ARM имеет интеграцию IDE, чтобы автоматически установить все это, включая поддержку "printf" для печати в консоли отладчика. Это работает физическая плата тоже, если у вас есть аппаратный отладчик. Обычная оговорка о том, что я являюсь сотрудником CodeSourcery, применяется, но я считаю, что это очень просто в использовании.)

Обновление, 2012: toolchain CodeSourcery теперь называется Mentor Graphics Sourcery CodeBench, но все вышеприведенное все еще применяется.

Ответ 2

Я понимаю, что я обращаюсь к вашей исходной проблеме здесь, а не к предлагаемому решению (возможно, это лучше?), но для использования GDB (или Insight/GDB) непосредственно в целевой среде используйте недорогой инструмент JTAG и OpenOCD. Пример такой настройки и ее реализация можно найти здесь.

Если у вас есть больший бюджет, может быть полезен более полнофункциональный отладчик JTAG, например Abatron BDI3000 с прошивкой bdiGDB, который позволяет удаленная отладка и программирование устройств через Ethernet с GDB и никаких специальных драйверов или целевого агента отладки.

Ответ 3

Возможно, микроядро вроде OKL4 подойдет вашим потребностям?