Поддержка отладки в ядре
В Главе 2 мы рекомендовали вам собрать и установить собственное ядро, а не запускать поставляемое ядро, которое пришло с вашего дистрибутива. Одной из главных причин для запуска собственного ядра является то, что разработчики ядра встроили некоторые возможности отладки в само ядро. Эти функции могут создать дополнительный вывод и уменьшить производительность, поэтому они чаще всего не включены в ядрах, собранных дистрибьюторами. Как разработчик ядра, однако, вы имеете другие приоритеты и с радостью примете (минимальные) накладные расходы дополнительной поддержки отладки в ядре.
Здесь перечислены параметры конфигурации, которые должны быть включены для ядер, использующихся для разработки. Если не указано другое, все эти параметры находятся в меню “kernel hacking” ("взламывание ядра") любой утилиты конфигурации ядра. Заметим, что некоторые из этих параметров не поддерживаются всеми архитектурами.
CONFIG_DEBUG_KERNEL
- Этот параметр просто доступными делает другие опции отладки; он должен быть включен, но сам по себе не включает какие-то возможности.
- Этот важнейший параметр включает несколько видов проверок в функциях выделения памяти ядра; при включении этих проверок можно обнаружить ошибки переполнения памяти и отсутствие инициализации. Каждый байт выделенной памяти устанавливается в 0xa5 перед передачей вызывающему и устанавливается в 0x6b, когда освобождается. Если вы когда-либо увидите эти повторяющиеся "ядовитые" шаблоны при выводе из вашего драйвера (или часто в распечатках Oops), вы будете точно знать, какую ошибку искать. При включенной отладке ядро также размещает особые защитные значения до и после каждой выделенной объекту памяти; если эти значения оказываются изменёнными, ядро знает, что кто-то вызвал переполнение памяти, и оно громко выражает недовольство. Так же включаются различные проверки на более малоизвестные ошибки.
- Полные страницы при освобождении удаляются из адресного пространства ядра. Эта опция может значительно замедлить ход событий, но она может также быстро указать на некоторые виды ошибок повреждения памяти.
- Когда эта опция включена, ядро улавливает операции на неинициализированных спин-блокировках и другие различные ошибки (такие, как двойная разблокировка).
- Эта опция позволяет проверить наличие попытки заснуть в момент удержания спин-блокировки. На самом деле, оно жалуется, если вы вызываете функцию, которая может потенциально заснуть, даже если вызов в запросе не будет спать.
- Отмеченное __init (или __initdata) удаляется после инициализации системы или загрузки модуля. Эта опция позволяет проверить код, который пытается получить доступ к памяти, используемой во время инициализации, после завершения инициализации.
- Эта опция заставляет ядро быть собранным с подключенной полной отладочной информацией. Вам необходима эта информация, если вы хотите отлаживать ядро с gdb. Вы также можете захотеть включить CONFIG_FRAME_POINTER, если планируете использовать gdb.
- Разрешает кнопку “системный SysRq” (“magic SysRq”). Мы рассмотрим эту кнопку позже в этой главе в разделе "Зависания системы".
CONFIG_DEBUG_STACK_USAGE
- Эти опции могут помочь отследить переполнение стека ядра. Явным признаком переполнения стека является листинг Oops без какого-либо признака разумной обратной трассировки. Первая опция добавляет явные проверки переполнения в ядре; вторая заставляет ядро контролировать использование стека и делать доступной некоторую статистику, доступную через системную кнопку SysRq.
- Этот параметр (в настройках “General setup/Standard features”, "Общая настройка/Стандартные возможности") заставляет информацию символов ядра быть встроенной в ядро; он включен по умолчанию. Информация о символах используется в контекстах отладки; без неё листинг Oops может дать вам обратную трассировку ядра только в шестнадцатеричном виде, что не очень полезно.
CONFIG_IKCONFIG_PROC
- Эти параметры (находятся в меню “General setup”, "Общая настройка") заставляют быть встроенным в ядро полное состояние конфигурации ядра и делают его доступным через /proc. Большинство разработчиков ядра знают, какие конфигурации они использовали, и не нуждаются в этих опциях (которые делают ядро больше). Хотя они могут быть полезны, если вы пытаетесь найти проблему в ядре, собранном кем-то другим.
- Находится в “Power management/ACPI” ("Управление питанием/ACPI"). Эта опция включает подробную отладочную информацию ACPI (Advanced Configuration and Power Interface), которая может быть полезна, если вы подозреваете, что проблема связана с ACPI.
- Находится в “Device drivers” ("Драйверы устройств"). Включает отладочную информацию в драйверном ядре, которая может быть полезной для отслеживания проблем в низкоуровневом коде поддержки. Мы рассмотрим драйверное ядро в Главе 14.
- Это параметр, находящийся в “Device drivers/SCSI device support” ("Драйверы устройств/поддержка SCSI устройств"), встраивается в информацию для подробных сообщений об ошибках SCSI. Если вы работаете над драйвером SCSI, вы, вероятно, захотите включить эту опцию.
- Эта опция (в разделе “Device drivers/Input device support”, "Драйверы устройств/Поддержка устройств ввода") включает подробное логирование входных событий. Если вы работаете над драйвером для устройства ввода, эта опция может быть полезной. Однако, будьте осведомлены о последствиях для безопасности: логируется всё, что вводится, включая ваши пароли.
- Эта опция находится в разделе “Profiling support” ("Поддержка профилирования"). Профилирование обычно используется для настройки производительности системы, но оно также может быть полезно для отслеживания некоторых зависаний ядра и связанных с ними проблем.
Переведено на сайте www.notabenoid.com
http://notabenoid.com/book/11832/38279
Внимание! Этот перевод, возможно, ещё не готов,
так как модераторы установили для него статус
"перевод редактируется"
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.