SIM7100在AM335X上移植

    有了前面的理论作为基础,这次移植sim7100到am335x上非常顺利, SIM7100只是一个例子,其实只要是高通方案的4G模块,估计移植过程都差不多,

  SIM7100是高通的方案,现在阶段 在linux上,有2种途径,Gobinet 和QMI-WWAN,我的am335x linux内核是3.2版本的,根据搜集到的文档,只有3.4之后的才能使用QMI-WWAN,或者我把am335x的内核升级到最新的,但升级内核的工作量也是相当大,这个板子即使调好了,公司也不一定用。

这时我找到一个官方文档《SIM7100 Linux NDIS user guide.pdf》,这上面介绍的方法,全是用QMI-WWAN,文档上说3.4之后的,直接配置menuconfig 把QMI配置进去;   3.4之前的需要把qmi_wwan.c.  cdc‐wdm.c两个文件添加到工程中,重新编译内核也可以使用QMI_WWAN的方法。

  本来我都准备使用Gobinet ,看到这个文档之后,我就犹豫了,既然是SIMCOM官方出品的,应该有可信度的,况且这种方法是现阶段最简单的方法,于是我就按文档上的方法一步一步进行。过程虽然有点坎坷,但还是弄出来了。

内核需要配置下面2项,由于对内核不熟悉,USB_WDM这个让我找好半天,原来WDM()无线驱动模型,就在ACM下面。

* CONFIG_USB_WDM=y 
* CONFIG_USB_USBNET=y 

    qmi_wwan.c. 还需要修改,直接编译就可以通过。 cdc‐wdm.c这个文件需要按编译提示的错误来修改,难度也一般,但是有个Linux知识相关的问题,我不熟悉,比葫芦画飘,也搞定了,

原版是

module_usb_driver(wdm_driver);

编译不通过,我找了个其它版本的cdc‐wdm.c文档,对比发现,这个是这个写的,

/* --- low level module stuff --- */
static int __init wdm_init(void)
{    
    int rv;    
    rv = usb_register(&wdm_driver);    
    return rv;
}
static void __exit wdm_exit(void)
{    
    usb_deregister(&wdm_driver);
}

module_init(wdm_init);
module_exit(wdm_exit);

于是我修改如上,居然编译很顺利的通过了,

#拨号上网,字符串内的符号需要转义

echo "AT\$QCRMCALL=1,1" > /dev/ttyUSB2

udhcpc -i wwan0 #获取ip

#通过ping www.baidu.com查看是否连接到互联网

一切正常。

你可能感兴趣的:(5G,linux,SIM7100)