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

本文详细介绍了在Jetson AGX Xavier上移植EC20 4G模块驱动的过程,包括修改内核源码、编译内核、加载驱动模块及测试验证等关键步骤。

移植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驱动适配及测试过程,如有不清楚的地方可留言探讨交流,多多支持原创,感谢阅读和关注。

提供的引用内容未涉及JETSON - XAVIER - NX - DEV - KIT开发图像识别功能的具体操作步骤,不过一般而言,使用JETSON - XAVIER - NX - DEV - KIT开发图像识别功能可按以下通用步骤进行: ### 硬件准备与系统烧录 选择合适的存储设备,如SD卡,对Jetson Xavier NX Developer Kit进行系统烧录与环境配置。可参考相关全英环境的教程,防止出现开发错误。烧录过程需注意平台名称,使用`sudo ./flash.sh [options] <target_board> <rootdev>`命令时,要使用固定的平台名称,如“jetson-xavier-nx-devkit-emmc” ,避免输入错误名称导致报错 [^1][^3]。 ### 环境配置 设置全英环境,防止开发错误。配置国内源,如清华源(ARM版本),以加快软件包的下载速度。具体操作包括备份原文件、拷贝清华源和更新配置,命令如下: ```bash sudo mv /etc/apt/sources.list.d/nvidia-l4t-apt-source.list /etc/apt/sources.list.d/nvidia-l4t-apt-source.list.bak sudo vim /etc/apt/sources.list.d/nvidia-l4t-apt-source.list sudo apt-get update sudo apt-get upgrade ``` ### 安装必要的软件库和工具 安装深度学习框架,如TensorFlow、PyTorch等,以及计算机视觉库,如OpenCV。以使用`apt`安装OpenCV为例: ```bash sudo apt-get install libopencv-dev python3-opencv ``` ### 数据集准备 收集与图像识别任务相关的数据集,对数据集进行标注,划分训练集、验证集和测试集。例如,使用标注工具对图像中的目标进行标注,生成标注文件。 ### 模型选择与训练 选择合适的图像识别模型,如ResNet、YOLO等。使用准备好的数据集对模型进行训练。以下是一个使用PyTorch训练简单图像分类模型的示例代码: ```python import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 数据预处理 transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) # 加载数据集 train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True) # 定义简单的神经网络模型 class SimpleNet(nn.Module): def __init__(self): super(SimpleNet, self).__init__() self.fc1 = nn.Linear(28 * 28, 128) self.fc2 = nn.Linear(128, 10) def forward(self, x): x = x.view(-1, 28 * 28) x = torch.relu(self.fc1(x)) x = self.fc2(x) return x model = SimpleNet() criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.01) # 训练模型 for epoch in range(5): running_loss = 0.0 for i, data in enumerate(train_loader, 0): inputs, labels = data optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() print(f'Epoch {epoch + 1}, Loss: {running_loss / len(train_loader)}') ``` ### 模型部署 将训练好的模型部署到Jetson Xavier NX Dev Kit上,进行实时图像识别。可以使用TensorRT对模型进行优化,提高推理速度。 ### 测试与优化 使用测试集对部署的模型进行测试,评估模型的性能。根据测试结果对模型进行优化,如调整模型参数、增加数据集等。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值