Вот инструкция для добавления поддержки
GPS и
Глонасс в прошивки для медиабоксов на
Amlogic-процессоре с
Андроид 9. Проверял на x96 stick и Beelink gt mini. Проверял только 32-бит версию.
Используем
USB GPS M8N модуль от
Ublox со встроенным micro-usb разъемом, разпознается как
ttyACM. Если у вас другой модуль и он распознается как
ttyUSB, то с приложенным сюда драйвером он работать не будет.
Вот почему:
gps-драйвер ищет модуль самостоятельно по vendor.id и product.id, сканируя все доступные tty в выбранном диапазоне (ro.kernel.android.gps) в файлах
/sys/class/tty/{ro.kernel.android.gps}n/device/uevent
cdc-acm заполняет все данные полностью, а драйвера ядра pl2303 и ftdi_sio - нет.
Для полной поддержки требуется внести правки в gps-драйвер и его перекомпилировать, но пока нет возможности это сделать. Вот здесь эта проблема описана, там же есть исправленная версия драйвера, но только для 64-битной версии.
-------------------------------
Прежде чем мы внесем изменения, чтобы иметь возможность откатиться назад, если не получится, необходимо убедиться, что:- у вас есть полноценный работающий Recovery (TWRP), в который вы можете попасть при загрузке, зажав определенную кнопку.
- вы можете в нем смонтировать раздел Vendor и проводником добраться до файла /system/vendor/etc/vintf/manifest.xml.
- файл android.hardware.location.gps.xml
поместить в /system/vendor/etc/permissions/
выставить права 644
- файлы android.hardware.gnss@1.0-impl.so и gps.amlogic.so
поместить в /system/vendor/lib/hw/
выставить права 644
для 64-битной версии: еще потребуется из папки vendor-lib64-hw файлы поместить в /system/vendor/lib64/hw/
выставить права 644
- файл android.hardware.gnss@1.0-service
поместить в /system/vendor/bin/hw/
выставить права 755
- файл android.hardware.gnss@1.0-service.rc
поместить в /system/vendor/etc/init
выставить права 644
- Важно правильно указать productid и vendorid нашего USB GPS, драйвер находит tty именно по ним.
(ro.kernel.android.gps указываем без цифры, драйвер сам просканирует все указанные нами tty и найдет нужный)
(опять же в драйвере есть недоработка - не находит устройство, если productid или vendorid начинается на "0" - 01a8, нужно указывать без первого "0" - 1a8)
добавить в файл /system/vendor/build.prop
Код:
# USB GPS Ublox [M6:1546-1a6, M7:1546-1a7, M8:1546-1a8]
ro.gps.id.vendor=1546
ro.gps.id.product=1a8
ro.kernel.android.gps=ttyACM
ro.kernel.android.gps.speed=9600
ro.kernel.android.gps.max_rate=1
- (чтобы драйвер смог получить доступ к потоку данных, tty нужны правильные права - по умолчанию ставятся 600, которых недостаточно)
добавить в файл /system/vendor/ueventd.rc
Код:
#GNSS USB GPS Ublox
/dev/ttyACM* 0666 gps gps
- (самый важный пункт, чтобы все это подгрузилось системой)
здесь содержится список компонентов, которые Андроид подгружает в текущей сборке.
добавить в файл /system/vendor/etc/vintf/manifest.xml
после любого </hal>
Код:
<hal format="hidl">
<name>android.hardware.gnss</name>
<transport>hwbinder</transport>
<version>1.0</version>
<interface>
<name>IGnss</name>
<instance>default</instance>
</interface>
<fqname>@1.0::IGnss/default</fqname>
</hal>
Файл сохранить под именем manifest_with_gps.xml.
В оригинальный файл изменения не вносить, чтобы можно было откатиться назад.
Выставить этому файлу права, такие же как у оригинального файла - 644.
Теперь у нас manifest.xml (оригинальный) и manifest_with_gps.xml (измененный) лежат рядом в директории /system/vendor/etc/vintf/.
Чтобы запустить поддержку GPS, нужно переименовать manifest.xml в manifest_origin.xml, а manifest_with_gps.xml в manifest.xml и перезагрузить.
Если все сделали правильно, то Андроид подгрузит службу GNSS, а она в свою очередь - драйвер. Программы GPS будут показывать вместо No GPS - No Fix, в настройках пункт Местоположение будет нормально работать.
Если что-то пойдет не так, система просто не загрузится и повиснет на бутанимации,
мы перезагрузимся, удерживая кнопку, зайдем в Recovery, попадем в TWRP, смонтируем раздел Vendor, проводником доберемся до директории /system/vendor/etc/vintf/ и переименуем обратно файл manifest.xml в manifest_with_gps.xml, а manifest_origin.xml в manifest.xml.
Все вернется к изначальному варианту.