Atlas 200外设驱动开发和调试指南_ 5G 模组
收藏回复举报
 Atlas 200外设驱动开发和调试指南_ 5G 模组
发表于2023-04-15 18:12:18
0 查看

Atlas 200外设驱动开发和调试指南_ 5G 模组 

调试基于Atlas 200 参考板驱动包进行重构调试,调试方法请参考https://support.huawei.com/enterprise/zh/doc/EDOC1100193743/3db58fa7 

 

1 芯片型号 

    5G模组测试时使用的是Quectel RM500Q模组。 

2 固件烧录 

    是否需要烧录固件:否 

3 内核配置 

    支持5G模组,需要使能如下内核配置,内核配置方法请参考源码编译。 

    Device Drivers ---> 

    [*] USB support ---> 

    <*> USB Serial Converter support ---> 

    <*> USB driver for GSM and CDMA modems 

    Atlas 200 外设驱动开发和调试指南 

    Atlas 200 外设驱动开发和调试指南 9 5G 模组 

4 驱动调试 

    通过厂家获取相关指导文档,驱动移植参考如下: 

    在文件kernel/linux-4.19/drivers/usb/serial/option.c中添加代码: 

    模块的VID和PID根据芯片型号在手册中查询获取,当前使用RM500Q,VID和PID如下,在option.c中根据实际数据进行修改配置。 

    VID:0x2c7c 

    PID:0x0800 

    ȅšžfinž QUECTEL_VENDOR_ID 0x2c7c 

    /* These Quectel products use Quectel's vendor ID */ 

    ȅšžfinž QUECTEL_PRODUCT_EC21 0x0121 

    ȅšžfinž QUECTEL_PRODUCT_EC25 0x0125 

    ȅšžfinž QUECTEL_PRODUCT_BG96 0x0296 

    ȅšžfinž QUECTEL_PRODUCT_EP06 0x0306 

    ȅšžfinž QUECTEL_PRODUCT_EM12 0x0512 

    ȅšžfiʞ QUECTEL_PRODUCT_RM500 0x0800 

    ...... 

    static struct usb_serial_driver option_1port_device = { 

    .driver = { 

    .owner = THIS_MODULE, 

    .name = "option1", 

    }, 

    .description = "GSM modem (1-port)", 

    .id_table = option_ids, 

    .num_ports = 1, 

    .probe = option_probe, 

    .open = usb_wwan_open, 

    .close = usb_wwan_close, 

    .dtr_rts = usb_wwan_dtr_rts, 

    .write = usb_wwan_write, 

    .write_room = usb_wwan_write_room, 

    ȇc¯†àäȎ²nȎbñčžà = ñäbȎww†nȎc¯†àäȎ²nȎbñčžàȀ 

    .tiocmget = usb_wwan_tiocmget, 

    Atlas 200 外设驱动开发和调试指南 

    Atlas 200 外设驱动开发和调试指南 9 5G 模组 

    .tiocmset = usb_wwan_tiocmset, 

    .ioctl = usb_wwan_ioctl, 

    .attach = option_attach, 

    .release = option_release, 

    .port_probe = usb_wwan_port_probe, 

    .port_remove = usb_wwan_port_remove, 

    .read_int_callback = option_instat_callback, 

    #ifdef CONFIG_PM 

    .suspend = usb_wwan_suspend, 

    .resume = usb_wwan_resume, 

    .reset_resume = usb_wwan_resume, 

    #endif 

    }; 

    ...... 

    /* 

    * Allow matching on bNumEndpoints for devices whose interface numbers 

    * can change (e.g. Quectel EP06). 

    */ 

    if (šžv²cžȎfl†gä & NUMEP2 && iface_desc->bNumEndpoints != 2) 

    return -ENODEV; 

    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; 

    } 

    } 

    在文件kernel/linux-4.19/drivers/usb/serial/usb_wwan.c中添加代码: 

    static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port, 

    Atlas 200 外设驱动开发和调试指南 

    Atlas 200 外设驱动开发和调试指南 9 5G 模组 

    int endpoint, 

    int dir, void *ctx, char *buf, int len, 

    void (*callback) (struct urb *)) 

    { 

    struct usb_serial *serial = port->serial; 

    struct urb *urb; 

    urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */ 

    if (!urb) 

    return NULL; 

    ñäbȎfiÃÃȎbñÃÀȎñàb(ñàbȀ serial->dev, 

    usb_sndbulkpipe(serial->dev, endpoint) | dir, 

    buf, len, callback, ctx); 

    if (dir == USB_DIR_OUT) { 

    struct usb_device_descriptor *desc = &serial->dev->descriptor; 

    if (desc->idVendor == cpu_to_le16(0x2C7C)) 

    ñàbȝɌìà†ÊäfžàȎfl†gä |= URB_ZERO_PACKET; 

    } 

    return urb; 

    } 

    当5G模组成功加载USB转串口option驱动后,Linux会在/dev目录下创建多个名称诸如 

    ttyUSB0、ttyUSB1、ttyUSB2等串口设备文件。 

5 测试工具 

    使用AT命令进行拨号测试,拨号命令请查阅AT命令手册(找厂家获取)或者直接找厂 

    家获取相关的拨号命令,测试前请保证5G模组插入正常,且配置好天线和插入sim卡。 

    ● 设置读取5G串口输出 

    cat /dev/ttyUSB2 & 

    ● 设置ECM拨号方式 

    echo -e "AT+QCFG=\"usbnet\",1\r\n" > /dev/ttyUSB2 

    执行以上命令后可从串口得到命令执行结果,执行OK后重启系统自动拨号。 

    系统启动后,可使用AT命令查询拨号地址IP,第一行存在IP即拨号成功。 

    ● 配置网卡信息 

    拨号成功后,使用²fcÑnfig -a查询5G网卡信息,当前显示的网卡名为 

    enp133s0u3i4。 

    使用dhclient命令通过dhcp自动分配IP给网卡enp133s0u3i4。 

    Atlas 200 外设驱动开发和调试指南 

    Atlas 200 外设驱动开发和调试指南 9 5G 模组 

    dhclient enp133s0u3i4 

    执行以上命令后,发现网卡enp133s0u3i4配置好IP:192.168.225.60,根据实际分配 

    的IP进行测试。 

    ● 测试网络是否可用 

    执行如下命令测试是否可以访问外部网络 

    ping www.baidu.com 

    测试后发现无法ping通,需要进行如下网络相关配置后再进行测试。 

    配置nameserver 

    在/etc/resolv.conf配置文件中增加 

    nameserver 144.144.144.144 

    nameserver 8.8.8.8 

    增加路由,根据IP配置(当前的IP是192.168.225.60) 

    route add default gw 192.168.225.1 

    然后进行网络访问测试,发现可以正常访问网络了。 

    ping www.baidu.com 

我要发帖子