Смекни!
smekni.com

Вопросы успешного применения ОС Linux во встраиваемых системах (стр. 2 из 3)

Как и в случае ОС для настольных компьютеров и серверов, при выборе встраиваемых операционных систем нередко решающую роль играют не предоставляемые ими функциональные возможности, а наличие готовых программных средств. Многие держат на своих персональных компьютерах операционные системы Windows лишь потому, что необходимые этим людям текстовые процессоры и электронные таблицы созданы именно для Windows. Действительно, помимо ОС проектировщикам встроенных систем требуются и другое ПО: стеки протоколов, связующее программное обеспечение, драйверы нестандартных устройств, а иногда и готовые прикладные программы. Наличие для встраиваемой операционной системы подобного ПО устраняет проблему переноса программных средств на другую платформу и может стать решающим аргументом при выборе той или иной ОС. Функциональные характеристики операционной системы приобретают особое значение в том случае, когда в связи с отсутствием готового прикладного ПО его необходимо создавать. Существование нужной функциональной возможности способно обеспечить сокращение как сроков разработки, так и портирования. Дело в том, что подлежащие переносу на другую платформу программы писались в расчете на наличие у целевой операционной системы определенного набора функций, в случае отсутствия которых портирование будет отнимать много сил и средств.

Инструментальные средства для ОС Linux

Большинство Linux-программ пишется, запускается и отлаживается в одной и той же Linux-системе. После того, как программа будет полностью отлажена, ее работоспособный исполняемый образ (или содержащий такой образ пакет) может быть скопирован в другие Linux-машины. Аналогичным образом можно создавать и программное обеспечение для встраиваемой системы при том условии, что в этой системе имеется оперативная и дисковая память достаточного для работы инструментальных средств объема. На практике, впрочем, такая ситуация довольно редка, и потому у программиста возникает необходимость использования средств кросс-разработки.

Для кросс-разработки вполне подойдут широкораспространенные GNU-компиляторы. Однако различие порядков адресации байтов в инструментальной и целевой системах (как это имеет место, например, в системах с процессорами типа х86 и PowerPC) может приводить к ошибкам. Необходимо также определить метод загрузки образа ядра из инструментальной системы в целевую. Если целевая система способна работать с каким-либо дисковым накопителем (и загружаться с этого диска), можно подключить этот диск к инструментальной машине, записать на него образ ядра и файловую систему, затем подключить его к целевой платформе и осуществить загрузку. В том случае, когда загрузка ОС в целевую систему может осуществляться по сети, на инструментальном компьютере достаточно запустить сервер загрузки и файловый сервер. Если же для загрузки целевой платформы должны использоваться только ПЗУ или флэш-память, может потребоваться применение специальной утилиты, создающей из Linux-ядра и файловой системы единый загрузочный образ.

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

Кросс-разработка предполагает поддержку и кросс-отладку. В среде кросс-разработки отладчик исполняется на инструментальной системе. В Linux-дистрибутивы входит GNU-отладчик GDB, который может использоваться для отладки программ, написанных как в кодах инструментальной платформы, так и в кодах целевого компьютера. В первом случае отладчик исполняет программу сам или подключается к работающей программе; при этом посредством интерфейса /proc осуществляется контроль структур данных и переменных приложения. Кроме того, отладчик может выполнять трассировку программы, перехватывать посылаемые исполняемой программе сигналы, а также генерировать собственные сигналы. Отладчик считывает из исполняемого файла символьную информацию и способен обеспечивать вывод исходного текста программы на экран. В среде кросс-разработки отладчик исполняется на инструментальной платформе, а прикладная программа на целевой. Исходный текст и таблицу символов отладчик читает из файлов инструментальной системы. Контроль имеющих отношение к отлаживаемой программе процессов, структур данных и значений переменных осуществляется посредством работающего на целевой машине агента. Последний представляет собой GDB-сервер и занимает гораздо меньше памяти, чем сам отладчик. Отладчик GDB взаимодействует со своим агентом по TCP/IP-каналу либо при помощи простого последовательного соединения.

