Доброго времени суток. Исходные данные Образ .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 и точки останова не срабатывают. Вопрос: есть ли еще способы? или что я делаю не так?
Чудес на свете не бывает : точку останова можно поставить только после того, как button.o загружен в память. Кстати в ядро да и в модули gdb вряд ли разрешит ставить брейки. И наконец : зачем такое извращение как отладка по сети. В Линуксе несколько терминальных экранов : на одном ставишь брейки в ядре - иначе никак, или modprobe просто отлаживай, но придется все равно в ядро лезть, в другом выполняешь то, что нужно.
модуль загружен в память как бы иначе я получала адреса его секций через proc На ядре модуль gdb разрешает ставить бряки так как отладка внутрених частей ядра идет на ура. Бряки на системные вызовы и прочие функции прекрасно проходят. Затем что ядерные отладчики очень глюкаво себя ведут при попытке продебужить загрузку. А ее в основном и дебужу.
Я для этого и написал про чудеса. Т.к. их не бывает, то либо вы ставили софтовый брейк и его затерли перезагрузкой, либо если ставили аппаратный и система туда не идет. Почему узнать легко - трейсите modprobe . Кстати в Винде оллидебуг иногда не попадает на аппаратный брейк, а вот брейк на диапазон памяти срабатывает. Значит не все так просто в мире отладки, хотя чудес увы не бывает.
bsnake int 3 крашит системув отладчике видно только только обработчики исключений и выбратся из них не получается а поставив бряк на sys_init_module я прекрасно прохожувсю загрузку модуля (очень интересный процесс надо сказать) но в сам код модуля не попадаю. То есть я не могу попасть в функцию init модуля и не могу поставить бряк на внутренние функции модуля. Честно говоря начинаю в этом подозревать что хостовая система 64 битная а под виртуалкой x86.
смотри код sys_init_module в kernel/module.c там явно вызывается mod->init(); дизасми и поставь бряк прямо на нужное место
Теперь сообразил. QEMU эмулит очень древний чипсет 440FX. Кроме того естественно идет сильное замедление ... Все это совсем не на пользу аппаратным штучками и драйвера отлаживать я бы там не стал. Есть же VmWare, Virtual PC и VirtualBox и вроде у всех есть некоммерческий релиз. Кстати, а без отладчика-то что происходит - может драйвер просто не проходит проверку по modprobe?
valterg Без отладчика все нормально. Я же писала что драйвер отлаживаю произвольный и абсолютно рабочий. Текст того что было изменено выложу позже когда все будет проверено, иначе начнется кидание тапками =)