Главная » Ядро Linux » Конфигурационные параметры отладки ядра

0

Существует  несколько конфигурационных  параметров, которые помогают в отладке  и тестировании кода ядра и которые включаются во премя  компиляции. Эти параметры доступны в пункте  Kernel  hacking  меню  редактора конфигурации ядра. Все эти параметры зависят  от параметра CONFIG_DEBUG_KERNEL. Для разработки кода  ядра  следует  включать только  те параметры, которые необходимы.

Некоторые из этих параметров достаточно полезны, такие  как отладка  работы  со слябовым распределителем памяти (slab layer debugging), отладка  работы  с верхней памятью (high  memory  debugging), отладка  работы  с отображаемым на память  вводом-выводом (I/O mapping  debugging), отладка  работы  со спин-блокировками (spinlock  debugging)  и  проверка переполнения  стека  (stack  overflow  checking). Однако, один из самых полезных параметров — это проверка перехода в состояние ожидания при захваченной  спин-блокировке  (sleep-inside-spinlock  checking),  которая на самом  деле выполняет значительно больше  работы.

Отладкаатомарныхопераций

Начиная с серии  2.5 в ядре  появилась отличная инфраструктура для  определения  всех типов  нарушения атомарности. Вспомните из главы 8, "Введение  в синхронизацию выполнения кода ядра", что атомарность означает неделимое выполнение, то есть код выполняется без перерыва до завершения, или  не завершается вообще. Код, который удерживает  спин-блокировку, или выполняется при запрещенной преемптивности ядра, является атомарным. Во время  атомарного выполнения нельзя переходить в состояние ожидания. Ожидание при удерживаемой спин-блокировке — один из вариантов взаимоблокировки.

Благодаря свойствам преемптивности,  ядро  имеет  глобальный счетчик  преемптивности. Ядро может  быть настроено так, что, если выполняется переход  в состояние  ожидания, или даже выполняется код, который потенциально может  переходить в состояние ожидания при  выполнении атомарной операции, то ядро  выводит предупреждающее сообщение и  обратную  трассировку. Потенциальные ошибки, которые детектируются таким  образом, включают вызов  функции schedul e ()  при удерживаемой блокировке, выполнение блокирующего выделения памяти при  удерживаемой блокировке, или переход в состояние ожидания при удерживаемой ссылке на данные, связанные с процессором. Эта отладочная инфраструктура может обнаружить очень  много  ошибок и ее очень  рекомендуется использовать.

Следующие конфигурационные  параметры позволяют полностью использовать данную  возможность.

CONFIG_PREEMPT=y CONFIG_DEBUG_KERNEL=y CONFIG_KALLSYMS=y CONFIG_SPINLOCK_SLEEP=y

Источник: Лав,  Роберт. Разработка ядра  Linux, 2-е  издание. : Пер.  с англ.  — М.  : ООО  «И.Д.  Вильяме» 2006. — 448 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии