СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №7/2012
ПРОГРАММИРОВАНИЕ Для отладки пользовательских при ложений разработчикам необходим прямой доступ к потокам, включая способность останавливать и возоб новлять любой поток и просматривать его переменные и стек. Поскольку каж дое приложение может состоять из множества процессов и потоков, мо жет понадобиться останов всех пото ков, связанных с отлаживаемым по током приложения, включая потоки, которые могут влиять на данное при ложение. Также может возникнуть не обходимость в контроле регистров периферии вместе с различными про цессами и центральными процессора ми. Агент GDB не способен остановить всю систему или несколько потоков одновременно. Разработчикам, отлаживающимполь зовательские приложения, может по требоваться пошаговое выполнение системных вызовов, с динамическим переключением из режима пользова теля в режим ядра и обратно. Здесь важно правильно отслеживать адреса цию ОЗУ в моменты переходов, учи тывая применяемый в Linux механизм виртуальной памяти. Полагаться на фиксированные физические адреса нельзя, – необходимо правильно ин терпретировать выделение и отобра жение памяти. Как следствие, отладка системных вызовов при помощи аген тов потребует одновременного ис пользования GDB иKGDB. Использова ние нескольких агентов одновременно может значительно усложнить про цесс отладки. В некоторых встраиваемых устрой ствах не предусмотрено ни порта Ethernet, ни последовательного интер фейса. В таких случаях использование отладочных агентов невозможно. Даже если устройство имеет порт связи, от ладочному агенту требуется его готов ность. Если порт не готов, или требует отладки, или недостаточно памяти для работы IP стека, отладочные агенты работать не будут. Отладочные решения на основе JTAG предоставляют детальную видимость происходящего в приложениях, кото рые работают в режиме пользователя Linux. Для приложений, которые вы полняют системные вызовы, способ ность JTAG решений вести отладку и в режиме ядра, и в режиме пользователя даёт чёткую картину происходящего в обоих режимах. Всё это происходит без какого либо инструментирования ядра Linux. «Двухрежимное» отладоч ное решение позволяет отслеживать все потоки приложения, их контекс ты, входы в ядро Linux, а также все ис пользуемые параметрыи переменные. Для устройств, не оснащённых портом связи (например, мобильных и меди цинские приборов, автомобильных систем и т.п.), отладочные решения на базе JTAG являются превосходной аль тернативой отладке с использованием агентов. Поддержка отладки в системном ре жиме упрощает отладку многопоточ ных приложений, т.к. позволяет пол ностьюостановить процессор и иссле довать состояние ОС и всех потоков на момент останова. Как уже упомина лось выше, множество проблем отлад ки связано с взаимодействием не скольких потоков. Неспособность отладочного агента остановить все потоки одновременно значительно усложняет локализациюпроблем, что, в свою очередь, может существенно увеличить время отладки проекта. От ладка в системном режиме даёт деталь ное представление о состоянии систе мы в данный момент времени (состоя ние каждого потока, переменных и т.п.) и поэтому является предпочти тельной. Решение на базе отладчика JTAG яв ляется неразрушающим соединением с целевым оборудованием. JTAG отлад чик можно подключить к уже работаю щей системе, в которой только что произошел сбой, не меняя при этом состояния регистров процессора, и синхронизировать контексты для ядра и приложений, чтобы выполнить от ладку. Одним из примеров является система, вошедшая в состояние взаим ной блокировки потоков (deadlock). При помощи JTAG отладчика разра ботчик может подсоединиться к целе вой системе, не изменяя её состояния, и получить доступ к объектам ядра Linux, контекстам приложений и про 71 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 7 2012 ПО Приложение 1 Модули ядра (драйверы устройств) Ядро Linux Прерывания Аппаратура I/O Приложение 2 Приложения Рис. 3. Взаимодействие ПО с аппаратурой в Linux ' СТА - ПРЕСС
RkJQdWJsaXNoZXIy MTQ4NjUy