Низкоуровневая отладка на основе QEMU - PullRequest
13 голосов
/ 10 апреля 2010

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

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

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

Ответы [ 3 ]

17 голосов
/ 11 апреля 2010

Вам не нужна целевая ОС для отладки кода, работающего внутри 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, но все вышеперечисленное по-прежнему применимо.

1 голос
/ 11 апреля 2010

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

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

0 голосов
/ 10 апреля 2010

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

...