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