GDB не останавливается в точке останова startup_32 - PullRequest
0 голосов
/ 13 декабря 2018

Отладка загрузки ядра Linux с помощью qemu и gdb.Это исходная ветвь: https://android.googlesource.com/kernel/goldfish/+/android-goldfish-3.18. Конфигурация i386_ranchu_defconfig.Вот шаги, которые я использую:

qemu-system-i386 -kernel ~/aosp/goldfish/arch/x86/boot/bzImage -s -S
gdb ~/aosp/goldfish/vmlinux
(gdb) target remote :1234
0x0000fff0 in ?? ()
(gdb) b startup_32
Breakpoint 1 at 0xc0200000: file arch/x86/kernel/head_32.S, line 96.
(gdb) c
Continuing.

Однако программа не останавливается при запуске_32.Вместо этого, если я изменяю startup_32 на start_kernel, он работает.

(gdb) b start_kernel
Breakpoint 1 at 0xc0b3672c: file init/main.c, line 498.
(gdb) c
Continuing.

Breakpoint 1, start_kernel () at init/main.c:498
498 {
(gdb) 

Почему программа не останавливается при запуске_32?

1 Ответ

0 голосов
/ 16 декабря 2018

startup_32 является частью кода начальной загрузки, и виртуальная память еще не настроена, поэтому попытка взломать 0xc0200000 (адрес виртуальной памяти), вероятно, заблокирует систему, и ядро ​​не выполнит этот переход.

start_kernel OTOH, происходит после инициализации виртуальной памяти.

...