Стадия предварительной декомпрессии ядра отладки Linux - PullRequest
5 голосов
/ 06 марта 2012

Я пытаюсь использовать GDB для отладки ядра Linux zImage до его распаковки. Ядро работает на цели ARM, и к нему подключен отладчик JTAG с заглушкой сервера GDB. Цель должна загрузить загрузчик. Загрузчик считывает образ ядра из флэш-памяти и помещает его в ОЗУ на 0x20008000, затем переходит в это место.

Я запустил GDB и подключился к удаленной цели, затем я использую команду add-symbol-file GDB следующим образом:

add-symbol-file arch/arm/boot/compressed/vmlinux 0x20008000 -readnow

Когда я устанавливаю точку останова для этого адреса, он срабатывает в правильном месте - прямо при переходе к ядру. Однако GDB показывает неправильную строку из источника arch/arm/boot/compressed/head.S. Это 4 строки позади. Как я могу это исправить?

Я также попытался добавить опцию -s section addr к add-symbol-file с помощью -s .start 0x20008000; это приводит к точно такой же проблеме.

1 Ответ

2 голосов
/ 24 января 2013

Существуют макросы ассемблера, которые распечатывают материал при компиляции с low level debug.Вы должны убедиться, что макросы соответствуют вашей плате.

linux-latest/arch/arm$ find . -name debug-macro.S | wc
 56      56    2306

Найдите файл для вашей платы и убедитесь, что правильные регистры последовательного порта включены.Вы можете использовать код без использования JTAG.Эти макросы используются в коде распаковки.Конечно, сконфигурируйте с помощью * CONFIG_DEBUG_LL *.

Скорее всего, ATAG неверны или одно из других требований.Оформите заказ Документация / рука / загрузка , чтобы убедиться, что у вас правильно установлены регистры.Обратите внимание, что в новых ядрах есть новое требование для отправки списка dt .

...