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ȎwwnȎ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Ȏflgä & 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àȎflgä |= 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
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ȎwwnȎ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Ȏflgä & 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àȎflgä |= 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