Ошибка следующего шага при отладке ядра Android - PullRequest
0 голосов
/ 26 ноября 2018

Я изучаю исходный код ядра Linux на Android.Поэтому я построил среду отладки на эмуляторе Android (эмулятор на основе qemu).Но когда я отлаживаю ядро ​​с помощью gdb, следующая команда всегда переходит к коду ошибки.Вот пример:

(gdb) b vfs_write
Breakpoint 3 at 0xffffffff80383ec8: file fs/read_write.c, line 527.
(gdb) c
Continuing.
[Switching to Thread 3]

Thread 3 hit Breakpoint 3, vfs_write (file=0xffff88003aa7a600, buf=0x72f8f6490f9f "*\032_\f\220\250\364\275\345\310\023\320\022", count=1, pos=0xffff88000b7c7f18)
at fs/read_write.c:527
527     if (!(file->f_mode & FMODE_WRITE))
(gdb) list
522 
523 ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
524 {
525     ssize_t ret;
526 
527     if (!(file->f_mode & FMODE_WRITE))
528         return -EBADF;
529     if (!(file->f_mode & FMODE_CAN_WRITE))
530         return -EINVAL;
531     if (unlikely(!access_ok(VERIFY_READ, buf, count)))
(gdb) n
ioread8 (addr=0xffffc90000040000) at lib/iomap.c:73
73      IO_COND(addr, return inb(port), return readb(addr));
(gdb) 

Точка останова в fs / read_write.c: 527.Когда next (n), отладчик должен остановиться на fs / read_write.c: 528 или fs / read_write.c: 529.Но неожиданно он перешел на lib / iomap.c: 73.

Почему возникает эта проблема?

Я получаю исходный код ядра Android от

https://android.googlesource.com/kernel/goldfish

И, я проверяю ветку android-goldfish-4.4-dev

Я собрал ядро ​​с некоторыми конфигами:

  • CONFIG_DEBUG_KERNEL=y
  • CONFIG_DEBUG_INFO=y
  • CONFIG_KGDB=y
  • CONFIG_FRAME_POINTER=y
  • \# CONFIG_DEBUG_RODATA не установлено
  • \# CONFIG_RANDOMIZE_BASE не установлено

Я запустил эмулятор так:

emulator -avd Pixel2XL-x86_64 -show-kernel -verbose -wipe-data -netfast -kernel arch/x86/boot/bzImage  -qemu -s

AVD Pixel2XL-x86_64 - это арка x86_64, и я собрал ядро ​​как x86_64.

Кто-то сказал этовызвано оптимизацией GCC O2.Я ссылался на взлом ядра: оптимизация GCC для лучшего опыта отладки (-Og)

Но это было бесполезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...