Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра 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. Ряд самых интересных на сегодня платформ никак не затрагиваются этими средствами.


Предыдущий раздел: Оглавление Следующий раздел:
Отладочная печать   Отладка в виртуальной машине