Подтвердить что ты не робот

Как модемный код разговаривает с Android-кодом

Я хотел бы знать, как идея Android Modem будет вызывать/передавать сообщение на уровне приложений Android. Скажем, мы принимаем SMS, например. Если сеть отправляет SMS и модем (скажем, код Qualcomm C анализирует его), как он передается на уровень приложений Android?

Всегда ли происходит вызов JNI? как интерфейс между модемом и Android? Не могли бы вы поделиться с нами информацией. Благодаря

4b9b3361

Ответ 1

Почти во всех источниках исходных текстов Android, найденных в источнике AOSP/CAF/CM (Android Open Source Project, CodeAurora Forum, Cyanogenmod соответственно), будет иметь код C, называемый rild, (Radio Interface Layer Daemon). Это обычно встречается в /hardware/ril исходного дерева.

Этот демон запускается с момента загрузки Android и создает сокет под названием /dev/socket/rild и /dev/socket/rild-debug. Будет создана проприетарная библиотека от Qualcomm, HTC, которая динамически загружается во время загрузки при загрузке. Это проприетарная библиотека, которая, в свою очередь, общается с радиопрограммой. И там устанавливаются rild крючки для обратных вызовов в проприетарную библиотеку.

На уровне rild, через вышеупомянутый сокет, взаимодействует уровень Android (найденный в исходном дереве frameworks/base/telephony/com/android/internal/telephony/RIL.java).

На стороне Java он открывает сокет для чтения/записи, а также устанавливает намерения и настраивает делегаты для событий вещания/приема через этот сокет.

Например, входящий вызов, проприетарная библиотека, вызывает крючок обратного вызова, настроенный rild. rild записывает стандартные стандартные команды модема AT Hayes в сокет на стороне Java, он читает и интерпретирует команды модема, а оттуда PhoneManager передает CALL_STATE_RINGING, в котором приложение телефона (найдено в источнике packages/apps/Phone) зарегистрировал приемник и отправил пользовательский интерфейс, и именно так вы получите ответ на вызов.

В другом примере, исходя из исходящего вызова, вы набираете номер на Android, цель создается и который, в свою очередь, PhoneManager (Это корень всего этого), здесь не может запомнить верхнюю часть моя голова, подумайте, что его в frameworks/base/core/java где-то в исходном дереве) получает намерение, преобразует его в последовательность команд модема AT Hayes, записывает его в сокет, rild, затем вызывает обратный вызов в проприетарную библиотеку, проприетарная библиотека, в свою очередь, делегирует радиопрограмму.

Окончательный пример, отправляющий текстовые сообщения из приложения "Сообщения" (найденного в packages/apps/Mms исходном дереве), текст, который вы вводите, получает в намерение, PhoneManager получает намерение, преобразует текст в кодировку GSM с помощью 7 (IIRC), выписывается в сокет, rild, в свою очередь, вызывает обратный вызов в проприетарной библиотеке, запатентованная библиотека, в свою очередь, делегирует радиопрограмму и текст теперь остается область телефона и находится в эфире где-то...:) Наряду с отправкой широковещательного сообщения в самом Android, при условии, что разрешение READ_PHONE_STATE используется и указано в AndroidManifest.xml.

Аналогично, при получении текстового сообщения оно обратное, радиопрограмма получает несколько байтов, проприетарная библиотека вызывает обратный вызов rild и, таким образом, записывает байты в сокет, На стороне Java он считывает из нее и декодирует последовательность байтов, преобразует ее в текст, как мы знаем, запускает трансляцию с уведомлением, полученным с сообщением. Приложение Messaging, в свою очередь, зарегистрировало приемники для указанной широковещательной передачи и отправляет намерение на панель уведомлений, чтобы сказать что-то вроде "Новое сообщение, полученное от + xxxxxx"

Тонкости найдены в frameworks/base/telephony/java/com/android/internal/telephony/TelephonyIntents.java

Вот суть работы системы телефонии, настоящая красота заключается в том, что она использует общие команды модема AT Hayes, что упрощает и скрывает реальные запатентованные механизмы.

Что касается подобных Qualcomm, HTC, забудьте об этом, думая, что они когда-нибудь откроют исходную библиотеку, потому что уровень радиотелефонии встроен в схему S-o-C (System on Chip)!

Что также, в качестве побочного примечания, почему его рискованно прошивать радиопрограмму, некоторые телефоны предоставляют возможность сделать это, прошивку неправильной прошивки (например, несовместимую или не подходящую для трубки), поцелуй в телефонную трубку, пока не используйте это как пробку или бумагу!:)

Следует отметить, что существует нулевой механизм JNI.

Это из моего понимания того, как это работает, из того, что я могу сказать, это прошивка радио загружается в адрес памяти где-то, где ядро ​​Linux зарезервировало адресное пространство и не трогает его, что-то вроде в старые дни ПК, когда загружалась DOS, были зарезервированные адреса, используемые BIOS, я думаю, что здесь похоже, адреса, помеченные как зарезервированные, занимают прошивка, в которой прописывает проприетарную радио библиотеку, - а так как библиотека работает в адресном пространстве, принадлежащем ядру, а lá принадлежит root с привилегиями root, он может "поговорить" с ним, если вы думаете об использовании старого BASIC-диалекта peek и poke, я бы предположил, что вы не будете вдали от отметки там, написав определенную последовательность байтов на этот адрес, радиопрограмма работает на нем, почти как с таблицей векторов прерываний... это угадывает здесь, как она работает точно.:)

Ответ 2

Продолжая объяснение по t0mm13b, Когда мы говорим о смартфоне, подумайте о трехслойных операциях по SMS/Calls.

RIL (Пользовательский уровень) ↔ AP ↔ CP

AP: Application Processor (где работает ваша ОС Android. Подумайте о играх, песнях, видео, камерах и т.д., работающих на этом процессоре)

CP: Cellular Processor (на самом деле имеет дело с Air-интерфейсом для входящих/исходящих вызовов/смс, взаимодействует с Network Tower и т.д.)

Теперь скажем, что некоторые данные получены на стороне CP (это могут быть интернет-данные/sms/call). Теперь между AP и CP есть определенные логические каналы. Таким образом, CP будет передавать данные, полученные в соответствующий канал, на основе типа данных. Эти данные будут получены AP. AP отправит эти данные обратно в RIL/App. RIL будет декодировать эти данные (особенно данные call/sms). На основании этого дается уведомление Пользователю о SMS/Call.