Как стать автором
Обновить
7
Карма
0
Рейтинг
Павел @oxodff

Инженер-программист

Как запихнуть свой сенсор в Android OS

Наибольшая разница была в ядре, даже несмотря на то, что для RPi и планшета мы использовали разные версии Android OS — 7.1 и 4.4 соответственно.


Для RPi наиболее ходовыми версиями, которые можно запустить без особых проблем являются (насколько я вычитал тогда) 6.х и 7.х. Там достаточно новое ядро, более 4.х, если не ошибаюсь, и оно использует device tree для объявления устройств. Структура и примеры device tree очень хорошо описаны (вот тут: https://www.raspberrypi.org/documentation/configuration/device-tree.md), и расширенный, по сравнению, со стандартным device tree формат позволяет делать многие вещи еще проще.


В планшете же, ввиду старого ядра, device tree нет. Там код загрузки, который надо было дописать. Не то чтобы проблема, но заодно пришлось прочитать многие, лежащие около исходники. Кроме этого, производители телефонов/плашетов и т.п. если и дают свои исходники, то там всегда есть закрытая часть (хотя у RPi тоже). И она почти всегда плохо описана и требует практических примеров того, как этим пользоваться. У nvidia множество функций с префиксом tegra_, которые делают массу разного и зачастую неизвестного.


Отладка — отдельная проблема… в статье есть о том как она не заработала, причем именно на этой версии устройства с кодовым именем grouper. На других устройствах из линейки nexus многие работают, но не все.


Ну и сообщество RPi с уже отвеченными вопросами в значительно большей вероятности сможет чем-то помочь, по сравнению с поиском ответов о том, какие устройства сидят на определенных шинах tegra3. В итоге, на планшете гораздо чаще приходилось пользоваться осциллографом и i2c декодером, чтобы понять что чего-то в супе не хватает.


Т.е. в целом, одно и то же, но "есть нюансы" :)

Как запихнуть свой сенсор в Android OS

Как запихнуть свой сенсор в Android OS

Сейчас еще (или до сих пор) неизвестно, что именно будет нужно в production. Так что, кто знает, как оно еще обернётся.

Как запихнуть свой сенсор в Android OS

  1. Целевые GPIO заблокированы на уровне SoC. Т.е. надо лезть в включать их в именно в ядре
  2. GPIO по умолчанию не экспортируются, поэтому сначала нужно было бы сделать их экспорт (не знаю, возможно ли это в конфигах, и не уверен, что можно это сделать находясь уже в userspace), а затем дописать дополнительные правила из части selinux. Будет ли это проще?..
  3. Читая про HAL и его специфику решили, что не стоит туда выносить функциональность коммуникации. К тому же, итоговый драйвер имеет более расширенную функциональность.

Но, пожалуй, главное — то, что, в итоге, имея драйвер, а не модуль middleware, проект будет легче модифицировать так, что этот сенсор будет добавлен в HAL Sensors и станет доступен через стандартное API.


Вот тут (https://source.android.com/devices/sensors/) про этот HAL написано, если что

Как запихнуть свой сенсор в Android OS

Сначала все таки мы использовали RPi3 для первого приближения, я об этом упомянул. А планшет демонстрируется (нашему) конечному заказчику, которому надо видеть более приближенный к реальности результат. Кроме того, разница между планшетом и RPi есть, и нам надо было в этом разобраться, раньше или позже.

Информация

В рейтинге
Не участвует
Откуда
Тула, Тульская обл., Россия
Зарегистрирован
Активность