Грег Роуз (Greg Rose), компания LynuxWorks
Необходимость ускорения выпуска новой продукции на рынок и снижения общей стоимости систем подвигает многих разработчиков встраиваемых приложений на применение ОС Linux и других программных средств с открытыми исходными кодами. Подобное решение обусловлено тем, что, используя открытое программное обеспечение, разработчики получают возможность сконцентрировать усилия на совершенствовании своей продукции. Встраиваемые системы обладают уникальным набором требований и ограничений: малые объемы памяти, загрузка из флэш-памяти, бездисковость, детерминированность. Использование в таких приложениях операционной системы Linux связано с рядом дополнительных проблем. В настоящей статье рассмотрены вопросы, встающие в этой связи перед разработчиком встраиваемых систем, предпринята попытка определить место Linux в данном контексте и предлагаются способы преодоления возникающих трудностей.
Существует ли операционная система для вашего микропроцессора?
При выборе операционной системы (ОС) для той или иной встраиваемой системы обычно используется несколько критериев, в частности, доступность на рынке, требовательность к ресурсам, доступность программных средств, богатство функциональных возможностей, надежность и производительность. Решающим фактором может стать даже простой факт, что некая операционная система работает на выбранном микропроцессоре. В условиях мощного давления сроков выхода на рынок модификация ОС для нового процессора или процессорного модуля может оказаться слишком долгим делом, наличие же готовой операционной системы ведет к существенной экономии времени и средств.
Поддержка встраиваемых процессоров в ОС LinuxСамая распространенная на сегодня версия Linux это, безусловно, версия для совместимых с ПК компьютеров, созданных на базе процессоров с архитектурой х86. Современные персональные компьютеры это недорогие системы, способные выступать как в роли инструментальных, так и целевых платформ. В мире такие машины использует большая часть Linux-разработчиков, и именно для этих компьютеров прежде всего и пишутся различные программы. Процессоры семейства х86 применяются не только в персональных, но и во многих встраиваемых системах. В настоящее время существует множество моделей х86-процессоров от чрезвычайно быстродействующих до самых экономичных. Полностью совместимый с ПК компьютер может уместиться сегодня на один кристалл. Для некоторых разработчиков все, что им нужно это версия ОС Linux для архитектуры х86. Однако в определенных случаях процессоры х86 могут быть не самым лучшим выбором. В тех приложениях, где требуется очень низкий уровень энергопотребления, более уместными могут оказаться процессоры типа ARM или Hitachi SH, имеющие при существенно меньшей рассеиваемой мощности ту же производительность. В других ситуациях предпочтение следует отдать дешевым микропроцессорам, имеющим ядро PowerPC, сопроцессор и необходимый набор функций ввода/вывода. В предполагающих интенсивную обработку данных системах более оправданным может быть применение процессоров типа MIPS, характеризующихся лучшим, чем у х86, соотношением цены и производительности. Сегодня рынок встраиваемых микропроцессоров сильно фрагментирован. В сущности, он всегда был таким, и ничто не указывает на скорую его консолидацию.
Хорошая новость состоит в том, что модификации ОС Linux существуют для многих типов встраиваемых микропроцессоров, в том числе для архитектур PowerPC, MIPS, ARM, StrongArm и SH. Плохая это то, что программных продуктов для этих модификаций создано гораздо меньше, чем для процессоров х86. Однако теперь обновленные Linux-дистрибутивы для иных, нежели х86, платформ появляются регулярно, и вскоре ситуация должна улучшиться. О поддержке версий операционной системы Linux для различных процессорных платформ заявляет все большее число производителей программного обеспечения. Впрочем, основной движущей силой являются здесь пользователи. Растущий спрос на приложения, стеки протоколов и собственно Linux-версии для различных процессоров существенно ускоряет процесс создания соответствующих модификаций этой ОС.
Может ли операционная система работать в безоператорном и бездисковом режимах?
Как правило, встраиваемые системы работают в безоператорном режиме. Это означает, что для их запуска и нормальной работы участие оператора не требуется.
ОС Linux в безоператорных и бездисковых вариантах
Операционная система Linux разрабатывалась на основе модели UNIX и задумывалась как ОС для настольных компьютеров. В традиционных версиях Linux для взаимодействия с оператором имеется алфавитно-цифровая консоль, позволяющая управлять загрузкой операционной системы, осуществлять ввод команд и контролировать работу ОС. Однако встроенным системам оператор, как правило, не нужен, и потому во встраиваемой Linux подобное взаимодействие предусматриваться не должно. Как и во всех версиях ОС UNIX, хранение и поиск постоянных данных и исполняемых программ осуществляется в Linux средствами файловой системы. Различные устройства также представляются в виде специальных файлов. Реализованная на дисковых накопителях файловая система является неотъемлемой частью исполнительной среды Linux.
Создание безоператорной версии операционной системы Linux не составляет особого труда: достаточно заменить устройство консоль фиктивным устройством. Если вместо выполнения процедуры регистрации стартовый скрипт будет сразу осуществлять запуск прикладных программ, то и взаимодействия с оператором удастся избежать. Мониторинг при необходимости можно выполнять удаленно, что обеспечивается возможностью дистанционного входа в систему и назначением псевдоустройству TTY роли консоли. Операционные системы семейства Linux поддерживают различные графические пользовательские интерфейсы (X-windows и др.), однако последние являются опциональными и для нормальной работы ОС не требуются.
Проблему бездисковости можно решить несколькими способами. Существуют модули флэш-памяти, способные эмулировать IDE-дисководы. Как правило, эти модули очень компактны и не превышают по своим размерам обычных IDE-разъемов. Кроме того, в состав Linux входит драйвер электронного диска используемой для имитации дискового накопителя определенной части системной памяти. Такой диск может использоваться для хранения файлов, которые не потребуются после перезагрузки системы. Драйвер электронного диска применим и для обращений к файловой системе, реализованной в ПЗУ. Если во встроенной системе есть флэш-память, которая неспособна эмулировать IDE-дисковод, то для работы с этой памятью как с диском можно воспользоваться средствами файловой системы. Хорошая система управления хранящимися во флэш-памяти файлами обязана иметь механизм контроля износа, сводящий число операций стирания флэш-блоков к разумному минимуму.
Способна ли ОС работать в системах с ограниченной памятью?
Для нормальной работы любой операционной системы требуются определенные ресурсы, главным из которых является память компьютера. Одним ОС необходимо больше памяти, другим меньше. Применения операционных систем с повышенными требованиями к памяти во встраиваемых приложениях, где и ПЗУ, и ОЗУ на вес золота, следует избегать.
Требования к памяти со стороны ОС Linux
По умолчанию Linux необходимы довольно значительные объемы памяти, что неприемлемо для большинства встраиваемых систем. Как правило, дистрибутив ОС Linux занимает несколько сотен мегабайтов. В несжатом состоянии стандартное Linux-ядро занимает около полутора мегабайтов, а требуемый этим ядром объем памяти составляет более 4 Мбайт. Кроме того, нужна еще и память для поддержания файловой системы, а если система работает в бездисковом режиме и память для электронных дисков.
Решение проблемы требуемой для операционной системы Linux памяти заключается в тщательной настройке ядра ОС. Ядро имеет модульную структуру, что позволяет манипулировать неиспользуемыми в конкретных приложениях функциональными возможностями. Кроме того, имеется возможность играть с некоторыми параметрами ядра, такими как максимальное число процессов или одновременно открытых файлов. Выбор соответствующих модулей и их конфигурирование позволяет значительно снизить потребность операционной системы в ОЗУ и ПЗУ. Можно, к примеру, построить вполне работоспособное Linux-ядро для архитектуры х86 объемом всего 259 Кбайт. Минимальный размер ПЗУ-диска, позволяющий поддерживать необходимую для такого ядра файловую систему, составляет 102 Кбайт; объем используемой при этом оперативной памяти может быть менее 4 Мбайт. ОС Linux с поддержкой TCP/IP требует больших ресурсов. Ядро с сетевыми средствами может занимать 370 Кбайт, а требуемый в этом случае объем ПЗУ-диска будет около 740 Кбайт (в несжатом состоянии). Потребность в ОЗУ не превышает для этой конфигурации 8 Мбайт. Конечно, это все еще достаточно далеко от тех сверхнизких показателей, которые способны обеспечить традиционные ОСРВ, но уже вполне приемлемо для многих встраиваемых устройств.
Имеются ли для встраиваемой ОС инструментальные средства? Совместима ли операционная система с другим необходимым программным обеспечением?
В процессе создания встраиваемых приложений разработчикам приходится применять различные программные средства типа компиляторов и отладчиков, причем, как правило, из-за недостатка памяти выполнение этого ПО на целевой платформе оказывается невозможным. Разработка встраиваемых приложений предполагает использование компилятора, ассемблера и компоновщика в инструментальной системе с последующей их загрузкой в целевой компьютер для исполнения. Инструментальная и целевая платформы могут иметь процессоры разных типов. В таких случаях рассчитанные только на инструментальную систему компилятор и ассемблер на роли кросс-компилятора/кросс-ассемблера не подходят: необходимо создание собственного либо приобретение существующего кросс-компилятора, который смог бы работать в инструментальной системе и создавать машинные коды для целевой системы.