Уровень радиоинтерфейса Android (RIL) и /dev/
Кто-нибудь знает, как RIL (/hardware/reference/reference-ril/) определяет, что монтируется в / dev /, когда запускается радио в основной полосе частот?
В старых телефонах и в другой документации телефоны GSM используют /dev/smd0. Не все телефоны используют /dev/smd0. Я пытаюсь определить способ выяснить, что монтируется независимо от типа радио и поставщика.
Если кто-то может конкретно определить, где в / hardware / reference / reference-ril / я могу увидеть, где это установлено и откуда он берет информацию после инициализации, это было бы идеально.
2 ответа
RIL находится в вашей прикладной платформе.
если вы хотите увидеть RIL и реализовать функциональность с использованием командной строки, это сделано. Есть команда ниже:
void (*RIL_RequestFunc) (int request, void *data, size_t datalen, RIL_Token t);
Я нашел это отсюда:
Вы серьезно относитесь к этому, пожалуйста, перейдите по ссылке: RIL Study LInk
Если вы хотите узнать о примере: GIT HUB
Это на самом деле зависит от того, какой интерфейс вы используете для подключения. Вы можете использовать интерфейс USB, UART или SPI для подключения верхнего уровня к модему. Параметр, переданный в функцию RIL_Init, определяет устройство, к которому вы пытаетесь подключиться. Если вы хотите точно знать, где это делается, смотрите функцию RIL_Init в файле reference-ril.c.
const RIL_RadioFunctions *RIL_Init(const struct RIL_Env *env, int argc, char **argv)
{
int ret;
int fd = -1;
int opt;
pthread_attr_t attr;
s_rilenv = env;
while ( -1 != (opt = getopt(argc, argv, "p:d:s:"))) {
switch (opt) {
case 'p':
s_port = atoi(optarg);
if (s_port == 0) {
usage(argv[0]);
return NULL;
}
RLOGI("Opening loopback port %d\n", s_port);
break;
case 'd':
s_device_path = optarg;
RLOGI("Opening tty device %s\n", s_device_path);
break;
case 's':
s_device_path = optarg;
s_device_socket = 1;
RLOGI("Opening socket %s\n", s_device_path);
break;
default:
usage(argv[0]);
return NULL;
}
}
if (s_port < 0 && s_device_path == NULL) {
usage(argv[0]);
return NULL;
}
sMdmInfo = calloc(1, sizeof(ModemInfo));
if (!sMdmInfo) {
RLOGE("Unable to alloc memory for ModemInfo");
return NULL;
}
pthread_attr_init (&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
ret = pthread_create(&s_tid_mainloop, &attr, mainLoop, NULL);
return &s_callbacks;
}
Надеюсь, теперь все ясно.