Низкоуровневая отладка на основе QEMU
Я должен протестировать код низкого уровня на архитектуре ARM. Обычно эксперименты на реальной плате довольно сложны, поэтому я думал о QEMU.
То, что я хотел бы получить, это какая-то отладочная информация, такая как printfs или gdb. Я знаю, что это просто с Linux, так как он реализует драйвер устройства для интегратора QEMU и функцию GDB, но я не работаю с Linux. Также я подозреваю, что извлечь такую функциональность из исходного кода ядра Linux будет сложно.
Я ищу в какой-то простой операционной системе, которая уже реализует одну из этих функций. У вас есть совет?
3 ответа
Вам не нужна целевая ОС для отладки кода, работающего внутри QEMU - QEMU уже сделает это за вас.
В частности, QEMU поддерживает удаленную отладку из GDB - вы можете запустить QEMU с соответствующими параметрами командной строки и экспортировать интерфейс, к которому может подключиться копия GDB (запущенная на главном компьютере). На этом этапе вы можете отлаживать программу в GDB почти так же, как если бы вы запускали ее на хост-компьютере.
http://wiki.osdev.org/GDB кажется, содержит немного больше базовой информации; возможно, этого недостаточно, чтобы полностью начать работу, но, по крайней мере, вы получите основную идею и некоторые термины, которые нужно искать в документации QEMU и GDB. Пропустите немного о "Реализации заглушек GDB", которая здесь не применима, поскольку в QEMU она уже есть, и начните с раздела "Использование заглушек эмулятора". Краткая форма просто, что вы начинаете QEMU с -s
опция (экспортировать соединение GDB на localhost:1234) и -S
опция (дождитесь команды GDB "продолжить" перед началом выполнения), а затем в GDB на вашем хосте вы говорите target remote :1234
вместо run
, Также, конечно, вам нужно использовать версию GDB для ARM, а не для native-x86.
(Кроме того, если вы готовы платить за коммерческое решение, в ARM-инструментарии CodeSourcery есть интегрированная среда IDE для автоматической настройки всего этого, включая поддержку printf для печати в консоли отладчика. Это работает на физической плате. Кроме того, если у вас есть аппаратный отладчик. Отказ от ответственности за то, что я являюсь сотрудником CodeSourcery, применим, но я нахожу его очень простым в использовании.)
Обновление, 2012: набор инструментов CodeSourcery теперь называется CodeBench Mentor Graphics Sourcery, но все вышеперечисленное все еще применяется.
Я понимаю, что я рассматриваю вашу исходную проблему здесь, а не предлагаемое вами решение (возможно, это лучше?), Но для использования GDB (или Insight/GDB) непосредственно на цели, используйте недорогой инструмент JTAG и OpenOCD. Пример такой установки и способы ее реализации можно найти здесь.
Если у вас больший бюджет, может быть полезен более полнофункциональный отладчик JTAG, такой как Abatron BDI3000 с микропрограммой bdiGDB, который позволяет выполнять удаленную отладку и программировать устройства через Ethernet с GDB, без специальных драйверов или целевого отладочного агента.