Проблема: Как читать данные порта / dev / diag напрямую с устройства, у которого есть root-оболочка.
Код:
fd = open("/dev/diag", O_RDWR | O_LARGEFILE | O_NONBLOCK);
if (fd < 0) {
perror("open diag dev");
return -8002;
}
Рабочее решение с внедренной оболочкой adb и исполняемым файлом c:
- Создать исполняемый файл из кода c.
- Создание нового пользователя в Android.
- Сделать владельцем исполняемого файла новый идентификатор пользователя с 'su shell'.
- Владелец порта make / dev / diag - это новый идентификатор пользователя с 'su shell'.
- Запускать исполняемый файл без прав su, но в новой пользовательской оболочке.
Я могу получать данные из порта / dev / diag каждый раз после всего лишь одной процедуры, написанной выше.
Поэтому мне больше не нужна рутированная оболочка для запуска моего исполняемого файла и чтения данных из порта / dev / diag.
Неработающее решение с рутированной оболочкой adb и приложением для Android:
- Установите на своем устройстве apk с пользовательским интерфейсом для вызова необходимой функции на стороне JNI для начала чтения данных из порта.
- Найдите идентификатор пользователя установленного приложения. Я нашел это в файле data / system / packages.list.
- Владелец порта make / dev / diag - это новый идентификатор пользователя с 'su shell'.
- Вызовите нужную функцию в приложении, которое в дальнейшем пытается открыть порт / dev / diag.
Порт dev / diag не открывается кодом и восстанавливается -8002.
У меня недостаточно знаний о linux, но я немного понимаю, что если у меня есть рутированная оболочка, то я, безусловно, могу предоставить своему приложению для Android доступ к порту / dev / diag.
Пожалуйста, помогите мне в этом. Я буду очень благодарен вам.