2013-04-29 4 views
4

Я пытаюсь эмулировать ядро ​​linux ядро ​​cavia octeon mips64 на Qemu. В настоящее время у меня есть некоторые проблемы с кодом инициализации режима использования и вы хотите отлаживать init.i, я запускаю Qemu с использованием опции -s -S в командной строке и запуска GDB с помощью командыОтладка init на Qemu с помощью gdb

ДДД --debugger/OCTEON-SDK/инструменты/бен/MIPS64-octeon-Linux-гну-GDB /OCTEON-SDK/linux/kernel_2.6/linux/ vmlinux

, а затем прикрепления GDB с помощью команды

целевой удаленный локальный: 1234

В настоящее время gdb отображает только инструкции, выполняемые в пространстве ядра.

Что я хочу спросить, есть ли какой-либо метод, с помощью которого я могу отлаживать инструкции инициализации и библиотеки usmode шаг за шагом, как в случае пространства ядра? Например, если printf выдается из init, тогда я хочу видеть, какие инструкции выполняются в библиотеках и как элемент управления возвращается в ядро?

+0

Это будет зависеть, если поддержка gdb для MIPS может обрабатывать переход между ядром и пользовательским пространством. Попробуйте поставить точку останова на resume_userspace в ядре и на один шаг оттуда и посмотреть, выполняется ли переход. – stsquad

ответ

0

мне удалось шаг отладки BusyBox-х /sbin/init с использованием процедуры, описанной в: Is it possible to use gdb and qemu to debug linux user space programs and kernel space simultaneously?

Единственные дополнительные вещи, которые вы должны иметь в виду, являются:

  • /sbin/init просто символическая к busybox, так вы должны использовать /bin/busybox в качестве объектного файла
  • «главная» функция для /sbin/init на самом деле init_main, следуя конвенции BusyBox о вызове t он является основным для каждого псевдо-исполняемого файла: <exec>_main

Это немного шелушащийся, но в основном просто работает.

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