Дистанційна налагодження ядра в FreeBSD з використанням послідовного зв'язку

Введення


FreeBSD – Це розвинена операційна система, створена на базі BSD – версії UNIX, Розробленої в Каліфорнійському Університеті, Берклі. Вона забезпечує високу продуктивність, більше сумісності з іншими операційними системами, наприклад операційною системою Windows, І менше системного адміністрування. FreeBSD включає підтримку на рівні ядра фільтрації брандмауером IP з урахуванням контексту і інші сервіси, такі як посередницькі шлюзи IP, списки контролю доступу, мандатний контроль доступу, віртуальний хостинг, заснований на jail, і криптографічно захищене зберігання даних.


При розробці коду ядра або запуску розроблюваного ядра іноді видається повідомлення про фатальну помилку. Щоб отримати корисну інформацію, дуже важливо провести діагностику дампа оперативної пам'яті. Якщо Ви спробуєте використовувати ту ж саму машину, на якій ведеться розробка, для відстеження неполадок у дампі оперативної пам'яті, це може вплинути на продуктивність системи. В один момент часу можна відстежувати неполадки тільки в одному дампі оперативної пам'яті. Щоб ефективно відстежувати неполадки в дампі вашого ядра, краще за все встановити сесію віддаленої налагодження між машиною, на якій ведеться розробка, і цільової машиною, і віддалено налагоджувати ядро з використанням послідовної зв'язку.


Утиліта kgdb – Це відладчик, заснований на gdb, Який надає можливість налагодження основних файлів ядра. FreeBSD 5.3 і вище забезпечені утилітою kgdb. Якщо у Вас старіша версія FreeBSD, Ви, тим не менш, можете скористатися командою gdb -k, Щоб прочитати файл дампа пам'яті. kgdb допомагає поміщати в код ядра точки зупину, так що Ви можете покроково відстежувати значення змінних.


У цій статті показується, яким чином встановити середу налагодження за використанням послідовного порту зв'язку, як компілювати змінений код ядра і як почати налагодження ядра. Також даються деякі рекомендації щодо усунення несправностей.


Установка середовища налагодження


Щоб встановити середу віддаленої налагодження для налагодження ядра FreeBSD, Вам потрібно дві машини: цільова машина і та машина, на якій ведеться розробка. Цільова машина працює з образом нового ядра, яке потрібно налагоджувати. Машина, на якій ведеться розробка, використовується для налагодження ядра, запущеного на цільовій машині. Для поліпшення продуктивності як машини, на якій ведеться розробка, можна використовувати машину з кращого конфігурацією.


ДоАбель "Нуль-модем"


Нуль-модем – це комунікаційний метод, що дозволяє з'єднати два комп'ютери безпосередньо за допомогою кабелю по інтерфейсу RS-232. Початковий стандарт RS-232 визначав зв'язок між комп'ютерами тільки через модеми. При з'єднанні "нуль-модем" лінії передачі і прийому пов'язані перехресно. Залежно від завдання іноді одна або кілька ліній квитирования пов'язані перехресно. Використовується кілька монтажних схем, оскільки з'єднання "нуль-модем" не покривається стандартом.


Якщо Ви підключаєте кабель "нуль-модем" до послідовного порту, відладчик може працювати на своїй поточній максимальної швидкості 19200, на відміну від швидкості 9600 при з'єднанні через модем. Ця конфігурація, як правило, вважається більш надійною, ніж використання модему, оскільки:


Лістинг 1. Схема 25-контактного кабелю "нуль-модем"




                

2 3 "Передача даних" (Transmit Data)
2 Березня "Прийом даних" (Receive Data)
4 Травня "Запит передачі" (Request to Send)
4 Травня "Гасіння передачі" (Clear to Send)
20 червня "Готовність набору даних" (Data Set Ready) і
"Йде передача даних" (Carrier Detect)
7 липня "Сигнальна земля" (Signal Ground)
20 червня "Готовність терміналу" (Data Terminal Ready)


Модифікування файлів ядра


Щоб ядро FreeBSD розпізнавати серед його віддаленої налагодження, що використовує послідовне з'єднання, Вам буде потрібно модифікувати певні файли його конфігурації. Перш за все, зробіть резервну копію початкового конфігураційного файлу / usr/src/sys/i386/conf/GENERIC наступним чином:






$cd /usr/src/sys/i386/conf/
$cp GENERIC MYKERNEL

На тій машині, на якій ведеться Ваша розробка, відкрийте цей конфігураційний файл віддається перевага Вами редактором (vi або emacs):






