Разве пользовательский протокол NetLink не связан процессом применения с помощью метода связывания?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Разве пользовательский протокол NetLink не связан процессом применения с помощью метода связывания?

Сообщение Anonymous »

Я пытаюсь получить сообщения ядра в программе пользовательского пространства через пользовательский протокол NetLink. Например, получите статус подключаемого и выталкивания интерфейса DP и информацию подключенных устройств. Когда я составляю код пользователя в исполняемом файле и запускаю его непосредственно в устройстве Android, он работает правильно и получает сообщения ядра, регистрация пользовательского протокола в части ядра была завершена, поэтому исполняемая программа может отслеживать информацию. Однако, когда я собираю один и тот же код пользователя в общую библиотеку (.so) для вызова APK, я сталкиваюсь с ошибкой времени выполнения на шаге привязки:

Код: Выделить всё

Error message: bind error: Operation not permitted。
[/b] не может быть скомпилирована в такую ​​библиотеку для прямого использования APK (так что библиотека не имеет процесса.)? Как я могу решить и решить эту проблему? функция на

Код: Выделить всё

NETLINK_ROUTE
[/b] Sockets. Интересно, что я обнаружил, что связывание со стандартными протоколами работает правильно при нацеливании на SDK 32.
при использовании netlink_route , [/b] работает без ошибок в обоих случаях:
  • как автономный исполняемый PrettyPrint-Override ">

    Код: Выделить всё

    struct sockaddr_nl sa;
    memset(&sa, 0, sizeof(sa));
    sa.nl_family = PF_NETLINK;
    sa.nl_groups = 1;
    
    fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
    bind(fd, (struct sockaddr *) &sa, sizeof(sa));
    < /code>
    Однако с помощью пользовательского протокола [b] (netlink_test) < /strong>: < /p>
    
      нет ошибок в автономном исполнении < /p>
    < /li>
     .so
    [/b] библиотека, вызванная APK, не удается с [/b] ошибки
struct sockaddr_nl sa;
memset(&sa, 0, sizeof(sa));
sa.nl_family = PF_NETLINK;
sa.nl_groups = 1;

fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_TEST);
bind(fd, (struct sockaddr *) &sa, sizeof(sa));
< /code>
1. Во -первых, даже создание сокета сообщит об ошибке. Позже, выполнение «ADB Shell SetenForce 0» разрешило эту проблему. Но ошибка привязки все еще сохраняется. Я добавил разрешение Local_mac_address в это привилегированное приложение, но оно не сработало.


Подробнее здесь: https://stackoverflow.com/questions/797 ... a-the-bind
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»