Как из андроид приложения перемонтировать FS для записи (RW)? Или как иначе записать в серийный порт типа /dev/ttyS0?
Долго уже мучаюсь пытаясь научиться работать с COM-портом из андроид приложения. В винде и линуксе это делать в разы проще благодаря JSSC, а решения для Android почти отсутствуют. usb-serial-for-android не находит даже списка портов, а android-serialport-api так же, как JSSC даже не запускаются до Android 5 из-за того, что почему-то в нативном модуле методы, использующие "termios.h" не распознаются. Возможно, в урезанном ядре анроида его нет.
И вот я решил написать всё с нуля, но даже ноль не выходит сделать.
Если команда в шелле "echo 1234 > /dev/ttyS0" отрабатывает хорошо, порт получает строку, то работать с портом как с файлом у меня не выходит, пишет, что нет доступа: Reason: open failed: EACCES (Permission denied)
При этом устройство рутировано, я могу даже читать из /system (писать не могу).
Да, рутовано. Но этого мало. Нужно же этим рутом ещё и как-то воспользоваться? Тот же RootExplorer не может ничего записать пока не нажмёшь там кнопочку mount R/W.
Там, выходит, вот, что я сегодня узнал.
1. Моя программа запускается от пользователя u0_r55 или типа того. Даже если я делаю Runtime.getRuntime().exec("su"); я всё равно остаюсь под этим пользователем, а не под рутом.
2. Дальше я выяснил, что у порта /dev/ttyS0 права по умолчанию после каждой перезагрузки становятся 600, а владелец root, то есть только root может писать и читать туда.
3. Получается пойти взять лестницу и вылезти из ямы, потому что я не могу из-за под юзера приложения сделать Runtime.getRuntime().exec("chmod 666 /dev/ttyS0"); - это не возымеет эффекта. Поэтому и вопрос - как сделать так, чтобы запускать консольные команды из приложения от имени root?!
Sam: Короче, перемонтировать уже ничего не надо. Хотя уметь это было бы полезно. Вместо перемонтирования, нужно просто установить правильные права.
PS: если в шелле вручную вбить chmod 666 /dev/ttyS0 и вручную задать скорость порта через stty, то до перезагрузки приложение успешно читает и пишет в порт, проверено.
CityCat4: Я ж говорю, это задача с лестницей и ямой. Вопрос сводится уже к тому, всего лишь, как программа с разрешения пользователя может сделать "chmod" от имени root.
Вы тут умничаете, но это не помогает решить проблему. Ну не находится, и что из этого следует? Как получить нужные права? Как туда записать из приложения?