MTK radiooptions 分析
点击打开链接
RIL Socket 资源创建
service ril-daemon /system/bin/rild
class main
socket rild stream 660 root radio
socket sap_uim_socket1 stream 660 bluetooth bluetooth
socket rild-debug stream 660 radio system
user root
group radio cache inet misc audio log
radiooptions.c 解析:
int main(int argc, char *argv[])
{
int fd;
int num_socket_args = 0;
int i = 0;
int modem_socket_type = 0;
int sim_id = 0;
char socket_name[20];
if(error_check(argc, argv)) {
print_usage();
exit(-1);
}
num_socket_args = get_number_args(argv); // 执行参数个数
modem_socket_type = atoi(argv[(num_socket_args-1)]); //The last argument must be modem-socket style \n\
sim_id = atoi(argv[(num_socket_args-2)]); // The argument before the last one must be SIM slot \n\
memset(socket_name, 0, sizeof(char)*20);
if (sim_id == 0 || modem_socket_type == 1) {
strncpy(socket_name, SOCKET_NAME_RIL_DEBUG, 19);
} else if (sim_id == 1) {
strncpy(socket_name, SOCKET_NAME_RIL2_DEBUG, 19);
}
fd = socket_local_client(socket_name,
ANDROID_SOCKET_NAMESPACE_RESERVED,
SOCK_STREAM);
if (fd < 0) {
perror ("opening radio debug socket");
exit(-1);
}
/* It is not necessacry to pass the argument "modem-socket style" to rild */
最后一个参数modem-socket style 不需要发送到rild 进程
num_socket_args--; // 将参数个数减1
int ret = send(fd, (const void *)&num_socket_args, sizeof(int), 0); //发送参数个数
if(ret != sizeof(int)) {
perror ("Socket write error when sending num args");
close(fd);
exit(-1);
}
for (i = 0; i < num_socket_args; i++) { //将参数发送到rild 进程
// Send length of the arg, followed by the arg.
int len = strlen(argv[1 + i]); //获取每个参数的长度,并发送
ret = send(fd, &len, sizeof(int), 0);
if (ret != sizeof(int)) {
perror("Socket write Error: when sending arg length");
close(fd);
exit(-1);
}
ret = send(fd, argv[1 + i], sizeof(char) * len, 0); //发送每个参数的值
if (ret != len * sizeof(char)) {
perror ("Socket write Error: When sending arg");
close(fd);
exit(-1);
}
}
close(fd);
return 0;
}
编译radiooptions.c ,生成mtkradiooptions 可执行文件;
push 到手机 system/bin ,添加可执行权限:chmod 777 /system/bin/mtkradiooptions
执行如下:
mtkradiooptions 1 1 1 ;关闭radio
mtkradiooptions 5 1 1 ;打开radio
Native 端Ril.cpp ,以 rild-debug socket 讲解
extern "C" void
RIL_register (const RIL_RadioFunctions *callbacks) {
s_fdDebug = android_get_control_socket(rildebug);//获取ril-debug socket 描述符
if (s_fdDebug < 0) {
RLOGE("Failed to get socket : %s errno:%d", rildebug, errno);
exit(-1);
}
ret = listen(s_fdDebug, 4);//监听ril-debug socket
if (ret < 0) {
RLOGE("Failed to listen on ril debug socket '%d': %s",
s_fdDebug, strerror(errno));
exit(-1);
}
ril_event_set (&s_debug_event, s_fdDebug, true,
debugCallback, NULL); //传递socket 文件描述符,debugCallback 处理接收到的消息
}
static void debugCallback (int fd, short flags, void *param) {
acceptFD = accept (fd, (sockaddr *) &peeraddr, &socklen); // 接收socket 连接
if (acceptFD < 0) {
RLOGE ("error accepting on debug port: %d\n", errno);
return;
}
if (recv(acceptFD, &number, sizeof(int), 0) != sizeof(int)) { // 接收第一个数据(参数的个数)请求
RLOGE ("error reading on socket: number of Args: \n");
return;
}
args[i] = (char *) calloc(1, (sizeof(char) * len) + 1); // 接收参数数据
if (recv(acceptFD, args[i], sizeof(char) * len, 0)
!= (int)sizeof(char) * len) {
RLOGE ("error reading on socket: Args[%d] \n", i);
freeDebugCallbackArgs(i, args);
return;
}
}
static void
issueLocalRequest(int request, void *data, int len, RIL_SOCKET_ID socket_id) {
pRI->p_next = *pendingRequestsHook;
*pendingRequestsHook = pRI;
callOnRequest(request, data, len, pRI, pRI->socket_id);
}
MTK radiooptions 分析相关推荐
- Android OrangePi 4G IOT(四) - MTK LK分析
一.MTK启动流程 1-3:设备上电起来后,跳转到Boot ROM(不是flash)中的boot code中执行把pre-loader加载起到ISRAM, 因为当前DRAM(RAM分SRAM跟DRAM ...
- log 的抓取与分析
log 的抓取与分 http://blog.csdn.net/yaoming168/article/details/38777727 log 的抓取与分析 一.Android log框架简介 二.lo ...
- 三,Linux SDIO驱动框架之扫卡流程
本文以kernel-4.4,以MTK平台分析host端初始化的扫卡流程 mtk平台host驱动代码在drivers/mmc/host/mtk-sdio.c,sd card,mmc和sdio car ...
- 个人收集的一些手机研发资料
FlashTool_v3.1.04 FlashTool v3[1][1].1.04 MTK平台板测校准原理 FlashTool v5.1140.00 MTK6223方案介绍 高薪诚聘软件J2ME开发工 ...
- Ansroid系统(262)---MTK安卓sim卡相关源码分析
MTK安卓sim卡相关源码分析 原文地址:http://m.blog.csdn.net/article/details?id=50039589 最近由于一个sim卡相关的需求,就去了解了一下Andro ...
- MTK驱动(74)---平台待机功耗分析流程
MTK平台待机功耗分析流程 1.目的 2.MTK平台各个场景功耗数据测试方法 很多功耗问题都是因为测试手法不对,列出一些常用场景功耗测试手法. 测试功耗数据之前,请先确认以下配置: 1.关闭 WI ...
- MTK 驱动(67)---深入MTK平台bootloader启动之【 lk -amp;gt; kernel】分析笔记
Pre-loader 运行在ISRAM,待完成 DRAM 的初始化后,再将lk载入DRAM中,最后通过特殊sys call手段实现跳转到lk的执行入口,正式进入lk初始化阶段. 一.lk执行入口: 位 ...
- Android 功耗(4)---MTK平台待机功耗分析流程
MTK平台待机功耗分析流程 MTK平台待机功耗分析流程 1.目的 2.MTK平台各个场景功耗数据测试方法 很多功耗问题都是因为测试手法不对,列出一些常用场景功耗测试手法. 测试功耗数据之前,请先确认 ...
- MTK 驱动(38)---MTK 待机问题分析
mtk 平台待机问题分析: 1 待机问题分类 1)无法待机: 1. 需要确认 APK 是否有 partial_wakelock 2. kernel 是否持有 wakeup source 不释放. ...
最新文章
- ios遍历模块的方式
- linux /proc文件系统(1)
- rabbitmq可靠性投递_RabbitMQ 可靠投递
- qt ui界面无法移动控件_都是知识点!移动端UI设计最基本的10种APP界面类型(上)...
- python--装饰器初阶
- ssh X11 Forwarding(本地共享远程服务器界面)
- 剖析:计算机专业大一学生如何学习C语言?如何自学C语言?大学C语言学习视频教程谁有?
- 最好用的UltraISO 9.5.3.2901中文完美注册破解版
- SaaSBase:什么是SAP(思爱普) ERP?
- git/icode操作记录
- 1371: 三位数求解
- 2.PyTorch的Dataset和DataLoader
- LeetCode——868. 二进制间距
- 使用AD16画板步骤
- (3)Mathpix Snipping Tool——公式截图获取工具(转为LaTex、MarkDown格式)
- 建筑施工复习资料-立杆基础
- dhl寄件邮编错了_如果从国外邮寄DHL往中国.邮编怎么写?
- (转)Linux Kernel核心中文手册
- 多元函数第六:连续函数(6)Bolzano-Weierstrass 波尔查诺-维尔斯特拉斯定理 聚点与列紧集
- Python 爬虫实战(三) 获取百度地图搜索结果
热门文章
- 日期加星期存入mysql_在MySQL中添加两个星期的日期?
- python代码怎么设置,如何设置PyCharm中的Python代码模版(推荐)
- 接口文件也是.java结尾吗
- 041_Unicode对照表七
- 001_Servlet简介
- 074_JSON.stringify()
- 2021-10-20开发计量系统遇到的问题之--1启动mysql--2mybatis谨慎注释--3mybatis返回多表查询结果
- RxJava 教程第一部分:入门之 生命周期管理
- ssh 用密码连接不上、查看openSSH 的版本、CentOS - 升级openSSH,修复安全漏洞
- CAD2011软件安装资料及教程