Эта статья нуждается в редакционном обзоре. Как вы можете помочь.
Gonk это низкоуровневый слой платформы Firefox OS, состоящий из ядра Linux на базе Android Open Source Project (AOSP) и cлоя абстрагирования от аппаратных средств (HAL). Цель данной статьи объяснить, что представляет собой Gonk. Подробнее об общей архитектуре Firefox OS и как Gonk в неё вписывается, написано в руководстве Firefox OS architecture.
Описание Gonk
Gonk это компонент уровня ядра в стэке Firefox OS который служит интерфейсом между Gecko и аппаратным обеспечением. Gonk контроллирует аппаратное обеспечение и предоставляет доступ к нему различным Web API встроенным в Gecko. Gonk можно рассматривать как "черный ящик" который, обрабатывая запросы, "за кулисами" делает всю комплексную, детализированную работу по управлению мобильным устройством на аппаратном уровне.
Gonk это простой дистрибутив Linux включающий в себя компоненты из Android (такие как GPS и Камера) и расширенный Mozilla стандартными open source проектами такими как libusb, bluez и так далее, чтобы интегрировать со всеми слоями в архитектуре Firefox OS. Такая структура позволяет OEM производителям проще портировать программные компоненты из других реализаций Android (драйверы устройств, микропрограммы(firmware), service-level демоны и т.д.) для развертывания на смартфонах Firefox OS.
Gonk это слой портируемый на устройства: адаптер между аппаратурой и Gecko. Gonk относительно простой дистрибутив Linux который можно рассматривать как разновидность Порта Gecko в паре со слоями портирования Gecko — тоесть Gonk это объект(цель) для портирования по отношению к Gecko, как например есть порты Gecko для OS X, Windows, and Android.
Note: Поскольку различные устройства могут отличатся по набору микросхем и другим аппаратным особенностям, устройства могу содержать разные дистибутивы Gonk.
Поскольку проект Firefox OS имеет полный контроль над Gonk, мы можем реализовывать интерфейсы для Gecko которые не могут быть реализованы в других операционных системах. Например под Gonk у Gecko есть прямой доступ к полному стеку телефонии и фрейм-буфферу дисплея.
Архитектура Gonk
Каждая модель мобильного телефона имеет специальную комбинацию компонентов Gonk на основе системных библиотек, драйверов и микропрограмм необходимых для работы устройства. Эти компоненты выпускаются OEM/ODM-производителями и производителями наборов микосхем. На следующей схеме показан пример реализации Gonk:
Этот пример показывает следующие основные компоненты (которые представляют только часть из возможных компонентов в каждой конкретной реализации Gonk):
- Ядро ОС Linux: Использует библиотеки из Android (GPS, камера, т.д.) и другие open-source проекты (Linux, libusb, bluez, and so on).
- Radio Interface Layer (RIL): Взаимодействует с аппаратурой модема (телефония) в смартфоне. Состоит из двух компонентов:
- rild daemon: Общается с прошивкой модема.
- rilProxy: Пересылает сообщения между rild и b2g процессом.
- mediaserver process: Управляет воспроизведением аудио и видео. Gecko взаимодействует с медиа-сервером через Android RPC.
- netd process: Сетевой демон, который взаимодействует непосредственно с сетевыми интерфейсами (WiFi) на аппаратном уровне.
- Bluetooth, т.п.: Bluetooth и другие service-level демоны обеспечивают доступ к аппаратным ресурсам.
Gonk также запускает, обслуживает и останавливает B2B процесс, являющийся слоем Gecko в Firefox OS. B2G процесс выступает в качестве клиента для service-level демонов в Gonk, которые взаимодействуют непосредственно с аппаратным обеспечением и предоставляют Gecko аппаратную функциональность телефона. Gecko общается с этими демонами через межпроцессное взаимодействие (IPC). Эти компоненты совместно обменивают команды и протоколы для запроса и предоставления сервисов.
Note: Чтобы узнать больше о архитектуре Gonk, смотри Руководство по архитектуре Firefox OS.
Портирование Gonk
Поскольку Firefox OS базируется на ядре Android, существующие драверы, прошивка, service демоны, и другие компоненты могут быть портированы для работы с Firefox OS, Как правило с минимальными усилиями. Если необходим особый компонент (например нестандартный RIL или новый демон), или требуется внести изменения в эталонный дизайн ODM-производителя, возможно потребуется произвести дополнительную интеграцию и тестирование.
В b2g, клиенты взаимодействуют с service-level демонами через межпроцессное взаимодействие (IPC). Клиенты инициируют соединение через сокет к service-level демону, отправляет запрос (используя протокол запросов сервера) через это соединение, принимает ответ и закрывает соединение. OEM-производители ответственны за разработку и реализацию этого межпроцессного взаимодействия между клиентами и серверами.
Note: Чтобы узнать больше о том как производится портирование, смотри Портирование Firefox OS.
Как Mozilla работает над портами Gonk с OEM и производителями телефонов
Каждая реализация Gonk является результатом сотрудничества между Mozilla, OEM-производителями и сопутсвующими производителями (ODM-производителями, производителями чипсетов).
Mozilla предоставляет репозитарии с исходным кодом и осуществляет поддержку файлов Gonk в дистрибутивах Firefox OS. Репозитарии с исходным кодом включают базовое ядро Linux (с незначительными изменениями) и хуки (hooks) в Gecko.
OEM-производители в свою очередь ответственны за сборку, компиляцию, тестирование, сертификацию и распространение системного образа Firefox OS для конкретной модели устройства. Для Gonk в рамках системного образа, OEM-производители ответственны за большую часть усилий по обеспечению интеграции между вызовами Web API и аппаратным обеспечением телефона. Тип и объем необходимых усилий сильно зависит от особенностей набора микросхем и других аппаратных компонентов используемых в телефоне.
Компоненты устройства
OEM-производители сотрудничают с производителями наборов микросхем и ODM-производителями чтобы обеспечить все, специфические для конкретной аппаратуры, компоненты, необходимые для функционирования мобильного устройства. Например производитель Wi-Fi обеспечивает набор микросхем и сопутсвующее ПО. Компоненты могут включать:
- Драйверы — Для поддержки периферии телефона, такой как модем (данные и голос), Wi-fi, Bluetooth, дисплей, камера, аудио и т.д.
- Микрокоды — Некоторая аппаратура (сетевая карта например) может загружать свою прошивку с flash диска.
- Service-level демоны — Для вызова и управления работой различных аппаратных компонентов. Могут включать в себя вспомогательные библиотеки и скрипты запуска.
Интеграция между Gonk и Gecko
OEM-производители должны гарантировать, что аппаратные возможности мобильного устройства корректно и полностью совместимы с Web API реализованный в Gecko. Для этого необходимо осуществить:
- сборку или адаптацию (в Gonk) service-level демонов, а так же все необходимые драйверы или микрокоды, необходимые для управделия аппаратурой
- настройку или создание (in b2g) всех методов необходимых для взаимодействия с service-level демонами
Исходный код Gonk
Главный B2G репозитарий на Github содержит официально поддерживаемые порты Gonk для различных устройств, так что можно считать его репозитарием Gonk’а. Список поддерживаемых устройств находится в B2G/config.sh
.
B2G процесс (наряду с прочим), определяемый в Gonk, можно найти на mozilla-b2g/gonk-misc. Изменения исходного кода B2G производятся здесь.
Note: В исходном коде Gecko есть директория b2g/,
которая содержит модификацию Gecko для Gonk: она включает ядро Linux, HAL, и специфические OEM библиотеки.
Большая часть ежедневной работы проделанной над Gonk заключается в портировании системы на различные платы и будте уверены, Gecko может хорошо работать на различных устройствах.