3G移植(中兴MG3732和MC8640)

来源:互联网 发布:cmd网络测试命令 编辑:程序博客网 时间:2024/05/20 02:24

前几周一直在移植android4.0,这里呢,先把3G的移植过程详细记录下来,以便于在以后的工作中遇到类似问题可以很快的解决,也对其它在这块有困惑的人一个帮助。

首先,在移植3G的过程中遇到了很多小问题,比如说把所有的东西都加进去了之后,在发送AT+CSQ?指令的时候,一直返回99,99,这个情况就是没有信号的意思,但是一直是这样,检查了好久,原来是项目部给我装的整机没有装天线,没办法,拿过去让他们帮我装了一个外置的天线(因为机子之前已经装好了,拆的话比较麻烦)。接着呢,继续调试,这个时候发送CSQ?指令可以获取到正确的信号值了,但是界面上的信号格里面一直没有信号显示,在查看系统log里面一直显示获取到的信号长度不对,在查看了相关的代码后发现,结构体里面不光有WCDMA的信号参数,还有EVDO等等的,也就是说它处理的时候,必须使28个字节的数据,但是呢,之前已经说了CSQ?返回的是8字节的数据,所以可能是中间封装出现了错误,所以呢自己在尝试修改了处理的条件(也就是让它对8个字节的数据也进行处理),之后在android界面信号格里可以正确显示出信号强度,那这样的话我就觉得可能中兴给的RIL库可能就有问题了,在咨询了项目组长(我老大)之后,他说这个库是针对2.3的,不知道是不是这个问题,他让我等一下,问问中兴那边,结果过了两天,中兴那边回复了,那个库不能针对4.0的系统,重新给了4.0的RIL库,在把新给的库添加进去之后,终于可以正确显示了,但是点击拨号的时候回报错,提示“com.android.phone进程停止运行”,这个问题呢,是系统的一个bug,我会在另一篇博客中贴出来,这里呢,我就详细说一下怎么移植这个3G。

       首先呢,在使用模块和RIL库进行语音、短信、上网等操作之前,先要确保内核已经支持了USB设备驱动。如下图步骤:

接下来添加ppp协议,如下图所示:

接着在内核代码/driver/usb/serial/option.c这个文件中加入中兴3G模块的VID、PID,

这样的话可以在/dev目录下看到ttyUSB0、1、2、3这几个节点,ttyUSB0呢一般用于AT指令的发送和接受,完成拨号上网的功能。

        接下来,拷贝libztewcdma-ril.so(libzteevdo-ril.so)以及zterilPara到/system/lib/目录下面。

        确保/system/bin/目录下面有pppd和chat两个程序,并且具有执行权限,如果没有,那么下载ppp-2.4.4,下载好之后就是编译,步骤如下:

        1、执行./configure脚本产生Makefile等文件;

2、因为我的是android系统,就需要改变编译方式,需要静态编译;(因为 android c库使用的是Bionic库,不与GNU C库,ucLibc,或任何已知的Linux C库相兼容,所以编译时需要静态编译)

chat:   chat.o                $(CC) -o chat chat.o  -static        chat.o: chat.c                $(CC) -c $(CFLAGS) -o chat.o chat.c  -static用开发板的交叉编译工具链编译: make CC="你的交叉编译工具"

ppp-2.4.4/chat/chat      ppp-2.4.4/pppd/pppd  push到/system/bin/目录下面

        接下来添加ip-up到/system/etc/ppp/目录下面;

这一步,我们来修改文件的权限,system.img中下面文件的权限,其中多个文件需要root身份进行执行的权限。

chmod 0644 /system/lib/libztewcdma-ril.sochmod 0644 /system/lib/zterilParachown root  /system/bin/pppdchmod 4755 /system/bin/pppdchown root /system/bin/chatchmod 4755 /system/bin/chatchmod 755 /system/etc/ppp/ip-up
接下来修改系统初始化配置init.rc,修改原本的ril服务

service ril-daemon /system/bin/rildsocket rild stream 660 root radiosocket rild-debug stream 660 radio systemuser root group radio cache inet misc修改为:service ril-daemon /system/bin/rild -l /system/lib/libztewcdma-ril.so -d /dev/ttyUSB0socket rild stream 660 root radiosocket rild-debug stream 660 radio systemuser root group radio cache inet misc
接下来修改相应的设备读写权限,包括/dev/ttyUSB0~/dev/ttyUSB3,有时会包括/dev/ttyUSB4和/dev/ttyUSB5,因此我们这里讲所有的ttyUSB设备修改为radio用户可读写权限。其中,android2.2要修改相应的代码,android2.3以上版本只需要修改ueventd.rc文件,添加如下代码:

/dev/ttyUSB*      0660 radio radio

这里注意,上面的权限赋予操作不能再init.rc中进行。

       到这里,所有的基本上都做完了,现在编译、烧写、启动机子,起来之后,我是用海卓APN那个软件设置的APN,设置完之后就可以上网了。

到这里我们的3G拨号、上网等功能就实现了。写的比较仓促,里边可能不是很详细,以后我还会继续详细的分析这部分。


0 0