$ emacs /usr/src/sys/i386/conf/MYKERNEL

Додайте в нього наступні рядки:






options ddb
# Цей рядок додасть відладчик в ядро після компіляції ядра.

makeoptions debug = -g
# Цей рядок повідомить компілятору додати налагоджувальну інформацію в новий відкомпільований
# Образ ядра, який Ви збираєтеся розмістити на цільовій машині.


Щоб активізувати з'єднання по послідовному порту для налагодження ядра, Вам буде потрібно модифікувати той же самий конфігураційний файл. Знайдіть у файлі / usr/src/sys/i386/conf/MYKERNEL слово sio0, Яке позначає Ваш послідовний порт COM1 на Вашому комп'ютері. Встановіть прапор порту 0x80 наступним чином:






device sio0 at isa? port IO_COM1 flags 0x80
 

Компілювання ядра FreeBSD


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


Настройте ядро з допомогою такої команди:






572
$ cd /usr/src/sys/i386/conf/
$ config -g MYKERNEL

Опція -g додає налагоджувальну інформацію в образ ядра. Після успішного виконання цієї команди зверніть увагу на те, як вона створює папку MYKERNEL в / usr / src / sys / compile /.


Перейдіть в теку / usr / src / sys / compile / MYKERNEL / наступним чином:






$ cd /usr/src/sys/compile/MYKERNEL/
 

Вам слід перевірити різноманітні залежності між різними модулями або файлами за допомогою такої команди:






$ make depend
 

Тепер настала пора збирати ядро і встановлювати новий образ ядра наступним чином:






$ make
$ make install

Після успішної операції зборки Ваш образ в папці boot переписується щойно зібраним чином ядра; старий образ ядра зберігається як kernel.old.


Налагодження ядра


Перед тим, як почати, переконайтеся в тому, що Ви з'єднали кабелем "нуль-модем" машину, на якій ведеться розробка, і цільову машину.


Як тільки компіляція завершиться, скопіюйте цей образ / usr / src / sys / compile / MYKERNEL / kernel.debug з машини, на якій ведеться розробка, на цільову машину. Оскільки Вам буде потрібно налагоджувати новий образ kernel.debug, Вам слід перезапустити цільову машину з образом kernel.debug.


Введіть такі команди при завантаженні машини, щоб вона увійшла в режим налагодження:






load kernel.debug
boot -d

Інтерфейс отладчика запущений, і це дозволяє Вам почати налагодження з машини, на якій ведеться розробка. Введіть:






ddb> gdb
 

Вам буде потрібно відразу ж форсувати наступний крок, просто набравши s (Step). Щоб почати налагодження ядра, відкрийте редактор emacs на машині, на якій ведеться розробка. Це дозволить Вам відкрити утиліту kgdb; Тільки в emacs Ви можете здійснювати відладку ядра порядково. Після того, як Ви відкриєте редактор emacs, запустіть gdb з тим чином kernel.debug, який Ви хочете налагоджувати, з опцією -k для налагодження ядра. У редакторі emacs з'явиться запрошення на введення команд kgdb. Щоб почати сесію віддаленої налагодження, введіть:






(kgdb) target remote /dev/cuaa0 
 

Рекомендації щодо усунення неполадок


Для установки середовища налагодження дуже важливо, щоб у Вас був при собі відповідний кабель "нуль-модем". У цій статті розглядається 25-контактна схема нуль-модему.


У момент ініціації віддаленої налагодження Ви можете отримати повідомлення про помилку Ignoring packet error…. Ця помилка вказує на те, що швидкості двійковій передачі машини, на якій ведеться Ваша розробка, і цільової машини розрізняються. Швидкість двійкової передачі машини – це кількість символів, що передаються в секунду. Швидкість двійкової передачі може відрізнятися від швидкості передачі бітів, так як у символу може бути більш двох станів. Вам буде потрібно налаштувати обидві машини на однакову швидкість двійковій передачі. Це можна зробити за допомогою наступної команди:






set baudrate 9600
 

Висновок


У застосування віддаленої налагодження ядра замість традиційної є різні переваги. Продуктивність Вашої системи взагалі не зачіпається, оскільки Ви її налагоджує віддалено, на машині, на якій ведеться Ваша розробка (одній на один момент часу). Ви можете налагоджувати стільки образів ядра (що знаходяться на цільових машинах), скільки ви хочете; це стає очевидним для користувачів, як тільки починається налагодження. Якщо gdb зависає або припиняє роботу через який-небудь проблеми, стартуйте новий екземпляр gdb та підключіться до kgdb за допомогою цільової дистанційної команди.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*