Как Java работает с UART в Android?

Вопрос чисто теоретический.

В Android есть SerialPort API в Java, которое позволяет работать с UART. И тут у меня один вопрос: вот как Java работает с UART "в обход" ядра?

Смотрите, в чем проблема. Пусть даже это Java машина, вследствие чего она имеет значительные привилегии в системе, но вся поддержка внешних устройств упирается в ядро Linux. В /proc/config.gz я не нашёл строк на CP2102, RS232 или UART, а даже то, что нашёл подходящего, было в NO. Т е, в ядре нету (?) поддержки Serial USB.

Когда я подключаю CP2102 переходник в ПК, у меня там появляется /dev/ttyACM0, к которому я могу подключиться. На Android такого устройства не появляется. Зато с ним я могу работать из необходимых приложений.

Вот реально парадокс: как вообще так получилось, что zygote работает с ttyACM0 на будь здоров, а вот собственно система вообще молчит, будто и не поддерживает вовсе этот ваш Serial. Если даже в ядре есть поддержка Serial (а она должна быть, иначе я вообще не понимаю, что за чертовщина творится в Android), то почему она не работает так штатно, как в обычном Linux, и как zygote все-таки получает доступ к устройству Serial USB? Что-что, а Android на уровне базовой системы и ядра - это все-таки Linux...


Ответы (1 шт):

Автор решения: RandomDice 779

Узнал (причём не так уж и давно) про userspace драйвера, точнее - "uio". Пара устройств /dev/uio есть в моём телефоне, походу это они отвечают за UART.

→ Ссылка