Отладка модуля ядра в gdb

Тема в разделе "WASM.UNIX", создана пользователем friackazoid, 10 янв 2010.

  1. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    Доброго времени суток.
    Исходные данные
    Образ .raw с гентой запускаемый через qemu. gdb конектится как обычно через localhost:1234.

    Необходимо:
    отследить как работает один из модулей. Модуль стандартный скажем button (это совершенно не принципиально) рабочий и хороший, не падает исключений не вызывает.

    Что делаю:
    Узнаю ядреса модуля
    cat /sys/module/button/section/.text и т.д.
    загружаю add-symbol-file /usr/src/linux/drivers/acpi/button.o

    Ставлю точки останова на acpi_button_init и acpi_button_exit.

    Делаю rmmod и modprobe и точки останова не срабатывают.

    Вопрос:
    есть ли еще способы? или что я делаю не так?
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Чудес на свете не бывает : точку останова можно поставить только после того, как button.o загружен в память.
    Кстати в ядро да и в модули gdb вряд ли разрешит ставить брейки. И наконец : зачем такое извращение как отладка по сети. В Линуксе несколько терминальных экранов : на одном ставишь брейки в ядре - иначе никак, или modprobe просто отлаживай, но придется все равно в ядро лезть, в другом выполняешь то, что нужно.
     
  3. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    модуль загружен в память как бы иначе я получала адреса его секций через proc

    На ядре модуль gdb разрешает ставить бряки так как отладка внутрених частей ядра идет на ура. Бряки на системные вызовы и прочие функции прекрасно проходят.

    Затем что ядерные отладчики очень глюкаво себя ведут при попытке продебужить загрузку. А ее в основном и дебужу.
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Я для этого и написал про чудеса. Т.к. их не бывает, то либо вы ставили софтовый брейк и его затерли перезагрузкой, либо если ставили аппаратный и система туда не идет. Почему узнать легко - трейсите modprobe . Кстати в Винде оллидебуг иногда не попадает на аппаратный брейк, а вот брейк на диапазон памяти срабатывает. Значит не все так просто в мире отладки, хотя чудес увы не бывает.
     
  5. bsnake

    bsnake New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    91
    asm("int 0x03"); в помощь
     
  6. bsnake

    bsnake New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    91
    а если надо сторонний модуль ставь бряк на sys_init_module
     
  7. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    bsnake
    int 3 крашит системув отладчике видно только только обработчики исключений и выбратся из них не получается

    а поставив бряк на sys_init_module я прекрасно прохожувсю загрузку модуля (очень интересный процесс надо сказать) но в сам код модуля не попадаю. То есть я не могу попасть в функцию init модуля и не могу поставить бряк на внутренние функции модуля.

    Честно говоря начинаю в этом подозревать что хостовая система 64 битная а под виртуалкой x86.
     
  8. bsnake

    bsnake New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    91
    смотри код sys_init_module в kernel/module.c
    там явно вызывается mod->init();
    дизасми и поставь бряк прямо на нужное место
     
  9. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    Юмор ситуации в том что именно эта часть загрузки модуля и изменена.
     
  10. bsnake

    bsnake New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    91
    disassemble sus_init_module в студию
     
  11. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Теперь сообразил. QEMU эмулит очень древний чипсет 440FX. Кроме того естественно идет сильное замедление ... Все это совсем не на пользу аппаратным штучками и драйвера отлаживать я бы там не стал. Есть же VmWare, Virtual PC и VirtualBox и вроде у всех есть некоммерческий релиз.
    Кстати, а без отладчика-то что происходит - может драйвер просто не проходит проверку по modprobe?
     
  12. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    valterg
    Без отладчика все нормально. Я же писала что драйвер отлаживаю произвольный и абсолютно рабочий.

    Текст того что было изменено выложу позже когда все будет проверено, иначе начнется кидание тапками =)