Android pppd_gprs脚本启动过程
来源:互联网 发布:淘宝上买双肩包的店铺 编辑:程序博客网 时间:2024/04/24 14:31
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");
看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
- disabled
- 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来监控数据网络数据的状态。
转自:http://blog.csdn.net/yinlijun2004/article/details/7007046
- Android pppd_gprs脚本启动过程
- Android pppd_gprs脚本启动过程
- Android pppd_gprs脚本启动过程
- Android pppd_gprs脚本启动过程
- android启动过程
- Android 启动过程
- Android 启动过程汇总
- android 启动过程 [ZZ]
- [转]android启动过程
- Android的启动过程
- Android 启动过程总结
- android 启动过程
- Android 启动过程总结
- 1. Android启动过程
- Android启动过程
- Android 开机启动过程
- Android 启动过程
- Android 启动过程
- Linux 目录结构
- 写在博客的序言
- 马无夜草不肥:程序员做业余项目的重要性
- iphone ios HTTP Live Streaming
- Android Application Development, 1st Edition
- Android pppd_gprs脚本启动过程
- windgb,sos,adplus,tinyget常用命令
- 在C#中使用代理的方式触发事件 .
- thinking in pushlet
- .NET中的设计模式五:观察者模式 .
- 微软ASP.NET站点部署指南(7):生产环境部署
- ubuntu翻译软件安装
- android 个人记账工具 OnMyMeans 源码地址
- 关于使用ImageMagick和Tesseract进行简单数字图像识别