В вычислении , нано-X является оконной системой , которая является полнофункциональным достаточно , чтобы использоваться на ПК , встроенных систем [1] [2] или КПК . [3] [4] Это проект с открытым исходным кодом, направленный на привнесение функций современных графических оконных сред на небольшие устройства и платформы. Проект был переименован с Microwindows из-за юридических угроз со стороны Microsoft в отношении торговой марки Windows .
Обзор
Оконная система Nano-X является чрезвычайно портативным и полностью написан на языке C . Он был портирован на 16-, 32- и 64-разрядные процессоры Intel, Broadcom BCM2837 ARM Cortex-A53 , а также на чипы MIPS R4000 (NEC Vr41xx) StrongARM и PowerPC, установленные на портативных и карманных ПК.
Система Nano-X Window в настоящее время работает в системах Linux с поддержкой фреймбуфера ядра или с использованием драйвера X11, который позволяет запускать приложения Microwindows поверх рабочего стола X Window . Этот драйвер эмулирует все Microwindows' полноцветный и палитру режимов , так что приложение может быть просмотрено с использованием характеристик отображения целевой системы непосредственно на дисплее рабочего стола, независимо от характеристик отображения рабочего стола. Кроме того, он был портирован на Windows , Emscripten , Android (на основе библиотеки Allegro ) и MS-DOS . Драйверы Microwindows экрана были написаны на основе SDL1 и SDL2 библиотек плюс Allegro и SVGAlib библиотек. Также есть драйверы VESA и VGA 16 для цветных 4-х плоскостей.
Архитектура
Многослойный дизайн
Микроокна - это, по сути, многоуровневый дизайн, который позволяет использовать или переписывать разные слои в соответствии с потребностями реализации. [5] На самом низком уровне драйверы экрана , мыши / сенсорной панели и клавиатуры обеспечивают доступ к фактическому дисплею и другому оборудованию для ввода данных пользователем. На среднем уровне реализован переносной графический движок, обеспечивающий поддержку рисования линий, заливки областей, многоугольников, отсечения и цветовых моделей. На верхнем уровне реализованы три API, обеспечивающих доступ к программисту графических приложений. В настоящее время Microwindows поддерживает API-интерфейсы Xlib, Nano-X и Windows Win32 / WinCE GDI . Эти API-интерфейсы обеспечивают тесную совместимость с системами Win32 и X Window , однако с ограниченной функциональностью. Эти API-интерфейсы позволяют легко переносить программы из других систем.
Драйверы устройств
Интерфейсы драйверов устройств определены в файле device.h. Данная реализация Microwindows свяжет с системой по крайней мере один драйвер экрана, мыши и клавиатуры. Подпрограммы среднего уровня в ядре аппаратно-независимого графического ядра затем вызывают драйвер устройства напрямую для выполнения операций, зависящих от оборудования. Эта настройка позволяет добавлять различные аппаратные устройства в систему Microwindows, не влияя на работу всей системы.
Интерфейсы прикладного программиста
Микроокна в настоящее время поддерживают три различных интерфейса прикладного программирования (API). Этот набор процедур ручек клиента - сервера деятельности, менеджер окон деятельности , как рисование названия баров, рядом коробку и т.д., а также обработка запросов программиста для вывода графики. Эти API-интерфейсы работают поверх основных процедур графического ядра и драйверов устройств.
NX11 API
NX11 API совместим с X Window API. Он основан на Nano-X API и предоставляет функции Xlib, используя функции, доступные в Nano-X API. Его можно скомпилировать как отдельную библиотеку или вместе с библиотекой Nano-X как единую библиотеку под названием libPX11. Всего он предоставляет 180 функций Xlib и заглушки для дополнительных, не реализованных функций.
На основе NX11 API библиотека графического интерфейса пользователя FLTK может использоваться для предоставления графического интерфейса для прикладных программ. Nanolinux распределение использует API NX11 и FLTK для реализации операционной системы Linux с использованием 19 МБ дискового пространства.
Nano-X API
Точка доступа Nano-X смоделирована по образцу сервера mini-x, первоначально написанного Дэвидом Беллом, который был повторной реализацией X в операционной системе MINIX . Он примерно соответствует API Xlib системы X Window, но все имена принадлежат GrXXX (), а не X ... (). Базовая модель любого API поверх Microwindows - инициализировать драйверы экрана, клавиатуры и мыши, а затем зависнуть в цикле select () в ожидании события. Когда происходит событие, если это системное событие, такое как активность клавиатуры или мыши, эта информация передается в программу пользователя, преобразованную в событие экспонирования, сообщение рисования и т. Д. Если это пользователь, запрашивающий графическую операцию, тогда параметры декодируются и передаются в соответствующую процедуру механизма GdXXX. Обратите внимание, что концепция окна по сравнению с необработанными графическими операциями обрабатывается на этом уровне API. То есть API определяет концепции того, что такое окно, каковы системы координат и т. Д., А затем все координаты преобразуются в «экранные координаты» и передаются в основные процедуры механизма GdXXX для выполнения реальной работы. Этот уровень также определяет графические или отображаемые контексты и передает эту информацию, включая информацию об отсечении, в подпрограммы ядра.
Микроокна API
API, который пытается соответствовать стандартам Microsoft Win32 и WinCE GDI, - это Microwindows API. [6] В настоящее время поддерживается большинство процедур рисования и обрезки графики, а также автоматическое рисование строки заголовка окна и перетаскивание окон для перемещения. API-интерфейс Microwindows основан на сообщениях и позволяет писать программы без учета возможных политик управления окнами, реализуемых системой. API Microwindows в настоящее время не является клиент-серверным.
Основным механизмом связи в API Microwindows является сообщение. Сообщение состоит из хорошо известного номера сообщения и двух параметров, известных как wParam и lParam. Сообщения хранятся в очереди сообщений приложения и извлекаются с помощью функции GetMessage. Приложение блокируется в ожидании сообщения. Есть сообщения, которые соответствуют аппаратным событиям, например WM_CHAR для ввода с клавиатуры или WM_LBUTTONDOWN для нажатия кнопки мыши. Кроме того, отправляются события, сигнализирующие о создании и разрушении окна WM_CREATE и WM_DESTROY. В большинстве случаев сообщение связано с окном, обозначенным как HWND. После получения сообщения приложение отправляет сообщение в процедуру обработки связанного окна с помощью DispatchMessage. Когда создается класс окна, указывается связанная с ним процедура обработки сообщений, поэтому система знает, куда отправить сообщение.
Архитектура передачи сообщений позволяет базовому API управлять многими системными функциями, отправляя сообщения о всех видах событий, таких как создание окна, необходимость рисования, перемещение и т. Д. По умолчанию связанная функция обработки окна получает "первый проход" в message, а затем вызывает функцию DefWindowProc, которая обрабатывает действия по умолчанию для всех сообщений. Таким образом, все окна могут вести себя одинаково при перетаскивании и т. Д., Если это специально не отменено пользователем. Основные политики управления окнами можно переопределить, просто повторно реализовав DefWindowProc, вместо того, чтобы вносить изменения во всей системе.
Основной единицей организации экрана в Microwindows API является окно. Windows описывает область экрана для рисования, а также связанную с ней «оконную процедуру» для обработки сообщений, предназначенных для этого окна. Программисты приложений могут создавать окна из предопределенных классов, таких как кнопки, поля редактирования и т.п., или определять свои собственные классы окон. В обоих случаях метод создания окон и взаимодействия с ними остается неизменным.
История
Происхождение Nano-X связано с NanoGUI. NanoGUI был создан Алексом Холденом, взяв сервер mini-X Дэвида Белла и модификации Алана Кокса и добавив сеть клиент / сервер. Затем Грегори Хаэрр заинтересовался проектом NanoGUI и начал вносить значительные улучшения и модификации в NanoGUI. Примерно в версии 0.5 Грегори Хаэрр добавил поддержку нескольких API и начал распространять Микроокна. В Microwindows 0.84 были включены все предыдущие изменения NanoGUI, и с тех пор это объединенный дистрибутив NanoGUI / Microwindows. В январе 2005 года система сменила название на Nano-X Window System. Поскольку Nano-X слабо следует за X Window System Xlib API, был разработан дополнительный интерфейс под названием NXlib, который предоставляет совместимый с Xlib API на основе Nano-X.
Рекомендации
- ^ С. Веллхёфер, Встроенный Linux с Nano-X
- ^ Микроокна 0.9 в ARM Linux
- ^ «Установка Микроокон на iPAQ» . Архивировано 16 апреля 2007 года . Проверено 16 апреля 2007 .
- ^ «Роял Лин @ х КПК» . Архивировано 22 мая 2007 года . Проверено 22 мая 2007 .
- ^ П. Рагхаван, Проектирование и разработка встроенных систем Linux
- ^ Linux + Микроокна: претендент на WinCE
Внешние ссылки
- Микроокна на GitHub для последней версии
- Сайт Microwindows.org
- Введение в программирование микроокон
- Введение в программирование микроокон, часть 2
- Введение в программирование микроокон, часть 3