Разумеется, отладка Linux-ядра и драйверов устройств не может осуществляться так же, как и отладка пользовательского приложения. Установка контрольной точки в ядре или иная остановка исполняющегося в ядре процесса способна привести к остановке и самого агента. Большая часть настольных дистрибутивов Linux не обеспечивает функций, необходимых для отладки ядра и драйверов. Однако рассчитанные на встраиваемые системы дистрибутивы такими функциями обладают. Обычно отладчик GDB взаимодействует с агентом отладки ядра по низкоуровневому последовательному соединению. Такое решение позволяет осуществлять пошаговое исполнение ядра или драйвера и даже ставить контрольные точки в процедурах обслуживания прерываний. Единственной вещью, которую не удается отлаживать подобным образом, является сам агент отладки.

Наличие для ОС Linux программ сторонних разработчиков

Для операционной системы Linux появляется все больше различных программных средств, среди которых не только ПО с открытыми исходными текстами, но и разрабатываемые независимыми поставщиками приложения и стеки протоколов. Число Linux-драйверов постоянно растет, и в большинстве случаев эти драйверы предоставляются вместе с исходными текстами. ОС Linux заслужила хорошую репутацию благодаря высокой надежности работы Linux-серверов, а также особенностям своей файловой системы и сетевым характеристикам.

Бесплатно распространяются не только исходные Linux-коды, но и исполняемые образы. Для массового производства встраиваемых систем, предполагающего весьма жесткие ограничения на себестоимость продукта, отсутствие выплат за встроенную ОС является значительным преимуществом, позволяющим сэкономить деньги и устраняющим необходимость контроля числа поставленных копий.

С программной точки зрения Linux является UNIX-подобной операционной системой. Одно из основных объяснений большого числа Linux-программ такие же, как и в UNIX, API-интерфейсы, а также форматы объектных и исполняемых файлов. Значительная часть написанного за последние два десятка лет для ОС UNIX общедоступного программного обеспечения может без каких-либо изменений использоваться и в Linux. Кроме того, было создано немало программ и для других UNIX-версий: для AIX компании IBM, для Solaris компании Sun Microsystems, для HP/UX компании Hewlett-Packard. Модифицировать свое ПО для операционной системы Linux не составляет разработчикам данных программ никакого труда. Иными словами, огромный опыт, накопленный в процессе создания программного обеспечения для UNIX, без каких-либо оговорок может быть использован и при разработке Linux-программ.

Благодаря популярности ОС Linux уже появилось несколько поставщиков программных средств, специализирующихся на версиях этой ОС для встраиваемых систем. Как правило, эти поставщики предлагают также и проблемно-ориентированную техническую поддержку, включающую исправление ошибок в устаревших Linux-версиях и помощь в вопросах переноса ПО на встраиваемые платформы.

Достаточно ли операционная система надежна и производительна?

Надежность и производительность две очень важные характеристики операционной системы, которые, как правило, невозможно улучшить ни прикладными, ни библиотечными программами. Надежная программа в ненадежной операционной системе сама становится ненадежной. Надежность ОС определяется лежащими в ее основе базовыми принципами, а также особенностями архитектуры и программирования. Многие встраиваемые приложения характеризуются гораздо более высокими требованиями к безотказности работы операционной системы, чем настольные компьютеры, и выбор действительно надежной ОС приобретает в этой связи огромное значение. Разумеется, каждый уважающий себя поставщик операционных систем заявляет о высочайшей степени стабильности своей продукции, и потому для получения объективной информации приходится проводить испытания ОС на надежность. Что касается производительности, то ее также можно тестировать. Как правило, проверить соответствие операционной системы требованиям того или иного встраиваемого приложения в плане производительности не составляет большого труда. Гораздо сложнее бывает установить то, насколько рассматриваемая в конкретном контексте ОС отвечает требованиям режима реального времени. Проблема заключается не в самом тестировании, а в определении этих требований. Кроме того, в зависимости от нагрузки оперативность реагирования работающей в реальных условиях операционной системы может меняться в весьма широких пределах. Бывает так, что ошибочность выбора ОС обнаруживается в самом конце периода разработки продукта, когда выявляются те связанные с режимом реального времени требования, которые не были определены на более ранних стадиях и которым данная операционная система не в состоянии удовлетворить.