Підтримка налагодження в ядрі

У Главі 2 ми рекомендували вам зібрати і встановити власне ядро, а не запускати поставляється ядро, яке прийшло з вашого дистрибутива. Однією з головних причин для запуску власного ядра є те, що розробники ядра вбудували деякі можливості налагодження в саме ядро. Ці функції можуть створити додатковий висновок і зменшити продуктивність, тому вони найчастіше не включені в ядрах, зібраних дистриб'юторами. Як розробник ядра, однак, ви маєте інші пріоритети і з радістю приймете (мінімальні) накладні витрати додаткової підтримки налагодження в ядрі.

Тут перераховані параметри конфігурації, які повинні бути включені для ядер, що використовуються для розробки. Якщо не вказано інше, всі ці параметри знаходяться в меню "kernel hacking" ( "злом ядра") будь-утиліти конфігурації ядра. Зауважимо, що деякі з цих параметрів не підтримуються всіма архітектурою.

Цей параметр просто доступними робить інші опції налагодження; він повинен бути включений, але сам по собі не включає якісь можливості.

Цей найважливіший параметр включає кілька видів перевірок у функціях виділення пам'яті ядра; при включенні цих перевірок можна виявити помилки переповнення пам'яті і відсутність ініціалізації. Кожен байт виділеної пам'яті встановлюється в 0xa5 перед передачею зухвалому і встановлюється в 0x6b. коли звільняється. Якщо ви коли-небудь побачите ці повторювані "отруйні" шаблони при виведенні з вашого драйвера (або часто в роздруківках Oops), ви будете точно знати, яку помилку шукати. При включеній налагодженні ядро ​​також розміщує особливі захисні значення до і після кожної виділеної об'єкту пам'яті; якщо ці значення виявляються зміненими, ядро ​​знає, що хтось викликав переповнення пам'яті, і воно голосно висловлює невдоволення. Так само включаються різні перевірки на більш маловідомі помилки.

Коли ця опція включена, ядро ​​вловлює операції на неініціалізованих спін-блокування і інші різні помилки (такі, як подвійна розблокування).

Ця опція дозволяє перевірити наявність спроби заснути в момент утримання спін-блокування. Насправді, воно скаржиться, якщо ви викликаєте функцію, яка може потенційно заснути, навіть якщо виклик в запиті не буде спати.

Зазначене __init (або __initdata) видаляється після ініціалізації системи або завантаження модуля. Ця опція дозволяє перевірити код, який намагається отримати доступ до пам'яті, використовуваної під час ініціалізації, після завершення ініціалізації.

За її використання ядро ​​бути зібраним з підключеною повної налагоджування. Вам необхідна ця інформація, якщо ви хочете налагоджувати ядро ​​з gdb. Ви також можете захотіти включити CONFIG_FRAME_POINTER. якщо плануєте використовувати gdb.

Дозволяє кнопку "системний SysRq" ( "magic SysRq"). Ми розглянемо цю кнопку пізніше в цьому розділі в підрозділі "Зависання системи".

Ці опції можуть допомогти відстежити переповнення стека ядра. Явною ознакою переповнення стека є лістинг Oops без якої-небудь ознаки розумної зворотного трасування. Перша опція додає явні перевірки переповнення в ядрі; друга змушує ядро ​​контролювати використання стека і робити доступною деяку статистику, доступну через системну кнопку SysRq.

Цей параметр (в настройках "General setup / Standard features", "Загальне налаштування / Стандартні можливості") змушує інформацію символів ядра бути вбудованою в ядро; він включений за замовчуванням. Інформація про символах використовується в контекстах налагодження; без неї лістинг Oops може дати вам зворотний трасування ядра тільки в шістнадцятковому вигляді, що не дуже корисно.

Ці параметри (знаходяться в меню "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" ( "Підтримка профілювання"). Профілювання зазвичай використовується для настройки продуктивності системи, але воно також може бути корисно для відстеження деяких зависань ядра і пов'язаних з ними проблем.

Ми повернемося до деяких з вищевказаних опцій при розгляді різних способів відстеження проблем з ядром. Але спочатку ми розглянемо класичну техніку налагодження: друк звітів.