Gonk

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 может хорошо работать на различных устройствах.

 

Метки документа и участники

 Внесли вклад в эту страницу: chrisdavidmills, Vusluk, iVAN2002
 Обновлялась последний раз: chrisdavidmills,