Отладка инициализации в Qemu с использованием gdb

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

ddd --debugger / OCTEON-SDK / tools / bin / mips64-octeon-linux-gnu-gdb /OCTEON-SDK/linux/kernel_2.6/linux/vmlinux

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

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

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

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


person user2331102    schedule 29.04.2013    source источник
comment
Это будет зависеть от того, сможет ли поддержка GDB для MIPS обрабатывать переход между ядром и пользовательским пространством. Попробуйте поставить точку останова на resume_userspace в ядре и на один шаг оттуда и посмотрите, обработан ли переход.   -  person stsquad    schedule 03.07.2014


Ответы (1)


Мне удалось выполнить пошаговую отладку /sbin/init BusyBox, используя процедуру, описанную по адресу: Можно ли использовать gdb и qemu для одновременной отладки программ пользовательского пространства Linux и пространства ядра?

Единственное, что вам нужно помнить, это:

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

Это немного нестабильно, но в основном просто работает.

person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 08.10.2017