Как читать данные порта / dev / diag напрямую с устройства, у которого есть root-оболочка - PullRequest
0 голосов
/ 14 мая 2019

Проблема: Как читать данные порта / dev / diag напрямую с устройства, у которого есть root-оболочка. Код:

fd = open("/dev/diag", O_RDWR | O_LARGEFILE | O_NONBLOCK);
    if (fd < 0) {
        perror("open diag dev");
        return -8002;
    }

Рабочее решение с внедренной оболочкой adb и исполняемым файлом c:

  1. Создать исполняемый файл из кода c.
  2. Создание нового пользователя в Android.
  3. Сделать владельцем исполняемого файла новый идентификатор пользователя с 'su shell'.
  4. Владелец порта make / dev / diag - это новый идентификатор пользователя с 'su shell'.
  5. Запускать исполняемый файл без прав su, но в новой пользовательской оболочке. Я могу получать данные из порта / dev / diag каждый раз после всего лишь одной процедуры, написанной выше. Поэтому мне больше не нужна рутированная оболочка для запуска моего исполняемого файла и чтения данных из порта / dev / diag.

Неработающее решение с рутированной оболочкой adb и приложением для Android:

  1. Установите на своем устройстве apk с пользовательским интерфейсом для вызова необходимой функции на стороне JNI для начала чтения данных из порта.
  2. Найдите идентификатор пользователя установленного приложения. Я нашел это в файле data / system / packages.list.
  3. Владелец порта make / dev / diag - это новый идентификатор пользователя с 'su shell'.
  4. Вызовите нужную функцию в приложении, которое в дальнейшем пытается открыть порт / dev / diag. Порт dev / diag не открывается кодом и восстанавливается -8002.

У меня недостаточно знаний о linux, но я немного понимаю, что если у меня есть рутированная оболочка, то я, безусловно, могу предоставить своему приложению для Android доступ к порту / dev / diag.

Пожалуйста, помогите мне в этом. Я буду очень благодарен вам.

...