Источник: Сайт www.analog.com.ru
Прямая ссылка на источник: http://www.analog.com.ru/Public/uClinuxWhiteWP-WEB%20(rus).pdf
uClinux как встроенная ОС на встроенном процессоре
Введение
За последние два года увеличилась популярность Linux как операционной системы для разработки встроенных устройств — особенно бытовой техники, телекоммуникационных маршрутизаторов и коммутаторов, Internet устройств, а также промышленных и автомобильных приложений.
Ранее несколько крупных игроков рынка бытовой электроники объявили о сотрудничестве в рамках Consumer Electronics Linux Forum (CELF), по дальнейшему развитию платформы Linux для ее использования в домашних цифровых электронных устройствах. Основатели CELF (Matsushita Electric, Sony, Hitachi, NEC, Royal Philips Electronics, Samsung, Sharp и Toshiba) сконцентрировались на преимуществе Linux как платформы с открытыми исходными кодами (Open Source) для устройств бытовой электроники. По существу, они активно поддерживают и продвигают дух сообщества Open Source (более подробную информацию смотри на www.celinuxforum.org).
Преимущество Embedded Linux заключается в том, что это компактное решение с открытыми исходными кодами и свободное от лицензионных отчислений, которое обеспечивает мощный фундамент для растущего числа приложений работающих на нем. Linux это полнофункциональная операционная система (ОС), поддерживающая различные сетевые протоколы и файловые системы — очень важное требование ко встроенным системам из-за необходимости «работать в любом месте, в любое время». Модульная по своей природе, Linux легко урезается за счет удаления программных утилит, инструментов, и других системных служб, которые не нужны во встроенном окружении. Преимущества для компаний, использующих Linux на рынках встроенных систем – это сокращение времени выхода на рынок и надежность. Для таких разработчиков сочетание процессора Blackfin® компании Analog Devices и ОС uClinux может быть особенно интересна. Процессоры Blackfin сочетают вычислительную мощь DSP с функциональностью микроконтроллеров, обеспечивая требования цифрового аудио, видео и коммуникационных приложений. Комбинация первоклассного ядра DSP с традиционной микроконтроллерной архитектурой на одном кристалле позволяет избежать ограничений, сложности и более высокой стоимости традиционных неоднородных многопроцессорных систем. Помимо традиционного периферийного оборудования (SPI, UART с поддержкой IrDa®, таймеров общего назначения, часов реального времени, сторожевого таймера и контроллера прерываний), все процессоры семейства Blackfin имеют два синхронных последовательных двухканальных порта (SPORT) — каждый поддерживает четыре стереоканала I2S со скоростью обмена до 100 Мбит/с. Более того, новейшие представители семейства процессоров Blackfin (ADSP-BF531, ADSP-BF532, ADS-BF533 и ADSP-BF561) имеют параллельный периферийный интерфейс (PPI), который обеспечивает подключение ЖК-дисплеев и конверторов видеопотока стандарта CCIR-656 (27 MHz) без дополнительной обвязки, или может быть использован как параллельный интерфейс для ЦАП/АЦП с частотой отсчетов до 65MГц.
Таблица 1: Семейство процессоров Blackfin
Процессор |
Частота (МГц) |
MMAC (макс.) |
Объем памяти (Кбайт) |
Интерфейс внешней памяти |
PPI |
PCI 2.2 Master/ Slave |
USB Dev. |
UART, таймеры |
Сторожевой Таймер и RTC |
Напряжение ядра |
Корпус |
ADSP-BF535 |
350 |
700 |
308 |
32 бита |
Нет |
Да |
Да |
Да |
Да |
1.6 |
260 PBGA |
ADSP-BF531 |
400 |
800 |
52 |
16 бит |
Да |
Нет |
Нет |
Да |
Да |
1.2 |
160 Mini-BGA, 169-PBGA, 176 LQFP |
ADSP-BF532 |
400 |
800 |
84 |
16 бит |
Да |
Нет |
Нет |
Да |
Да |
1.2 |
160 Mini-BGA, 169-PBGA, 176 LQFP |
ADSP-BF533 |
756 |
1512 |
148 |
16 бит |
Да |
Нет |
Нет |
Да |
Да |
1.2 |
160 Mini-BGA, 169-PBGA |
ADSP-BF561 |
756 |
3024 |
328 |
32 бита |
Да |
Нет |
Нет |
Да |
Да |
1.2 |
256 Mini-BGA, 297-PBGA |
Процессоры поставляются также в других корпусах.
Все процессоры Blackfin сочетают в себе современное ядро обработки сигналов с преимуществами привычной ортогональной RISC-подобной микропроцессорной системы команд и мультимедиа возможностями SIMD (Одна Команда, Много Данных) с единым набором команд. Микросигнальная архитектура (MSA) – это модифицированная Гарвардская архитектура со сдвоенным устройством умножения с накоплением (MAC); архитектура MSA была разработана для обеспечения беспрецедентной производительности аудио и видео алгоритмов, а также стандартных операций управления программным потоком и манипуляции произвольными битами, в основном используемых ОС.
Процессоры Blackfin ADSP-BF531/BF532/BF533 имеют два больших блока памяти на кристалле, обеспечивая высокоэффективный доступ к ядру. Доступ к этим блокам памяти осуществляется на полной скорости ядра процессора. Два блока памяти, расположенных непосредственно рядом с ядром, называющиеся памятью L1, могут быть сконфигурированы либо как память данных/программ, либо как кэш. Если блок памяти программ сконфигурирован как кэш, скорость исполнения внешнего кода из SDRAM приближается к номинальной, когда код исполняется из внутренней памяти. Эта возможность особенно хорошо подходит для работы ядра uClinux, которое не помещается во внутреннюю память. Также, при программировании на C, за счет использования кэша задача оптимизации доступа к памяти может быть оставлена процессорному ядру. Процессоры Blackfin разработаны в соответствие с методологией маломощного и низковольтного дизайна и реализуют функции Динамического Управления Питанием.
Они полностью соответствуют требованиям современных мобильных и питаемых от батарей приложений, как никакие другие процессоры в своем классе. Процессор Blackfin имеет несколько гибких независимых контроллеров Прямого Доступа к Памяти (DMA), которые обеспечивают автоматическую пересылку данных с минимальными влиянием на процессорное ядро. Пересылки в режиме DMA могут осуществляться между внутренней памятью процессоров ADSP-BF531/BF532/BF533 и любой их DMA-совместимой периферией. Дополнительно, DMA-пересылки могут осуществляться между любой DMA-совместимой периферией и внешними устройствами, подсоединенными через интерфейс внешней памяти, включая контроллер SDRAM и контроллер асинхронной памяти.
Некоторые вопросы, освещаемые в данной статье:
• Какие преимущества предоставляет Linux по сравнению с другими операционными системами?
• Зачем вообще использовать Linux?
• Сколько стоит Linux?
• Где можно получить Linux?
• Зачем Linux применяется на DSP?
• Способна ли ОС Linux обеспечить работу в реальном масштабе времени?
• В чем разница между Linux и uClinux?
В 1991 году молодой финский студент Линус Торвальдс (Linus Torvalds) поместил сообщение в Интернет-конференцию comp.OS.minix: “Hello everybody out there using minix—I’m doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones.” «Привет всем использующим minix – я делаю (бесплатную) операционную систему (просто как хобби, она не будет большой и профессиональной как GNU) для 386(486) клонов AT».
Это скромное сообщение стало рождением Linux движения. С этого момента, Linux взрослела при помощи тысяч разработчиков со всего мира. Linux стала операционной системой, которая соперничает по производительности и возможностям даже с самыми дорогими коммерческими реализациями UNIX. Со временем, ОС Linux была портирована на бессчетное количество процессоров и платформ, от маленьких систем на одном кристалле (SOC) до огромных компьютеров класса «mainframe».
Большинству из своих успехов Linux обязана тому факту, что в качестве механизма лицензирования программного обеспечения для своей ОС, Линус выбрал Общую Общественную Лицензию (GPL) GNU, опубликованную фондом свободного программного обеспечения. Это дает любому, кто получил часть программного обеспечения GPL, право требовать его исходный код. Это гарантирует, что GPL программа навечно останется бесплатной. Распространено заблуждение, что автор GPL программы, или ее дальнейшей доработки, теряет свою интеллектуальную собственность. Это не так. Автор сохраняет свои авторские права.
Автор только предоставляет другим лицензию на использование своего кода на условиях GPL. Другое заблуждение, что GPL программное обеспечение не может продаваться. Многие компании продают GPL программное обеспечение. Единственное условие, что они обязаны предоставлять своим заказчикам письменное предложение получить исходный код. Конечно, код для пространства пользовательских программ не подпадает под лицензию ядра. Таким образом, интеллектуальная собственность в приложениях работающих поверх Linux может не быть свободно распространяемой.
Ядро Linux само по себе было бы чем-то бесполезным без программ, работающих поверх него. Чтобы заполнить этот пробел, в Linux обычно используются открытые источники и свободно распространяемый код проектов GNU (www.gnu.org), Berkeley Software Distribution (BSD) и остального сообщества открытых исходных кодов. Такая коллекция программного обеспечения называется “дистрибутив”. Для Linux доступны буквально сотни дистрибутивов (примеры могут быть найдены на http://lwn.net/Distributions/). Дистрибуторы берут ядро Linux и комплектуют его программным обеспечением, выбранным из огромного количества открытого и бесплатно распространяемого ПО, часто смешивая его со своими собственными программами для продажи или свободного распространения.
Ниже приводится несколько примеров той пользы, которую такие дистрибутивы принесли пользователям:
(David A. Wheeler, 30 Июня 2001 г., данные взяты с http://www.dwheeler.com/sloc/)
• Разработке этого дистрибутива Linux традиционными частными разработчиками в Соединенных Штатах стоила бы более одного миллиарда (в 2000 году; доллары США).
• Включает более 30 миллионов физических строк исходного кода (SLOC).
• Потребовалось бы около 8000 человеко-лет рабочего времени, по оценке широко используемой базовой модели COCOMO.
• Red Hat Linux 7.1 демонстрирует 60-процентный рост по объему, усилиям и традиционной стоимости разработки в сравнении с Red Hat Linux 6.2 (который был выпущен примерно одним годом ранее).
Какими бы ошеломляющими не были эти данные, они уже устарели. С учетом доступных на сегодня дистрибутивов, эти цифры могут быть практически удвоены.
С момента создания Linux, Линус Торвальдс был основным разработчиком ядра Linux. По существу, он решает, какие разработки достойны включения в ядро. Ветка ядра Linux только одна из многих, поскольку
ядро лицензировано в соответствии с GPL, и всем пользователям позволено создавать их собственные ветви. Таким образом, существует много различных ветвей ядра от различных разработчиков, которые нацелены на решение различных задачам. Когда код в этих ветвях становился достаточно зрелым и стабильным, они отправляли его Линусу для включения в его ветку. Линус продолжает выпускать новые версии ядра. Каждая из этих версий получает уникальный номер, например 2.5.23. После нескольких лет разработки, Линус объявляет новое ядро стабильным и назначает ему четный главный номер версии, например 2.6.x. Через некоторое время, Линус дает другому разработчику полномочия на сопровождение нового стабильного ядра, а сам начинает новый цикл процесса разработки. Это открытый документированный процесс и за ним можно следить, подписавшись на списки рассылки по ядру Linux или читая архивы разработки в режиме «online».
Одна из специальных веток, о которых говорилось выше, это ветка ядра uClinux (www.uclinux.org). Это порт ядра Linux сделанный для аппаратных платформ не имеющих Блока Управления Памятью (MMU). Несмотря на то, что опция uClinux была включена в виде заплатки в официальное ядро Linux, большая часть деятельности по разработке и проекты могут быть найдены на Web-сайте www.uclinux.org.
Заплатки подобные этим применяются коммерческими поставщиками Linux (наряду с произведенными ими дополнительными улучшениями, средствами разработки и документацией) для обеспечения своих заказчиков простой в использовании средой разработки для быстрого создания мощных приложений под uClinux.
Кроме того, www.uclinux.org предоставляет разработчикам дистрибутив uClinux, который включает три различные версии ядра (2.0.x, 2.4.x, 2.6.x) вместе с необходимыми библиотеками; базовыми командными оболочками и утилитами Linix; и широким набором дополнительных программ, таких как Web сервер, аудио проигрыватель, языки программирования и графические утилиты конфигурации. Этот дистрибутив более чем достаточен для компиляции имиджа Linux для коммуникационных устройств, таких как маршрутизаторы, без необходимости написания даже одной строчки кода на C.
В чем разница между Linux и uClinux?
Поскольку Linux аналогична UNIX в том, что касается многопользовательских многозадачных ОС, ядро должно реализовывать специальные меры для обеспечения правильной и безопасной работы тысяч процессов различных пользователей на одной системе в одно и то же время. Модель безопасности UNIX, в соответствие с которой разработана Linux, защищает каждый процесс в его собственном операционном окружении с собственным адресным пространством. Каждый процесс также защищен от процессов, запущенных другими пользователями. Дополнительно, система Виртуальной Памяти (VM) налагает дополнительные требования, которые современные ЦП должны обеспечивать, как например динамическое выделение памяти и отображение произвольных регионов памяти в локальную память процесса.
Многие устройства, как например процессор Blackfin, не предоставляют полновесного блока управления памятью (MMU), поскольку разработчики нацеливают свои приложения на работу без использования ОС, и обычно MMU не требуется. Кроме того, процессоры без MMU, такие как Blackfin, более эффективные с точки зрения энергопотребления и часто заметно дешевле, чем альтернативные.
Для поддержки Linux на таких устройствах необходимы некоторые компромиссы:
1. Нет реальной защиты памяти (ошибочный процесс может полностью нарушить работу системы)
2. Не поддерживается системный вызов fork
3. Только простое выделение памяти
4. Некоторые другие незначительные отличия
Защита памяти в действительности не является проблемой для большинства встроенных устройств. Linux очень стабильная платформа, особенно для встроенных устройств, и отказы программного обеспечения наблюдаются редко.
Второй пункт немного более проблематичен. В программном обеспечении, написанном для UNIX или Linux, разработчики часто используют системный вызов fork когда они хотят выполнять что-то параллельно. Вызов fork делает точную копию исходного процесса и исполняет его одновременно с ним. Чтобы сделать это, он использует MMU для отображения памяти родительского процесса в процесс-потомок и копирует только те части памяти, в которые этот потомок пишет. Таким образом, uClinux не может реализовать системный вызов fork. Однако она поддерживает вызов “vfork” – специальную версию fork, в котором родительский процесс останавливается на время, пока исполняется потомок. То есть программное обеспечение, которое использует системный вызов fork должно быть переработано для использования вызова vfork или потоков (threads), которые поддерживаются uClinux, поскольку они разделяют между собой одну и то же область памяти, включая стек.
Что касается пункта номер 3, то обычно не возникает проблем с поддержкой вызова malloc, реализованного в uClinux, но иногда требуется сделать незначительные изменения.
Большинство пакетов программного обеспечения, доступного в Linux или UNIX (коллекцию такого ПО можно найти по адресу http://freshmeat.net), может быть непосредственно скомпилировано под uClinix. Для остальных же обычно достаточно незначительных усилий по портированию. Только очень малое число пакетов ПО, которые не заработают под uClinux, и большинство из них бесполезно для встроенных приложений.
Разработка под uClinux При выборе аппаратных средств разработки, разработчикам следует не только осторожно делать выбор, оценивая в уме цены и доступность на рынке, но также обращать внимание на доступность исходного кода готовых драйверов и документации.
Средства разработки под uClinux для процессора Blackfin состоят из коллекции GNU компиляторов (кросс компилятор GCC) и бинарных утилит (компоновщик, ассемблер и т.п.) для процессора Blackfin.
Дополнительно, нужны некоторые GNU утилиты, такие как awk, sed, make, bash и tcl/tk, но они обычно поставляются с дистрибутивами традиционной Linux.
После установки средств разработки и разархивирования дистрибутива uClinux, можно начинать процесс разработки.
Сначала разработчик использует графическую утилиту конфигурации для выбора соответствующего Пакета Поддержки Платформы (BSP) для целевого аппаратного обеспечения. Разработчики, использующие свою собственную аппаратную платформу, могут чувствовать себя комфортно, ведя разработку на платформах EZ-KIT Lite™ или STAMP (схемотехника и файлы, используемые при их производстве, доступны по адресу www.blackfin.uclinux.org). После чего они могут начать писать собственные драйверы и создавать BSP путем копирования существующего и модификации нескольких его параметров.
Большая часть процесса разработки состоит в выборе соответствующих драйверов и отключении возможностей ядра, которые не нужны для рассматриваемого проекта. За этим следует выбор библиотек и программ пространства пользователя.
Дистрибутив uClinux предоставляет широкий выбор специально разработанных программ и утилит, где в качестве основных требований выступали малый размер кода и высокая эффективность. Один из примеров это busybox (www.busybox.net), исполняемый модуль с механизмом мультивызова, который обеспечивает функциональность большого числа более мелких программ и действует как любая из них, в случае его вызова с соответствующим именем. Если busybox связан с ls (эквивалент команды dir в DOS) и содержит код реализации ls, он работает как команда ls. Выгода заключается в том, что busybox позволяет избежать накладных расходов, возникающих при использовании уникальных бинарных модулей, и эти маленькие модули могут разделять общий код.
Рисунок 1: Графическая оболочка конфигурирования ядра
После того, как все компоненты выбраны и успешно скомпилированы, ядро Linux и имидж виртуального диска могут быть загружены в целевую аппаратную платформу с помощью VisualDSP++®. После этого можно продолжать процесс разработки. Следующий шаг это использование начального загрузчика, поддерживающего последовательный или сетевой интерфейсы, вместо загрузки через JTAG. Например, U-Boot (http://blackfin.uclinux.org/projects/uboot/) предлагает различные функции и также может использоваться для прошивки устройств Flash памяти, расположенных на плате. Для тех, кто не имеет возможности использовать оригинальный внутрисхемный эмулятор от Analog Devices, существует недорогая программно-аппаратная реализация JTAG (http://blackfin.uclinux.org/projects/jtagtools/). Она может быть использована для первоначальной прошивки начального загрузчика в память целевой платы. Однако важно отметить, что это решение не обеспечивает возможностей эмуляции и отладки, которые дает VisualDSP++. После того, как ядро загружено и работает, бесплатный GNU отладчик (GDB) может быть использован для отладки пользовательских приложений.
Следующим шагом могла бы быть разработка специальных приложений для целевых устройств или портирование дополнительного программного обеспечения. Большая часть разработки может проводиться с помощью сценариев командной оболочки (shell scripts) или языков программирования типа Perl или Python.
Где программирование на C неизбежно, Linux, с ее исключительной поддержкой протоколов и драйверов устройств, обеспечивает мощное окружение для разработки новых приложений.
На рисунке 2 приведен пример того, как легко может быть подсоединен аудио кодек стандарта AC’97 к процессору Blackfin, без дополнительных активных аппаратных компонентов.
Рисунок 2: Схема подключения AD1885
Ниже приведен пример очень простой программы чтения данных из кодека, предполагающей, что аудио драйвер AC’97 уже скомпилирован совместно с ядром.
main(){
...
fd = open("/dev/dsp", O_RDONLY, 0); // открываем аудио устройство
...
int speed = 44100; // 44.1 кГц
ioctl(fd, SNDCTL_DSP_SPEED, &speed); // устанавливаем частоту дискретизации отсчетов
...
read(fd, buffer_rx, number_of_bytes); // читаем number_of_bytes байт данных в буфер
...
close(fd); // закрываем устройство
Пример: чтение из AC’97 кодека
Зачем Linux на встроенном аппаратном обеспечении?
Несмотря на факт, что Linux изначально не разрабатывалась для использования на встроенных системах, она нашла свой путь в большое количество встроенных устройств. С момента выхода ядра версии 2.0.x и появления коммерческой поддержки для Linux на встроенных процессорах, произошел настоящий взрыв в появлении новых встроенных устройств использующих ОС. Почти каждый день появляется новое устройство или гаджет, использующее Linux в качестве своей операционной системы, в большинстве случаев остающейся практически не замеченной конечными пользователями. Сегодня большинство доступных широкополосных маршрутизаторов, сетевых брандмауэров, точек беспроводного доступа и даже некоторые проигрыватели DVD используют Linux (дополнительные примеры можно найти на http://www.linuxdevices.org).
Linux и uClinux предлагают комплект драйверов для всех типов оборудования и протоколов. В сочетании с тем фактом, что Linux не требует лицензионных отчислений, быстро становится очевидным, почему так много разработчиков использует Linux в своих устройствах.
Но зачем кому-то использовать Linux на DSP?
В прошлом DSP использовались в большом количестве приложений, включая звуковые карты, модемы, телекоммуникационное и медицинское оборудование, а также всех типов военных и прочих приборов, которые выполняют истинную обработку сигналов. Такие DSP системы в общем были разработаны специально для подобных приложений и имели только базовые возможности для соответствия их тесным ограничениям на стоимость и размер. Хотя DSP стали более мощными и гибкими, обслуживая, таким образом, возросшие требования военных, медицинских и коммуникационных задач, они все еще были лишены необходимых способностей для поддержки операционных систем. Эти традиционные DSP очень мощные и гибкие, но могут быть довольно дорогими. Они часто образуют кластеры специального аппаратного обеспечения для обработки сигналов, в которых нет необходимости в операционных системах подобных Linux, работающих непосредственно на DSP. Это обычно следствие того факта, что в таких системах DSP получают свои данные от неких дополнительных ЦП. Таким образом, только базовое системное программное обеспечение должно быть написано для таких DSP.
С быстро развивающимся мультимедиа и распространением мультимедийных и коммуникационных электронных новинок, теперь существует большой рынок для нового типа DSP. В настоящее время, наиболее широко используемый дизайн для обслуживания этих рынков это комбинация процессора общего назначения и традиционного DSP, работающего как сопроцессор. При таком сценарии, операционная система работает на основном процессоре, а сигнальная обработка производится на DSP. Такой тип двухпроцессорного дизайна не оптимален вследствие неэффективности в вопросах стоимости, мощности и размеров.
Существует несколько решений для обеспечения требований нового рынка:
• Использование специально разработанных заказных микросхем (ASIC) и ПЛИС – при этом требуются огромные первоначальные инвестиции для разработки «с нуля» или для использования и модификации неких готовых разработок (IP) от третьих фирм.
• Использование специальных аппаратных решений часто совмещенных с IP-ядрами общего назначения на однокристальных системах (SOC), например проигрыватель DVD на кристалле, сканер и цифровая камера на кристалле. Такие устройства обычно ограничены функциями, для которых они изначально разрабатывались.
• Сочетание традиционного DSP и IP-ядра общего назначения на устройстве SOC, где операционная система работает на IP-ядре, а сигнальная обработка может быть оставлена встроенному DSP; такой подход был выбран в некоторых наборах микросхем беспроводных локальных сетей.
• Или, наконец, переработка DSP для соответствия требованиям современных операционных систем, с сохранением эффективной архитектуры DSP. Этот подход был принят разработчиками процессора Blackfin – разработать процессор с продвинутыми функциями DSP на базе хорошо себя зарекомендовавшей Гарвардской Архитектуры и с RISC-подобной системой команд. Такое устройство уже не просто DSP, а скорее мощный процессор, который удовлетворит растущие требования широкого спектра коммуникационных и мультимедиа приложений. А в сочетании с функциями и мощью операционной системы такой как Linux, открываются практические бесконечные возможности.
Возможности uClinux по работе в реальном масштабе времени
Поскольку Linux была изначально разработана для использования на серверах и рабочих станциях, она не имеет «hard real-time» возможностей работы в реальном масштабе времени, как и большинство других операционных систем сравнимой сложности и размера. Тем не менее, Linux – и особенно uClinux – имеет великолепные, так называемые «soft real-time» возможности. Это значит, что хотя Linux и uClinux не могут гарантировать конкретного времени задержки обслуживания прерываний или планировщика, сравнимого с другими операционными системами аналогичной сложности, они демонстрируют очень благоприятные характеристики производительности. Если кому-то необходима так называемая «hard real-time» система, которая может гарантировать фиксированную задержку для планировщика и прерываний, то существует несколько путей достигнуть этой цели:
• Использовать другую операционную систему: для выбора доступно много систем ОСРВ, соответствующих этому требованию (ядро VisualDSP++, Nucleus PLUS, ThreadX, ulTRON).
• Обеспечение возможностей «real-time» в форме использования нижележащего минимального ядра РВ такого как RT-Linux (http://www.rtlinux.org) или RTAI (http://www.rtai.org). Оба решения используют маленькое ядро реального времени, которое исполняет Linux как задачу с низшим приоритетом. Программы, которым необходимо предсказуемое время реакции разрабатываются для запуска на ядре реального времени и кодируются специальным образом. Все другие задачи и службы работают на ядре Linux верхнего уровня и могут использовать все, что Linux может предоставить. Этот подход может гарантировать детерминированную задержку обслуживания прерывания при сохранении гибкости, которую обеспечивает Linux.
• Изменить ядро Linux для обеспечения гарантированного времени обслуживания прерывания: Бернгард Кун (Bernhard Kuhn) разрабатывает заплатку для ядра Linux, которая могла бы реализовать это (http://linuxdevices.com/articles/AT6105045931.html). В будущем она возможно будет портирована в ветвь uClinux для процессора Blackfin.
В большинстве же случаев, «hard real-time» не нужен, особенно для мультимедиа приложений, в которых временные ограничения обусловлены возможностями пользователей по восприятию кратковременных сбоев в аудио и видео информации. Эти физически заданные ограничения, которым необходимо соответствовать, обычно лежат в области десятков миллисекунд – что не является большой проблемой на столь быстрых чипах как процессор Blackfin. Более строгие временные требования могут быть обеспечены с помощью незначительных уловок или некоторых изменений непосредственно в планировщике задач. В ядре 2.6.x, новом выпуске стабильного ядра, эти качества даже были улучшены за счет нового 0(1) планировщика и прерывания обслуживания ядра (preemption).
Таблицы 2 и 3 ниже содержат времена исполнения для многих популярных мультимедиа и коммуникационных алгоритмов, работающих на процессоре Blackfin без ОС. В большинстве случаев, остается существенный запас вычислительной мощности, так что планировщик имеет достаточно времени для управления небольшим числом процессов, которые обычно исполняются на подобных устройствах. Таким образом, нет проблемы в использовании неких программ написанных на языках типа Perl, Python и PHP, при наличии служб web server, snmp, ppp или pppoe, firewall и т.п., запущенных одновременно с декодированием видео и аудио данных.
Таким образом, нет необходимости в «hard real-time» операционных системах, которые нуждаются в дополнительных возможностях, предоставляемых только такими мощным ОС как Linux.
Таблица 2: Видео и аудио кодеки
Таблица 3: Кодеки речи
Исходные тексты uClinux для процессора Blackfin
Все исходные коды и инструменты (компиляторы, бинарные утилиты) необходимые для создания работающего ядра uClinux на процессорах Blackfin могут быть получены на сайте http://www.blackfin.uclinux.org. Для использования двоичных RPM-дистрибутивов, вам понадобится ПК с установленным дистрибутивом Linux, таким как Red Hat или SuSe.
У разработчиков, которые не имеют возможности установить Linux на свои ПК с Windows®, есть несколько альтернатив:
• Купить другой ПК для использования с Linux. Этот ПК мог бы предоставлять службы Linux для всего персонала разработчиков в компании. При использовании пакетов Xserver на Windows ПК и Samba на Linux ПК, эта среда разработки может быть естественным образом интегрирована с существующими средствами разработки под Windows. Samba является продуктом с открытым исходным кодом и есть практически в каждой инсталляции Linux, а бесплатный Xserver доступен в составе среды cygwin (http://www.cygwin.com).
• Запускать Linux на Windows платформах: Доступно несколько программ, которые позволяют использовать полный дистрибутив Linux под Windows (2000, XP). Эти программы эмулируют ПК внутри ОС Windows, так что могут быть загружены неизмененные «гостевые» ОС. Два примера это VMWare и Virtual PC.
• Использовать специально портированное на платформу Windows ядро Linux, которое предоставляет проект coLinux (www.colinux.org).
• Использовать портированные в Windows средства разработки.
Для последней альтернативы уже существует неортодоксальное решение, которое может быть бесплатно загружено с http://www.blackfin.uclinux.org. Этот порт использует среду cygwin и поставляется с полным дистрибутивом uClinux, включая все пользовательские приложения и графическую программу установки под Windows.
Следует отметить требование использовать ПК по крайней мере с Windows 2000 (с NT может и работать, но специально не тестировалось). Раздел диска, на который установлен дистрибутив uClinux, должен использовать файловую систему NTFS (FAT32 также работает, но с некоторыми ограничениями, влияющими на производительность).
Перспективы и выводы
Процессоры Blackfin предлагают великолепное соотношение цена/производительность (800 MMAC @ 400 МГц менее чем за $5/штуку в больших партиях), улучшенные функции управления энергопотреблением, и маленькие корпуса mini-BGA. Это обеспечивает малопотребляющее и компактное решение даже для самых амбициозных проектов. Хорошо развитые DSP и мультимедиа возможности процессоров Blackfin квалифицируют их не только для аудио и видео применений, но также для всех типов индустриальных, автомобильных и коммуникационных устройств. Другое преимущество процессора Blackfin в сочетании с uClinux это доступность широкого спектра приложений, драйверов и протоколов, часто предоставленных как открытый исходный код или свободно распространяемое ПО. В большинстве случаев, простая компиляция или незначительные ухищрения необходимы для сборки и запуска этого программного обеспечения. А в комбинации с такими бесценными инструментами как Perl, Python и PHP, разработчики имеют возможность создавать даже самые требовательные многофункциональные приложения за очень короткий промежуток времени, при этом часто еще остаются вычислительные мощности для дальнейших улучшений и новых функций.
Последнее ядро 2.6.6 скоро будет выпущено, вместе с новыми средствами разработки gcc 3.3.3. Дополнение для поддержки Blackfin было интегрировано в ветку ядра uClinux и доступно для процессоров Blackfin ADSP-BF531/532/533 и ADSP-BF535. Благодаря тому факту, что Blackfin это совершенно новая архитектура, последует много других одно- и двух- ядерных наследников (www.analog.com/processors/blackfin). В этом году появится новый представитель семейства процессоров Blackfin с встроенным контроллером Ethernet уровня MAC. Некоторые разработчики уже начали портирование uClinux на новый ADSP-BF561, имеющий сдвоенное ядро. Идея, стоящая за этой попыткой, это работа uClinux на одном ядре, и выполнение таких задач как высокопроизводительное кодирование или декодирование видео в реальном масштабе времени на другом ядре.
Ссылки:
www.blackfin.uclinux.org
www.analog.com/blackfin
www.uclinux.org
www.blackfin.org
www.tldp.org
Автор:
Майкл Хеннерих
Европейское отделение по применению DSP Analog Devices, Германия, Мюнхен
European DSP Applications Engineer (ADI Germany, Munich)
Соавтор:
Юрген Хеннерих
Студент, University of Tuebingen.
Linux User Group Tuebingen (LUGT).
Перевод:
Вадим Торганов, инженер по применению DSP, представительство Analog Devices в России
vadim.torganov@analog.com.ru
Официальное представительство Analog Devices в России:
Санкт-Петербург, а/я 85, 191014, Россия,
тел.: +7 (812) 327-4590, +7 (812) 336-2500, +7 (812) 336-2505; факс: +7 (812) 327-4591