Android Core
Felipe Silveira
RIL: Radio Interface Layer
O que é RIL?
● Camada de abstração entre os serviços de telefonia de android (android.telephony) e o hardware de rádio.
● 2 principais componentes:
- RIL Daemon (rild) - Vendor RIL
RIL: Radio Interface Layer
RIL: Radio Interface Layer
Packet Driver PPP, for example Linux IP stack Vendor RIL system/libs/libril-vendor.soRadio Daemon (rild)
commands/rild
Phone
android.telephony.*
Applications (Phone, Messaging, Contacts, etc.)
RIL API (RILJ)
android.telephony.gsm.*
RIL: Radio Interface Layer
Packet Driver PPP, for example Linux IP stack Vendor RIL system/libs/libril-vendor.soRadio Daemon (rild)
commands/rild
Phone
android.telephony.*
Applications (Phone, Messaging, Contacts, etc.)
RIL API (RILJ)
android.telephony.gsm.*
RIL: Radio Interface Layer
Packet Driver PPP, for example Linux IP stack Vendor RIL system/libs/libril-vendor.soRadio Daemon (rild)
commands/rild
Phone
android.telephony.*
Applications (Phone, Messaging, Contacts, etc.)
RIL API (RILJ)
android.telephony.gsm.*
RIL: Radio Interface Layer
Packet Driver PPP, for example Linux IP stack Vendor RIL system/libs/libril-vendor.soRadio Daemon (rild)
commands/rild
Phone
android.telephony.*
Applications (Phone, Messaging, Contacts, etc.)
RIL API (RILJ)
android.telephony.gsm.*
RIL: Radio Interface Layer
Packet Driver PPP, for example Linux IP stack Vendor RIL system/libs/libril-vendor.soRadio Daemon (rild)
commands/rild
Phone
android.telephony.*
Applications (Phone, Messaging, Contacts, etc.)
RIL API (RILJ)
android.telephony.gsm.*
RIL: Radio Interface Layer
Packet Driver PPP, for example Linux IP stack Vendor RIL system/libs/libril-vendor.soRadio Daemon (rild)
commands/rild
Phone
android.telephony.*
Applications (Phone, Messaging, Contacts, etc.)
RIL API (RILJ)
android.telephony.gsm.*
Baseband
RILD - Radio Interface Layer Daemon
O termo RILD se refere ao componente responsável por controlar as tarefas de telefonia.
A abreviação terminada em D indica que ele é um
RILD - Radio Interface Layer Daemon
Em linux, daemons são softwares responsáveis por
receber comandos que serão executados em background. Este software é executado em um processo que nunca é terminado.
Exemplos: sshd, ftpd, httpd, etc
RILD - Radio Interface layer daemon
● Responsável por inicializar o Vendor RIL
● Faz o processamento de toda comunicação entre os
serviços de telefonia android e dispara chamadas para o Vendor RIL através dos Solicited Commands. Por
RILC
● Escrito em C ● hardware/lib/ril ● Event Scheduler responsável por processar as requisições solicitadas e não-solicitadas.Vendor RIL
● hardware/ril/ reference-ril ● Lib proprietária, responsável por acessar o BP para serviços de voz/mensagens/contro le e a IP stack para dadosRILD Startup
Inicialização do RIL daemon é feita pelo init.rc:
service ril-daemon /system/bin/rild
class main
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
user root
RILD Startup
Após a inicialização do rild, este executa a seguinte sequência para inicializar toda a stack de telefonia e o Vendor RIL:
1) O rild lê as system properties rild.libpath e rild.libargs
para determinar qual será o Vendor RIL utilizado e quais são os parâmetros necessários. Por exemplo:
rild.libpath=/system/lib/libreference-ril.so rild.libargs=-d /dev/pts/0
RILD Startup
2) O rild então carrega o Vendor RIL e invoca o seu
método RIL_Init para obter uma referência para as funções da interface do RIL.
RILD Startup
3) O rild invoca o método RIL_register para obter uma
Interações com o RIL
O RIL interage com os outros componentes de um telefone android através de dois mecanismos:
● Comandos solicitados
Comandos originados da RIL lib (RILJ) ● Comandos não solicitados
Comandos Solicitados
Requisições solicitadas são aquelas que se originam da RIL API, na maioria das vezes a partir de alguma ação do
usuário. Exemplos:
DIAL HANGUP
Comandos Solicitados
Interface de tratamento de requisições solicitadas:
void RIL_OnRequest (int request_id, void *data, size_t datalen, RIL_Token t);
void RIL_OnRequestComplete (RIL_Token t, RIL_Error e, void *response, size_t
Comandos Solicitados
Mais de 60 comandos disponíveis, divididos nos seguintes grupos:
SIM PIN, IO, and IMSI/IMEI (11)
Call status and handling (dial, answer, mute…) (16) Network status query (4)
Network setting (barring, forwarding, selection…) (12) SMS (3)
PDP connection (4) Power and reset (2)
Supplementary Services (5) Vendor defined and support (4)
Comandos Não Solicitados
As requisições não solicitadas, por sua vez, são aquelas que ocorrem a partir de um evento na camada de
Baseband. Exemplos:
CALL_STATE_CHANGED NEW_SMS
Comandos Não Solicitados
Interface de tratamento de requisições não solicitadas: void OnUnsolicitedResponse (int unsolResponse, void *data, size_t datalen);
Comandos Não Solicitados
Mais de 10 comandos disponíveis, divididos nos seguintes grupos:
Network status changed (4) New SMS notify (3)
New USSD notify (2)