Слой аппаратных абстракций (HAL)

В Sailfish OS используются компоненты ПО низкого уровня (HAL) с помощью механизма совместимости libhybris.

Хотя верхние уровни стека телефонии открыты, аппаратные адаптации модема и аудио почти всегда проприетарны.

HAL based on Bionic содержит определенный код по аппаратной части, включающий в себя слой радиоинтерфейса (Radio Interface Layer, RIL). HAL based on Bionic предоставляет комплект заголовочных файлов, включающих в себя сообщения и/или функции, т. е. API HAL. Затем API HAL реализуется в общей библиотеке, представленной вендором BSP. Также есть необходимость в модуле ядра, как и в случае с любым аппаратным обеспечением для Linux.

RIL

RIL отвечает за подключение к сотовому модему через HAL.

Не существует стандарта для реализации HAL программного интерфейса модема, и, как правило, необходимо использование проприетарного набора команд для полноценного функционирования модема. Демон RIL обеспечивает доступ к модему, даже к такому, который использует проприетарный набор команд, с помощью стандартного интерфейса.

Архитектура RIL

RIL состоит из трех основных частей, относящихся к HAL:

  • демон RIL (RILD);
  • RIL вендора;
  • RILC (libril).

Все они используют заголовочный файл ril.h, который определяет модемонезависимый интерфейс.

RILD является относительно небольшим и простым демоном, который инициализирует вендор-специфичную реализацию RIL, используя конфигурацию для получения пути к файлу устройства RIL вендора.

RIL вендора обеспечивает связь с драйвером модема и модем-специфичной абстракцией и  может быть перестроен в соответствии с предпочтениями поставщика и состоять из нескольких модулей.

libril является разделяемой библиотекой, статически связанной с RILD и RIL вендора. Как и RILD, libril обеспечивает механизм событий RIL и реализует механизм связи между фреймворком приложений и RIL вендора.

Взаимодействие с RIL

Взаимодействие между RIL и фреймворком приложений осуществляется через сокет. Есть два типа команд, используемых при взаимодействии с RIL: команды и события. Команды исходят от фреймворка приложений и включают их ответы. События исходят от модема и отображают его состояние. Например, входящий вызов принимается как событие.

RIL в Mer обрабатывается через oFono.