Источник: Сайт 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