Разработка ядра Linux - [177]

Шрифт
Интервал

.

Обычно эти вызовы используются в качестве объявления о наличие ошибки (assertion), чтобы сигнализировать о ситуации, которая не должна произойти.

>if (bad_thing)

> BUG();

Или даже так.

>BUG_ON(bad_thing);

О более критичной ошибке можно сигнализировать с помощью функции >panic(). Функция >panic() печатает сообщение об ошибке и останавливает ядро. Ясно, что эту функцию следует использовать только в самой плохой ситуации.

>if (terrible_thing)

> panic("foo is %ld!\n", foo);

Иногда необходимо просто вывести на консоль трассировку стека, чтобы облегчить отладку. В этих случаях используется функция >dump_stack(). Эта функция отображает на консоль содержимое регистров процессора и обратную трассировку вызовов функций.

>if (!debug_check) {

> printk(KERN_DEBUG "выдать некоторую информацию...\n");

> dump_stack();

>}

Магическая клавиша >SysRq

Использование магической клавиши >SysRq, которую можно активизировать с помощью конфигурационного параметра >CONFIG_MAGIC_SYSRQ на этапе компиляции, часто позволяет значительно облегчить жизнь. Клавиша >SysRq является стандартной на многих клавиатурах. Для аппаратных платформ i386 и PPC ей соответствует комбинация клавиш >ALT-PrintScreen. Если указанный конфигурационный параметр активизирован, то специальные комбинации клавиш позволяют взаимодействовать с ядром независимо от того, чем ядро в данный момент нанимается. Это в свою очередь позволяет выполнять некоторые полезные операции даже на неработоспособной системе.

В дополнение к конфигурационному параметру существует вызов >sysctl для включения и выключения этого свойства.

>echo 1 > /proc/sys/kernel/sysrq

Список возможных комбинаций клавиш можно получить с консоли путем нажатия комбинации клавиш >SysRq-h. Комбинация клавиш >SysRq-s выполняет синхронизацию не сохраненных буферов файловых систем на диск, комбинация >SysRq-u размонтирует все файловые системы, a >SysRq-b — перегружает машину. Последовательное использование этих комбинаций клавиш позволяет более безопасно перегрузить машину, которая зависла, чем простое нажатие кнопки >reset.

Если машина заблокирована очень сильно, то она может не отвечать на магические комбинации клавиш >SysRq, или соответствующая операция не будет выполнена. Если же повезет, то эти комбинации клавиш смогут помочь при отладке, а также сохранить данные. В табл. 18.2 приведен список поддерживаемых команд >SysRq.


Таблица 18.2. Список поддерживаемых команд SysRq

КомандаОписание
>SysRq-bПерегрузить машину (reboot)
>SysRq-eПослать сигнал >SIGTERM всем процессам, кроме процесса >init
>SysRq-hОтобразить на консоли помощь по использованию комбинаций клавиш >SysRq
>SysRq-iПослать сигнал >SIGKILL всем процессам, кроме процесса >init
>SysRq-kКлавиша безопасного доступа: завершить все процессы, связанные с текущей консолью
>SysRq-lПослать сигнал >SIGKILL всем процессам, включая процесс >init
>SysRq-mОтобразить на консоли дамп информации по использованию памяти
>SysRq-oЗавершить работу машины (shutdown)
>SysRq-pОтобразить на консоли дамп регистров памяти
>SysRq-rОтключить прямой режим работы клавиатуры (raw mode)
>SysRq-sСинхронизировать данные смонтированных файловых систем с дисковыми устройствами
>SysRq-tОтобразить на консоли дамп информации о заданиях
>SysRq-uРазмонтировать все смонтированные файловые системы

В файле >Documentation/sysrq.txt, который находится в каталоге исходных кодов ядра, приводится более полное описание. Реализация поддержки магической комбинации клавиш находится в файле >drivers/char/sysrq.с. Магические комбинации клавиш >SysRq — жизненно необходимый инструмент, который помогает в отладке и сохранении "гибнущей" системы, так как предоставляет большие возможности для любого пользователя при работе с консолью. Тем не менее необходимо соблюдать осторожность при его использовании на критичных машинах. Если же машина используется для разработок, то польза от этих команд огромная.

Сага об отладчике ядра

Многие разработчики ядра давно высказываются о необходимости встроенного в ядро отладчика. К сожалению, Линус не желает видеть отладчик ядра в своем дереве исходного кода, Он уверен, что использование программ-отладчиков приводит к плохому исправлению ошибок неправильно информированными разработчиками. Никто не может поспорить с его логикой — исправления ошибок, построенные на основании хорошего понимания кода скорее всего будут верными. Тем не менее большинство разработчиков ядра все же нуждаются в официальном отладчике, встроенном в ядро. Поскольку такая возможность навряд ли появится в ближайшее время, то взамен было разработано несколько заплат, которые добавляют поддержку отладчика в стандартном ядре. Не смотря на то, что это внешние и неофициальные заплаты, они являются мощными инструментами с высокой функциональностью. Перед тем, как обращаться к этим решениям, посмотрим, на сколько нам может помочь стандартный отладчик ОС Linux — gdb.

Использование отладчика gdb

Для того, чтобы мельком заглянуть внутрь работающего ядра можно использовать стандартный отладчик GNU. Запуск отладчика для работы с ядром почти ни чем не отличается от отладки выполняющегося процесса.

>gdb vmlinux /proc/kcore


Рекомендуем почитать
Ubuntu Linux: базовый курс

Если вы читаете эту книгу, значит вы подумываете о том, как бы поставить и попробовать Ubuntu. Наверняка, вы не захотите сразу отказываться от Windows и поставите Ubuntu, как вторую ОС (операционную систему).Возможно, вы как и я долго метались от дистрибутива к дистрибутиву и решали, какой же установить. Уверяю вас, вы сделали правильный выбор. Данная книга проведёт небольшую, но базовую экскурсию на тему установки и настройки.Я уверен, что вы найдёте эту книгу интересной для себя. Если у вас возникают какие-либо вопросы, я могу осветить их в новой версии этой книги.


Документация NetAMS

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Погружение в Salix

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Домены. Все, что нужно знать о ключевом элементе Интернета

Без доменов современный Интернет невозможен. Читатель найдет сведения о том, как домены появились, как устроена система доменов и как ими эффективно управлять, как домены связаны с информационной безопасностью, какие административные, технические и правовые коллизии возникают вокруг них и что ждет доменные имена в будущем.


Хитрости Windows 7: для профессионалов

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Изучаем Windows Vista. Начали!

Просто и доступно изложены основы работы в Windows Vista с учетом всех особенностей новой версии операционной системы. Особое внимание уделено решению типичных задач и настройке Windows.Книга в первую очередь ориентирована на людей, только начинающих осваивать навыки работы на компьютере. Однако она будет полезна и тем, кто владеет Windows и собирается перейти на новую версию операционной системы.