Удаленная отладка ядра в FreeBSD с использованием последовательной связиИсточник: IBM developerWorks Россия
FreeBSD - это развитая операционная система, созданная на базе BSD - версии UNIX, разработанной в Калифорнийском Университете, Беркли. Она обеспечивает высокую производительность, больше совместимости с другими операционными системами, например операционной системой Windows, и меньше системного администрирования. FreeBSD включает поддержку на уровне ядра фильтрации брандмауэром IP с учетом контекста и другие сервисы, такие как посреднические шлюзы IP, списки контроля доступа, мандатный контроль доступа, виртуальный хостинг, основанный на jail, и криптографически защищенное хранение данных. При разработке кода ядра или запуске разрабатываемого ядра иногда выдается сообщение о фатальной ошибке. Чтобы получить полезную информацию, очень важно провести диагностику дампа оперативной памяти. Если Вы попытаетесь использовать ту же самую машину, на которой ведется разработка, для отслеживания неполадок в дампе оперативной памяти, это может повлиять на производительность системы. В один момент времени можно отслеживать неполадки только в одном дампе оперативной памяти. Чтобы эффективно отслеживать неполадки в дампе вашего ядра, лучше всего установить сессию удаленной отладки между машиной, на которой ведется разработка, и целевой машиной, и удаленно отлаживать ядро с использованием последовательной связи. Утилита В этой статье показывается, каким образом установить среду отладки с использованием последовательного порта связи, как компилировать измененный код ядра и как начать отладку ядра. Также даются некоторые рекомендации по устранению неисправностей. Чтобы установить среду удаленной отладки для отладки ядра FreeBSD, Вам требуются две машины: целевая машина и та машина, на которой ведется разработка. Целевая машина работает с образом нового ядра, которое требуется отлаживать. Машина, на которой ведется разработка, используется для отладки ядра, запущенного на целевой машине. Для улучшения производительности в качестве машины, на которой ведется разработка, можно использовать машину с лучшей конфигурацией. Нуль-модем - это коммуникационный метод, позволяющий соединить два компьютера напрямую при помощи кабеля по интерфейсу RS-232. Изначальный стандарт RS-232 определял связь между компьютерами только через модемы. При соединении "нуль-модем" линии передачи и приема связаны перекрестно. В зависимости от задачи иногда одна или несколько линий квитирования связаны перекрестно. Используется несколько монтажных схем, поскольку соединение "нуль-модем" не покрывается стандартом. Если Вы подключаете кабель "нуль-модем" к последовательному порту, отладчик может работать на своей текущей максимальной скорости 19200, в отличие от скорости 9600 при соединении через модем. Эта конфигурация, как правило, считается более надежной, чем использование модема, поскольку:
Листинг 1. Схема 25-контактного кабеля "нуль-модем"
Чтобы ядро FreeBSD распознавало среду его удаленной отладки, использующую последовательное соединение, Вам потребуется модифицировать определенные файлы его конфигурации. Прежде всего, сделайте резервную копию изначального конфигурационного файла /usr/src/sys/i386/conf/GENERIC следующим образом:
На той машине, на которой ведется Ваша разработка, откройте этот конфигурационный файл предпочитаемым Вами редактором (vi или emacs):
Добавьте в него следующие строки:
Чтобы активизировать соединение по последовательному порту для отладки ядра, Вам потребуется модифицировать тот же самый конфигурационный файл. Найдите в файле /usr/src/sys/i386/conf/MYKERNEL слово
Как только Вы закончите с изменениями в конфигурационных файлах ядра, Вам следует скомпилировать Ваше ядро, чтобы можно было отлаживать новый образ ядра. Сконфигурируйте ядро при помощи следующей команды:
Опция Перейдите в папку /usr/src/sys/compile/MYKERNEL/ следующим образом:
Вам следует проверить разнообразные зависимости между различными модулями или файлами при помощи следующей команды:
Теперь настала пора собирать ядро и устанавливать новый образ ядра следующим образом:
После успешной операции сборки Ваш образ ядра в папке boot переписывается только что собранным образом ядра; старый образ ядра сохраняется как kernel.old. Перед тем, как начать, удостоверьтесь в том, что Вы соединили кабелем "нуль-модем" машину, на которой ведется разработка, и целевую машину. Как только компиляция завершится, скопируйте образ ядра /usr/src/sys/compile/MYKERNEL/kernel.debug с машины, на которой ведется разработка, на целевую машину. Поскольку Вам потребуется отлаживать новый образ kernel.debug, Вам следует перезапустить целевую машину с образом kernel.debug. Введите следующие команды при загрузке машины, чтобы она вошла в режим отладки:
Интерфейс отладчика запущен, и это позволяет Вам начать отладку с машины, на которой ведется разработка. Введите:
Вам потребуется сразу же форсировать следующий шаг, попросту набрав
Рекомендации по устранению неполадок Для установки среды отладки очень важно, чтобы у Вас был при себе подходящий кабель "нуль-модем". В этой статье рассматривается 25-контактная схема нуль-модема. В момент инициации удаленной отладки Вы можете получить сообщение об ошибке
У применения удаленной отладки ядра вместо традиционной есть различные преимущества. Производительность Вашей системы вообще не затрагивается, поскольку Вы ее отлаживаете удаленно, на машине, на которой ведется Ваша разработка (одной в один момент времени). Вы можете отлаживать столько образов ядра (находящихся на целевых машинах), сколько вы хотите; это становится очевидным для пользователей, как только начинается отладка. Если |