The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Поддержка отладки в ядре

Поддержка отладки в ядре

Предыдущая  Содержание  Следующая V*D*V

В Главе 2 мы рекомендовали вам собрать и установить собственное ядро, а не запускать поставляемое ядро, которое пришло с вашего дистрибутива. Одной из главных причин для запуска собственного ядра является то, что разработчики ядра встроили некоторые возможности отладки в само ядро. Эти функции могут создать дополнительный вывод и уменьшить производительность, поэтому они чаще всего не включены в ядрах, собранных дистрибьюторами. Как разработчик ядра, однако, вы имеете другие приоритеты и с радостью примете (минимальные) накладные расходы дополнительной поддержки отладки в ядре.

 

Здесь перечислены параметры конфигурации, которые должны быть включены для ядер, использующихся для разработки. Если не указано другое, все эти параметры находятся в меню “kernel hacking” ("взламывание ядра") любой утилиты конфигурации ядра. Заметим, что некоторые из этих параметров не поддерживаются всеми архитектурами.

 

CONFIG_DEBUG_KERNEL

Этот параметр просто доступными делает другие опции отладки; он должен быть включен, но сам по себе не включает какие-то возможности.

 

CONFIG_DEBUG_SLAB

Этот важнейший параметр включает несколько видов проверок в функциях выделения памяти ядра; при включении этих проверок можно обнаружить ошибки переполнения памяти и отсутствие инициализации. Каждый байт выделенной памяти устанавливается в 0xa5 перед передачей вызывающему и устанавливается в 0x6b, когда освобождается. Если вы когда-либо увидите эти повторяющиеся "ядовитые" шаблоны при выводе из вашего драйвера (или часто в распечатках Oops), вы будете точно знать, какую ошибку искать. При включенной отладке ядро также размещает особые защитные значения до и после каждой выделенной объекту памяти; если эти значения оказываются изменёнными, ядро знает, что кто-то вызвал переполнение памяти, и оно громко выражает недовольство. Так же включаются различные проверки на более малоизвестные ошибки.

 

CONFIG_DEBUG_PAGEALLOC

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

 

CONFIG_DEBUG_SPINLOCK

Когда эта опция включена, ядро улавливает операции на неинициализированных спин-блокировках и другие различные ошибки (такие, как двойная разблокировка).

 

CONFIG_DEBUG_SPINLOCK_SLEEP

Эта опция позволяет проверить наличие попытки заснуть в момент удержания спин-блокировки. На самом деле, оно жалуется, если вы вызываете функцию, которая может потенциально заснуть, даже если вызов в запросе не будет спать.

 

CONFIG_INIT_DEBUG

Отмеченное __init (или __initdata) удаляется после инициализации системы или загрузки модуля. Эта опция позволяет проверить код, который пытается получить доступ к памяти, используемой во время инициализации, после завершения инициализации.

 

CONFIG_DEBUG_INFO

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

 

CONFIG_MAGIC_SYSRQ

Разрешает кнопку “системный SysRq” (“magic SysRq”). Мы рассмотрим эту кнопку позже в этой главе в разделе "Зависания системы".

 

CONFIG_DEBUG_STACKOVERFLOW

CONFIG_DEBUG_STACK_USAGE

Эти опции могут помочь отследить переполнение стека ядра. Явным признаком переполнения стека является листинг Oops без какого-либо признака разумной обратной трассировки. Первая опция добавляет явные проверки переполнения в ядре; вторая заставляет ядро контролировать использование стека и делать доступной некоторую статистику, доступную через системную кнопку SysRq.

 

CONFIG_KALLSYMS

Этот параметр (в настройках “General setup/Standard features”, "Общая настройка/Стандартные возможности") заставляет информацию символов ядра быть встроенной в ядро; он включен по умолчанию. Информация о символах используется в контекстах отладки; без неё листинг Oops может дать вам обратную трассировку ядра только в шестнадцатеричном виде, что не очень полезно.

 

CONFIG_IKCONFIG

CONFIG_IKCONFIG_PROC

Эти параметры (находятся в меню  “General setup”, "Общая настройка") заставляют быть встроенным в ядро полное состояние конфигурации ядра и делают его доступным через /proc. Большинство разработчиков ядра знают, какие конфигурации они использовали, и не нуждаются в этих опциях (которые делают ядро больше). Хотя они могут быть полезны, если вы пытаетесь найти проблему в ядре, собранном кем-то другим.

 

CONFIG_ACPI_DEBUG

Находится в “Power management/ACPI” ("Управление питанием/ACPI"). Эта опция включает подробную отладочную информацию ACPI (Advanced Configuration and Power Interface), которая может быть полезна, если вы подозреваете, что проблема связана с ACPI.

 

CONFIG_DEBUG_DRIVER

Находится в “Device drivers” ("Драйверы устройств"). Включает отладочную информацию в драйверном ядре, которая может быть полезной для отслеживания проблем в низкоуровневом коде поддержки. Мы рассмотрим драйверное ядро в Главе 14.

 

CONFIG_SCSI_CONSTANTS

Это параметр, находящийся в “Device drivers/SCSI device support”  ("Драйверы устройств/поддержка SCSI устройств"), встраивается в информацию для подробных сообщений об ошибках SCSI. Если вы работаете над драйвером SCSI, вы, вероятно, захотите включить эту опцию.

 

CONFIG_INPUT_EVBUG

Эта опция (в разделе “Device drivers/Input device support”, "Драйверы устройств/Поддержка устройств ввода") включает подробное логирование входных событий. Если вы работаете над драйвером для устройства ввода, эта опция может быть полезной. Однако, будьте осведомлены о последствиях для безопасности: логируется всё, что вводится, включая ваши пароли.

 

CONFIG_PROFILING

Эта опция находится в разделе “Profiling support” ("Поддержка профилирования"). Профилирование обычно используется для настройки производительности системы, но оно также может быть полезно для отслеживания некоторых зависаний ядра и связанных с ними проблем.

 

Мы вернёмся к некоторым из вышеуказанных опций при рассмотрении различных способов отслеживания проблем с ядром. Но сначала мы рассмотрим классическую технику отладки: печать отчётов.

Предыдущая  Содержание  Следующая