2012-03-05 2 views
5

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

Я начал 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; это приводит к точно такой же проблеме.

+0

Сначала убедитесь, что у вас есть gcc и gdb, которые совместимы, предпочтительно из той же версии инструментальной цепочки. Кроме того, знайте, что ядро ​​Linux скомпилировано с -O2, поэтому некоторые строки оптимизируются. Вы уверены, что там где-то нет. –

+0

Код декомпрессора является относительным. Он может даже копировать себя из одного региона в другой. Загрузочный загрузчик может поместить его туда, где находится декомпрессированная цель; поэтому он должен двигаться сам. Я сомневаюсь, что у вас будут хорошие времена с использованием JTAG с фиксированными символами. Я не знаю, можете ли вы * переместить * с GDB каким-то образом. –

ответ

2

Есть ассемблерные макросы, которые печатают материал при компиляции с низким уровнем отладки. Вы должны убедиться, что макросы подходят для вашей доски.

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

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

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

+0

Текущие макросы находятся в [arm include debug] (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/include/debug) (по состоянию на январь 2010 г. v3 0,19). Также см .: [сжатый debug.S] (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/compressed/debug.S) –

Смежные вопросы