Android系统外置3G网卡移植一.驱动部分移植:1.USB驱动部分:内核配置时,添加DeviceDrivers-USBsupport-USBSerialConvertersupportUSBdriverforGSMandCDMAmodems配置【这是3GUSBMODEM的驱动】。首先要能识别3G网卡设备并且正确转换工作模式:从usb-storage转换成usbserial【3Gusbmodem】。关于这部分,可以参考patch中kernel\drivers\usb\storage和kernel\drivers\usb\serial目录下的代码。2.3G模块的驱动option.ko的修改和编译:Patch中\kernel\drivers\usb\serial\option.c文件:添加所要驱动的3G网卡的VID和PID:比如SINCOMSE–189U:{USB_DEVICE(0X19F5,0X9901)},//SINCOM京昂W3GUBV-100:{USB_DEVICE(0X15A9,0X001C)}等。3.添加和修改PPPD拨号支持这部分请参考patch中\external\ppp目录:主要了chat拨号部分【chat.c】来完成解析拨号脚本文件,并发送相应的AT命令的功能。4.修改RIL层驱动【目前我们的版本没有启用RIL层向frameworks层提供的服务,这部分暂时可以不用替换】参考patch中\hardware\ril目录下的文件。RIL层主要实现frameworks层应用和底层modem硬件之间的通信功能。二.系统初始化过程中添加3G网卡服务:1.在系统初始rc文件:\device\telechips\tcc92xx-common\Init.rc中添加ppp服务部分脚本::########################cary#####################################serviceppp/system/bin/pppdcallgprsuserrootgroupsystemradiodisabledoneshot#################################################################【参数分析:第一行:“Service”类型关键字;“ppp”服务名;“/system/bin/pppd”可执行文件全路径名;“gprs”参数;指定启动pppd程序时调用gprs脚本文件;第二行:“disabled”表示在初始化过程中不直接启动该服务;第三行:“oneshot”表示在该服务被停止或退出后不自动重启该服务;】设置DNS服务器地址为广东电信DNS:###############################cary#######################################setpropnet.dns1202.96.128.86setpropnet.dns2220.192.32.103##########################################################################2.添加拨号脚本gprs:\system\core\rootdir\etc\ppp\peers\gprs如下connect'chat-vATATDT#777CONNECT'userCARDpasswordCARD/dev/ttyUSB2#sincomse189-u上网卡modem设备端口115200nodetachcrtsctsdebugusepeerdnsdefaultroute3.拷贝\system\core\rootdir\etc\ppp目录下的配置文件到系统的system\etc\ppp目录下;4.检测到ppp连接建立并成功获取IP地址和DNS地址后,设置系统属性供上层调用【\external\ppp\pppd\ipcp.c】;检测到ppp连接断开后,设置系统属性【\external\ppp\pppd\main.c】。三.Framework层添加3G网卡连接状态显示:1.添加查询和发送以太网卡连接状态的系统广播:例如:在文件\frameworks\base\services\java\com\android\server\BatteryService.java的update()方法中添加如下查询代码:2.接收3G网卡连接状态的系统广播并处理例如:在\frameworks\base\services\java\com\android\server\status\StatusBarPolicy.java文件原有的IntentFilter中添加上述两个ACTION过滤项:filter.addAction(Action_Start_PPP_Service);filter.addAction(Action_Stop_PPP_Service);在原有的已注册BroadcastReceiver中添加接收到上述两个ACTION的处理,比如更换icon;2010/09/01new///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////添加对其他上网卡支持:1.将编译好的VIAmodem驱动VIAUSBModem.ko拷贝到/system/lib/modules/目录下:请参考:\device\telechips\tcc92xx-common\Android.mk中PRODUCT_COPY_FILES+=\$(LOCAL_PATH)/VIAUSBModem.ko:system/lib/modules/VIAUSBModem.ko【待系统初始化时insmodVIAUSBModem驱动】;2.将GemtekEVDO上网卡对应的拨号脚本gprsVIA拷贝到:/etc/ppp/peers/目录下:请参考:\device\telechips\tcc92xx-common\Android.mk中$(LOCAL_PATH)/peers/gprsVIA:system/etc/ppp/peers/gprsVIA\3.在系统初始rc文件:\device\telechips\tcc92xx-common\Init.rc中添加服务脚本::###############GemtekEVDO################servicepppVIA/system/bin/pppdcallgprsVIAuserrootgroupsystemradiodisabledoneshot###############HUAWEIEC122ZTEAC580EVDO################servicepppHUAWEI/system/bin/pppdcallgprsHUAWEIuserrootgroupsystemradiodisabledoneshot###############ZTEWCDMAFM110################servicepppW110/system/bin/pppdcallgprsW110userrootgroupsystemradiodisabledoneshot###############WCDMAHUAWEIE180E1750################servicepppW180/system/bin/pppdcallgprsW180userrootgroupsystemradiodisabledoneshot4.在系统初始rc文件中添加自动加载VIAUSBModem驱动的脚本服务:servicedriver_viausb/etc/ppp/init-driveruserrootgroupradiocacheinetmisconeshot