android pppd流程,Android pppd_gprs脚本启动过程
android的gprs的上网过程:
1、在ril层中打开模块对应的数据业务设备,比如/dev/ttyUSB3
2、往数据设备发送AT+CGDCONT命令指定对应apn,发送ATDT*98*1#等拨号指令
3、上述AT指令返回OK之后,就可以启动pppd_gprs脚本了,启动之前,先设置好apn的属性,例如user,pwd,device等
property_set("net.gprs.user", user);
property_set("net.gprs.password", pwd);
property_set("net.gprs.device", device);
property_set("net.gprs.ppp-exit", "");
property_set("ctl.start", "pppd_gprs");4、属性的设置过程在我的上一篇blog有详细阐述
http://www.voidcn.com/article/p-nkpunheu-bhv.html
看property_service.c中void handle_property_set_fd(int fd)函数的代码
switch(msg.cmd) {
case PROP_MSG_SETPROP:
msg.name[PROP_NAME_MAX-1] = 0;
msg.value[PROP_VALUE_MAX-1] = 0;
if(memcmp(msg.name,"ctl.",4) == 0) {
if (check_control_perms(msg.value, cr.uid, cr.gid)) {
handle_control_message((char*) msg.name + 4, (char*) msg.value);
} else {
ERROR("sys_prop: Unable to %s service ctl [%s] uid: %d pid:%d\n",
msg.name + 4, msg.value, cr.uid, cr.pid);
}
根据属性的key值"ctl.start"调用到init.c的handle_control_message函数
void handle_control_message(const char *msg, const char *arg)
{
if (!strcmp(msg,"start")) {
msg_start(arg);
} else if (!strcmp(msg,"stop")) {
msg_stop(arg);
} else {
ERROR("unknown control msg '%s'\n", msg);
}
}
在msg_start中,查找名称为pppd_gprs的服务,这个服务名称其实也是脚本的名称,然后启动改服务,即执行pppd_gprs脚本
static void msg_start(const char *name)
{
struct service *svc;
char *tmp = NULL;
char *args = NULL;
if (!strchr(name, ':'))
svc = service_find_by_name(name);
else {
tmp = strdup(name);
args = strchr(tmp, ':');
*args = '\0';
args++;
svc = service_find_by_name(tmp);
}
if (svc) {
service_start(svc, args);
} else {
ERROR("no such service '%s'\n", name);
}
if (tmp)
free(tmp);
}
5、pppd_gprs服务在初始化脚本init.XX.rc中定义,由parser.c解析到service_list中
service pppd_gprs /system/xbin/pppd_gprs
user root
group root
oneshot
disabled6、pppd_gprs脚本读取刚刚已经设置好的apn的属性,执行pppd进程
USER=`/system/bin/getprop net.gprs.user`
PASSWORD=`/system/bin/getprop net.gprs.password`
DEVICE=`/system/bin/getprop net.gprs.device`
/system/bin/setprop net.gprs.ppp-exit ""
/system/bin/pppd -detach $DEVICE 115200 noipdefault noauth debug novj usepeerdns noccp ipcp-no-addresses kdebug 4 defaultroute user $USER password $PASSWORD
/system/bin/setprop net.gprs.ppp-exit $?
#exit $? 7、执行pppd_gprs脚本以后,ril层读取/sys/class/net/ppp0/operstate来监控数据网络数据的状态。
android pppd流程,Android pppd_gprs脚本启动过程相关推荐
- Android系统启动流程--init进程的启动流程
这可能是个系列文章,用来总结和梳理Android系统的启动过程,以加深对Android系统相对全面的感知和理解(基于Android11). 1.启动电源,设备上电 引导芯片代码从预定义的地方(固化在 ...
- Android开发——Android系统启动以及APK安装、启动过程
0. 前言 从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的? 1. 系统上电 当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被 ...
- Android系统(117)---Activity启动过程
Activity启动过程 ###一些基本的概念 ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期 ActivityThread,App的 ...
- Android 系统(16)---应用启动过程
在Android系统中,启动四大组件中的任何一个都可以启动应用程序.但绝大部分时候我们是通过点击Launcher图标来启动应用程序.本文依据Android7.0源码,从点击Launcher图标开始,分 ...
- Android 系统(15)---Launcher启动过程
Launcher概述 SystemServer进程主要用于启动系统的各种服务,其中就包含了Launcher服务,LauncherAppService. Android系统默认第一个启动的应用程序是Ho ...
- Android 通过源码解析 Fragment 启动过程
0x00 作为一名 Android 开发者,大家绝对都接触过 Fragment 开发,而且绝大多数人例如我一直都很难记住下图 Fragment 复杂的生命周期,更别说要将其与 Activity 的生命 ...
- Android程序包管理(1)--PKMS启动过程
一.PKMS启动过程 1.重要文件目录介绍 1.目录: /system/ect/permissions/xxx.xml:加载系统feature /system/ect/permissions/plat ...
- Android系统启动(四) — Launcher 启动过程
1 Launcher 概述 系统启动的最后一步是启动一个应用程序来显示系统中已经安装的应用程序,这个应用程序就叫做 Launcher.Launcher 在启动过程中会请求 PackageManager ...
- Android之ActivityManagerService详解(APP启动过程)
转载请标明出处:[顾林海的博客] 前言 AMS(ActivityManagerService)的启动是在SystemServer进程中启动的,它的职责是用于和所有APP的四大组件进行通信,Activi ...
最新文章
- 自定义PHP错误报告处理方式
- python udp 直播_[Python] socket发送UDP广播实现聊天室功能
- 截图如何能截到鼠标?脑洞小方法
- mutex的加锁与解锁问题
- 请谈一下,你知道的http请求,并说明应答码502和504的区别
- 我要带徒弟学JAVA架构 ( 写架构,非用架构 )
- 点击触发ajax重复提交表单,屡次连续点击致使Ajax重复提交
- 高中信息技术python讲义
- linux mq发送测试消息,MQ消息队列搭建命令及方法
- java ee字体_JavaEE——CSS字体样式
- php tipask yii 单点登录_Tipask问答系统 php版 v3.3.1 正式版
- zed相机拆机_TX1入门教程硬件篇-外接双目相机ZED
- 【C语言】位段(详解)
- 10余智慧项目建设初见成效 南岸用智慧城市开启智慧生活
- 无人机寻迹要两个单片机吗_基于OpenMV的循迹无人机设计
- 360度绩效评估中的6个关键点,尤其是第4个!
- Android手机投屏初探
- 红米android版本,红米note2安卓版本号是多少?红米note2版本介绍
- 使用libjpeg进行图片压缩
- unable to access ‘https://github.com/XXX.git/‘: LibreSSL SSL_read: error:02FFF03C:system library:fun
热门文章
- 考研词汇测试软件,考研有哪些好用的背单词APP神器
- 1月书单 2月新书预告 | 百万册畅销书全新续作来啦
- 第一部分 知己知彼
- “Project1.exe”(Win32): 已加载“C:\Windows\syswow64\ntdll.dll”。无法查找或打开 PDB 文件。 “Project1.exe”(Win32): 已加载
- c语言strtok用法详细解释
- calendar java起始于结束时间,java获取一天的开始时间和一天的结束时间
- 淘宝电商产品jQuery图片放大镜代码
- 索引服务器(全文索引)的使用
- mysql405错误_mysql - 在框架内php调用某个方法, nginx 报 405错误 Status Code:405 Method Not Allowed...
- 哥本哈根大学计算机科学,2020年哥本哈根大学有哪些优势专业