移植EC20F 4G模块驱动基于Jetson-xavier

移植EC20F 4G模块驱动基于Jetson-xavier

Jetson-xavier上移植EC20F 4G模块驱动(linux驱动)

由于xavier模块上没有4G和wifi功能,如果要使用4G或wifi功能就要外接无线模块来实现了。这里分享一下如何让xavier通过4G模块实现拨号上网。

硬件及平台

开发环境、平台、4G模块:

  1. Jetson-AGX xavier 这是NVIDIA性能最强悍的一款ARM;
  2. 系统版本:JetPack4.3 - 对应的内核版本为R32.3.1;
  3. 4G模块:EC20;
    在这里插入图片描述

相关参考文档

  • 《Quectel_LTE&5G_Linux_USB_Driver_User_Guide_V2.0.pdf》
  • 《Quectel_WCDMA&LTE_Linux_USB_Driver_User_Guide_V1.9_Preliminary_20190325.pdf》

驱动适配

  • 修改内核源码文件 kernel-4.9/drivers/usb/serial/option.c
    在 option_ids[] 中添加 VID 和 PID
    USB_DEVICE(0x2c7c, 0x0125)
static const struct usb_device_id option_ids[] = {
  {USB_DEVICE(0x2c7c, 0x0125)},/*quectel EC20: add VID and PID*/
	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
  • 在 option_probe()中添加 如下代码段:
  /*quectel modules's interface 4 can be used as USB network device*/
  if(serial->dev->descriptor.idVendor == cpu_to_le16(0x2c7c)){
    //some interfaces can be used as USB Network device (ecm, rndis, mbim)
    if(serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff){
      return -ENODEV;
    }
    //interface 4 can be used as usb network device(qmi)
    else if(serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
      return -ENODEV;
  }
  /*quectel EC20: Enable USB Auto suspend*/
  if(serial->dev->descriptor.idVendor == cpu_to_le16(0x2c7c)){
    device_init_wakeup(&serial->dev->dev, 1);//enable usb remote wakeup
    pm_runtime_set_autosuspend_delay(&serial->dev->dev, 3000);//auto suspend
    usb_enable_autosuspend(serial->dev);
  }
  • 在option_1port_device中添加 如下:
.reset_resume      = usb_wwan_resume, /*quectel EC20: add reset resume*/
  • 修改文件kernel-4.9/drivers/usb/serial/usb_wwan.c 在 usb_wwan_setup_urb中添加如下代码段:
    /*quectel EC20: add the zero packet mechanism*/
    if(dir == USB_DIR_OUT){
    	struct usb_device_descriptor *desc = &serial->dev->descriptor;
    	if(desc->idVendor == cpu_to_le16(0x2c7c))
    		urb->transfer_flags |= URB_ZERO_PACKET;
    }
  • 复制GobiNet代码到 /net/usb目录下,并修改该目录下的makefile文件,添加如下:
    GobiNet获取
obj-m += GobiNet.o
GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o
  • 修改文件: arch/arm64/configs/tegra_defconfig 文件
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_OPTION=m 
CONFIG_USB_SERIAL_QUALCOMM=m 
CONFIG_USB_SERIAL_WWAN=m 

CONFIG_PPP=y
CONFIG_PPP_BSDCOMP=y
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_MPPE=y
CONFIG_PPPOLAC=y
CONFIG_PPPOPNS=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y

CONFIG_USB_USBNET=y
CONFIG_USB_NET_QMI_WWAN=m 

补充说明

GobiNet (版本为1.6)文件如下:.c .h文件
有不懂的问题可以联系我
到这里需要的修改的代码就完成了,接下来编译内核

编译内核

  • cd /kernel-4.3/kernel/kernel-4.9
  • TEGRA_KERNEL_OUT=~/kernelout43
  • export CROSS_COMPILE=~/tools/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
  • make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig
  • make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j4

将 .ko文件复制到指定文件夹下

sudo cp option.ko /lib/modules/4.9.140-tegra/kernel/drivers/usb/serial
sudo cp usb_wwan.ko /lib/modules/4.9.140-tegra/kernel/drivers/usb/serial
sudo cp qcserial.ko /lib/modules/4.9.140-tegra/kernel/drivers/usb/serial
sudo cp GobiNet.ko /lib/modules/4.9.140-tegra/kernel/drivers/net/usb

加载 .ko驱动模块

sudo depmod -a

加载后重启系统

sudo reboot

将quectel-CM拷贝到xavier上,编译生成可执行文件

编译此目录下的代码

在 /etc目录下新建 udhcpc文件夹

sudo mkdir -p /etc/udhcpc

并将 quectel-CM目录下的 default.script脚本 拷贝到 /etc/udhcpc目录下

sudo cp default.script /etc/udhcpc
sudo chmod 777 /etc/udhcpc/default.script

在这里插入图片描述
加载usbmon驱动模块

sudo modprobe usbmon

验证及测试

检查USB驱动情况
dmesg
在这里插入图片描述
查看 .ko 驱动模块加载情况
lsmod
在这里插入图片描述
在这里插入图片描述
使用串口工具连接ttyUSB2: 检测到了联通卡
在这里插入图片描述
使用GobiNet拨号上网 sudo ./quectel-CM -s ctnet &
自动为eth1分配IP 和 DNS
在这里插入图片描述
查看eth1网卡状态,已分配了ip dns
在这里插入图片描述
查看是否可上网 ping www.baidu.com
在这里插入图片描述
测试4G网络吞吐量 www.speedtest.net
在这里插入图片描述

总结说明

以上是4G模块linux驱动适配及测试过程,如有不清楚的地方可留言探讨交流,多多支持原创,感谢阅读和关注。

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值