Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра Linux | ||
Назад | Отладка в ядре | Вперед |
Интерактивные отладчики
Во-первых, для отладочных целей в ядре можно использовать общеизвестный отладчик gdb, но только для целей наблюдения. Но даже это является непростой в организации задачей, если мы собираемся динамически исследовать внутренности своего подгружаемого модуля, а не вообще копаться в коде самого ядра (что вообще не затрагивается по ходу всего нашего рассмотрения). Для запуска gdb используем команду:
# gdb /usr/src/linux/vmlinux /proc/kcore
...
Здесь первый параметр указывает пересобранный образ ядра (несжатый, а загружаемый образ вашей системы, находящийся, например, по имени /boot /vmlinuz — это сжатый образ), а второй параметр — это имя файла ядра, формируемомого динамически. Но для работы с модулем этого мало: отладчик ничего не знает о модуле! Мы можем получить статически информацию о текущей загрузке модуля, и предоставить её gdb. Сделаем это так:
$ sudo insmod ./hello_printk.ko
- ядро должно быть собрано с опцией CONFIG_DEBUG_INFO ...
- при этом в каталоге /sys/module/hello_printk/sections находятся файлы .text, .bss, .data, содержащие адреса начала загрузки секций кода, инициализированных и неинициализированных данных, соответственно.
- используя считанные из них значения, выполним команду в оболочке gdb (запущенной как показано было выше):
(gdb) add-symbol-file ./hello_printk.ko 0xd0832000 -s .bss 0xd0837100 -s .data 0xd0836be0
add symbol table from file "hello_printk.ko" at .text_addr = 0xd0832000 .bss_addr = 0xd0837100 .data_addr = 0xd0836be0 (y or n) y Reading symbols from scull.ko...done. ...
Вот после столь хлопотных действий мы имеем в gdb информацию о нашем модуле и получаем возможность наблюдения за переменными — как я могу оценивать, в меру своих предпочтений, возможности отнюдь не адекватные затраченным усилиям...
Помимо gdb, существует целый ряд независимых проектов, ставящих своей целью отладку для ядра. Но, как уже было сказано: а). все такие проекты носят «инициативный» характер, и б). все они имеют изрядные ограничения в своих возможностях (что связано вообще с принципиальной сложностью отладки в ядре ..., но все эти проекты активно развиваются). Только коротко перечислим такого рода инструменты, детальное их использование оставим для энтузиастов на самостоятельную проработку:
- Встроенный отладчик ядра kdb, являющийся неофициальным патчем к ядру (доступен по адресу http://oss.sgi.com - Silicon Graphics International Corp.). Для использования kdb необходимо взять патч, в версии, в точности соответствующей версии отлаживаемого ядра, применить его и пересобрать и переустановить ядро. В настоящее время существует только для архитектуры IA-32 (x86).
- Патч kgdb, находящийся даже в дереве исходных кодов ядра; эта технология поддерживает удалённую отладку с другого хоста, соединённого с отлаживаемым последовательной линией, или через сеть Ethernet; в кодах ядра можно найти некоторые описания: Documentation/i386/kgdb.
- Независимый проект под тем же именем продукта kgdb (доступен по адресу http://kgdb.linsyssoft.com), эта версия не поддерживает удалённую отладку по сети.
Нужно иметь в виду, что оба названных выше продукта kgdb имеют очень ограниченный спектр поддерживаемых процессорных платформ, из числа тех, на которых работает Linux, реально это x86 и PPC. Ряд самых интересных на сегодня платформ никак не затрагиваются этими средствами.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Отладочная печать | Отладка в виртуальной машине |