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 不释放. ...
最新文章
- 这几个超绝设计,谁看了不大喊一声“丑!!”
- maven整合S2SH
- 看了这个高并发系统架构,才知道我对秒杀的误解有多深
- Yarn的默认端口(转载)
- FIR仿真module_04
- Linux Kbuild文档 1
- android不能在主线程,安卓开发:主线程真的不能做UI操作吗?这一点很多程序员都没想到...
- python字典如何删除数据库,如何从python字典中删除?
- Mysql学习总结(39)——49条MySql语句优化技巧
- MySql Workbench表PK UN UQ B等字符的含义
- 软件开发从需求分析开始
- 用Java读取pdf中的数据
- JetBrains正式发布GoLand
- 改写自SqlHelper的SqliteHelper
- python123练习六+练习七
- pytorch nn.AdaptiveAvgPool2d(1)
- VMware导致电脑蓝屏解决方案
- ubuntu 板载r8125有限网卡连接
- ios从打包到上架全过程
- 谈谈区块链入门技能(二):以太坊区块链浏览器如何使用?
热门文章
- 026_jdbc-mysql-PrepareStatement解决sql注入
- 071_html语言代码
- Smoke Test与Ad hoc Test
- R-CNN系列学习笔记
- 计算机丢失cv210.dll,cv210.dll文件免费版
- wireshark合并多个文件_TEQC合并多个时段GPS RINEX文件
- 网络ip功放连接图_精耕新基建:智能IP网络构筑稳固的连接基石
- 大一大专计算机考试题型,大专,计算机一级考试考什么内容,麻烦详细点,谢谢。...
- 二层交换机可以划分vlan吗_二层交换机上,属于不同VLAN的PC该如何通信
- lsqcurvefit拟合结果为复数_非线性拟合怎么转化为线性拟合?