高通芯片的模组都一般都不是免驱的,使用GObiNet拨号的比较多。
要想使用高通芯片的模组拨号一般有三块内容要移植。
串口驱动
一般只需要在Linux内核中添加厂商ID和产品ID就行了,内核中有现场的驱动程序,添加好后,就可以在/dev目录下生成ttyUSB0~ttyUSB3四个串口。
GobiNet驱动
在GobiNet驱动中会挂载5G网口的发送和接收函数,还会创建qmi消息通道,也是在/dev目录下生成一个qmi设备节点。GobiNet相当于起了一个QMI消息代理,用来封装QMI消息。
拨号程序
拨号程序是用来控制拨号的,使用qmi消息通信。注网是不需要控制的,只要cfun状态为1,模组就会自动注网,不需要应用层控制。而我们发送cfun指令和设置网络参数都是通过ttyUSB串口发送at指令做设置的。拨号程序最主要的功能是监控模组侧的注网状态,一旦注网成功就发起拨号。
QMI_WWAN/GOBINET
QMI_WWAN、GOBINET是在Linux上实现NDIS拨号的驱动的名字。
QMI_WWAN:是高通在Linux下提供的类似ECM的框架,由于高通的行业地位和其产品的市场占有率,该框架使用相当广泛。
GOBINET:在版本低于3.4的Linux内核中,没有添加QMI_WWAN驱动,于是高通用该驱动来完成拨号,后来内核中支持QMI_WWAN,就不再需要单独提供驱动了,GOBINET就不再需要了。
Gobinet QMI-WWAN作用是一样的,都是Linux上高通模块的驱动程序。他们的分界线就是内核版本。linux3.4之前高通的QMI-WWAN并没有添加到linux内核中,所以高通就开发了Gobinet软件包,包括4G驱动与4G拨号程序。但是linux3.4内核已经把QMI添加到内核中了,所以使用高通方案的4G模块就不需要这么麻烦了,只需要在menuconfig的时候添加如下配置就可以了,大大简化了4G模块的使用。
这两种拨号方式最主要的差别是qmi消息通道,qmi_wwan的qmi通道是一个网络设备,类似ncm拨号。Gobinet的qmi消息通道是一个字符设备。
GobiNet驱动源码分析
结构体定义: