FreeBSD - это развитая операционная система, созданная на базе BSD - версии UNIX®, разработанной в Калифорнийском Университете, Беркли. Она обеспечивает высокую производительность, больше совместимости с другими операционными системами и меньше системного администрирования. FreeBSD включает поддержку на уровне ядра фильтрации брандмауэром IP с учетом контекста и другие сервисы, такие как посреднические шлюзы IP, списки контроля доступа, мандатный контроль доступа, виртуальный хостинг, основанный на jail, и криптографически защищенное хранение данных.
При разработке кода ядра или запуске разрабатываемого ядра иногда выдается сообщение о фатальной ошибке. Чтобы получить полезную информацию, очень важно провести диагностику дампа оперативной памяти. Если Вы попытаетесь использовать ту же самую машину, на которой ведется разработка, для отслеживания неполадок в дампе оперативной памяти, это может повлиять на производительность системы. В один момент времени можно отслеживать неполадки только в одном дампе оперативной памяти. Чтобы эффективно отслеживать неполадки в дампе вашего ядра, лучше всего установить сессию удаленной отладки между машиной, на которой ведется разработка, и целевой машиной, и удаленно отлаживать ядро с использованием последовательной связи.
Утилита kgdb - это отладчик, основанный на gdb, который предоставляет возможность отладки основных файлов ядра. FreeBSD 5.3 и выше снабжены утилитой kgdb. Если у Вас более старая версия FreeBSD, Вы, тем не менее, можете воспользоваться командой gdb -k, чтобы прочесть файл дампа памяти. kgdb помогает помещать в код ядра точки останова, так что Вы можете пошагово отслеживать значения переменных.
В этой статье показывается, каким образом установить среду отладки с использованием последовательного порта связи, как компилировать измененный код ядра и как начать отладку ядра. Также даются некоторые рекомендации по устранению неисправностей.
Чтобы установить среду удаленной отладки для отладки ядра FreeBSD, Вам требуются две машины: целевая машина и та машина, на которой ведется разработка. Целевая машина работает с образом нового ядра, которое требуется отлаживать. Машина, на которой ведется разработка, используется для отладки ядра, запущенного на целевой машине. Для улучшения производительности в качестве машины, на которой ведется разработка, можно использовать машину с лучшей конфигурацией.
Нуль-модем - это коммуникационный метод, позволяющий соединить два компьютера напрямую при помощи кабеля по интерфейсу RS-232. Изначальный стандарт RS-232 определял связь между компьютерами только через модемы. При соединении "нуль-модем" линии передачи и приема связаны перекрестно. В зависимости от задачи иногда одна или несколько линий квитирования связаны перекрестно. Используется несколько монтажных схем, поскольку соединение "нуль-модем" не покрывается стандартом.
Если Вы подключаете кабель "нуль-модем" к последовательному порту, отладчик может работать на своей текущей максимальной скорости 19200, в отличие от скорости 9600 при соединении через модем. Эта конфигурация, как правило, считается более надежной, чем использование модема, поскольку:
- "Нуль-модем" - это последовательный кабель, который позволяет пересылать данные между двумя последовательными портами. Как правило, к последовательному порту подключают последовательное устройство. В этом случае приходится настраивать целевой компьютер на прием соединения вида "последовательный порт - последовательный порт". Важно использовать именно "нуль-модем"; если использовать обычный последовательный кабель, целевой компьютер будет ожидать соединения с последовательным устройством, а не с последовательным портом, и его будет невозможно отлаживать.
- При использовании "нуль-модема" для установки прямого последовательного соединения между двумя компьютерами кабель должен быть подключен, как это показано ниже в листинге 1
Листинг 1. Схема 25-контактного кабеля "нуль-модем"
2 3 "Передача данных" (Transmit Data)
3 2 "Прием данных" (Receive Data)
4 5 "Запрос передачи" (Request to Send)
5 4 "Гашение передачи" (Clear to Send)
6 20 "Готовность набора данных" (Data Set Ready) и
"Идет передача данных" (Carrier Detect)
7 7 "Сигнальная земля" (Signal Ground)
20 6 "Готовность терминала" (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 |
Как только Вы закончите с изменениями в конфигурационных файлах ядра, Вам следует скомпилировать Ваше ядро, чтобы можно было отлаживать новый образ ядра.
Сконфигурируйте ядро при помощи следующей команды:
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-контактная схема нуль-модема. Если Вы хотите использовать 9-контактную схему "нуль-модема", посмотрите в раздел Ресурсы, чтобы получить больше информации об установке "нуль-модема".
В момент инициации удаленной отладки Вы можете получить сообщение об ошибке Ignoring packet error.... Эта ошибка указывает на то, что скорости двоичной передачи машины, на которой ведется Ваша разработка, и целевой машины различаются. Скорость двоичной передачи машины - это количество символов, передаваемых в секунду. Скорость двоичной передачи может отличаться от скорости передачи в битах, так как у символа может быть более двух состояний. Вам потребуется настроить обе машины на одинаковую скорость двоичной передачи. Это можно сделать с помощью следующей команды:
set baudrate 9600 |
У применения удаленной отладки ядра вместо традиционной есть различные преимущества. Производительность Вашей системы вообще не затрагивается, поскольку Вы ее отлаживаете удаленно, на машине, на которой ведется Ваша разработка (одной в один момент времени). Вы можете отлаживать столько образов ядра (находящихся на целевых машинах), сколько вы хотите; это становится очевидным для пользователей, как только начинается отладка. Если gdb зависает или прекращает работу из-за какой-нибудь проблемы, стартуйте новый экземпляр gdb и подключитесь к kgdb при помощи целевой дистанционной команды.
Научиться
- Оригинал статьи:
Remote kernel debugging in FreeBSD using serial communication
-
Установка "нуль-модема": Узнайте о применении 9-контактной схемы абеля "нуль-модем".
-
операционная система FreeBSD: Узнайте обо всех новостях, событиях и доступных ресурсах FreeBSD.
-
GDB: GNU-отладчик проектов
-
kgdb: Узнайте больше об отладчике ядра для FreeBSD.
-
"Установка FreeBSD" (developerWorks, May 2001): Узнайте, как добиться работы FreeBSD на Вашем компьютере.
- Найдите библиотеку AIX® и UNIX по теме (EN):
- Системное администрирование
- Разработка приложений
- Производительность
- Переносимость
- Безопасность
- Подсказки
- Инструменты и утилиты
- Технология Java™
- Linux®
- Открытый код
-
AIX и UNIX для новичков: Чтобы узнать больше об AIX и UNIX, посетите страницу "Для новичков в AIX и UNIX".
-
Семинары и обучение на IBM developerWorks Россия.
-
Podcast-каналы: настройте приемники и поймайте волну технических экспертов IBM.
Получить продукты и технологии
-
FreeBSD: Загрузите операционную систему FreeBSD, приложения и вспомогательное программное обеспечение.
-
Ознакомительные версии программного обеспечения IBM: Используйте в вашем следующем проекте по разработке программы, которые можно загрузить напрямую с developerWorks.
Обсудить
- Примите участие в обсуждении материала на форуме.
-
Примите участие в форумах AIX и UNIX (EN):
- AIX 5L™ -- специализированный форум
- Форум AIX для разработчиков
- Управление кластерными системами
- Ассистент поддержки IBM
- Средства производительности -- специализированный
- Виртуализация -- специализированный
- Больше форумов AIX и UNIX

Джейеш В. Реин работает в IBM инженером по системному программному обеспечению и имеет пятилетний опыт разработки продуктов, в основном занимаясь сетевым программированием и программным обеспечением для управления памятью. Он проделал существенную работу над операционными системами FreeBSD и AIX. Сейчас Джейеш работает совместно с IBM India Systems и Technology Lab в Пуне, в Индии. С ним можно связаться по адресу jayesh.rane@in.ibm.com.