【海思Hi3520D开发笔记】移植EC20 GobiNet 驱动,编译烧写测试

环境:Ubuntu 12.04-64bit
硬件平台:Hi3520D_V100
内核版本:linux-3.0.y
关键词:Hi3520编译内核 移植EC20
摘要:介绍Hi3520 修改内核文件,制作内核镜像。使用EC20
参考资料:Quectel_LTE&5G_Linux_USB_Driver_User_Guide_V2.0.pdf

(一)修改内核配置文件
模块安装USB串行驱动程序后,设备文件为ttyUSB0,
ttyUSB1、ttyUSB2等将在/dev目录中创建。下面的章节展示了如何集成USB串行选项驱动程序到Linux操作系统
1、增加VID and PID信息
为了设备可以识别EC20等模块,需要将下面模块的VID和PID信息添加到 [KERNEL]/drivers/usb/serial/option.c(第506行)

static const struct usb_device_id option_ids[] = {
#if 1 //Added by Quectel
{ USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC20 R2.0/EC20 R2.1/EC25/EG25-G/EM05 */
{ USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21/EG21-G */
{ USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */
{ USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */
{ USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */
{ USB_DEVICE(0x2C7C, 0x0512) }, /* Quectel EG12/EM12/EG18 */
{ USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */
{ USB_DEVICE(0x2C7C, 0x0700) }, /* Quectel BG95/BG77/BG600L-M3/BC69 */
{ USB_DEVICE(0x2C7C, 0x0435) }, /* Quectel AG35 */
{ USB_DEVICE(0x2C7C, 0x0415) }, /* Quectel AG15 */
{ USB_DEVICE(0x2C7C, 0x0452) }, /* Quectel AG520R */
{ USB_DEVICE(0x2C7C, 0x0455) }, /* Quectel AG550R */
{ USB_DEVICE(0x2C7C, 0x0620) }, /* Quectel EG20 */
{ USB_DEVICE(0x2C7C, 0x0800) }, /* Quectel RG500Q/RM500Q/RG510Q/RM510Q */
#endif

修改后结果
在这里插入图片描述

2、添加空包机制
根据USB协议的要求,处理零数据包的机制需要通过在[KERNEL]/drivers/usb/serial/usb_wwan.c.(第484行)
添加以下语句来实现扩展传输

static struct urb *usb_wwan_setup_urb(struct usb_serial *serial, int endpoint,
int dir, void *ctx, char *buf, int len,void (*callback) (struct urb *))
{
……
usb_fill_bulk_urb(urb, serial->dev,
usb_sndbulkpipe(serial->dev, endpoint) | dir,
buf, len, callback, ctx);
#if 1 //Added by Quectel for zero packet
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;
}
#endif
return urb;
}

修改后结果
在这里插入图片描述

3、增加reset-resume机制
当MCU进入暂停/休眠状态时,部分USB主机控制器/USB hub会断电或被复位,在MCU退出挂起/休眠模式后,无法恢复USB设备。需要在[KERNEL]/drivers/usb/serial/usb-serial.c.(第53行)通过添加以下语句来启用reset-resume机制

/* Driver structure we register with the USB core */
static struct usb_driver usb_serial_driver = {
.name = "usbserial",
.probe = usb_serial_probe,
.disconnect = usb_serial_disconnect,
.suspend = usb_serial_suspend,
.resume = usb_serial_resume,
#if 1 //Added by Quectel
.reset_resume = usb_serial_resume,
#endif
.no_dynamic_id = 1,
.supports_autosuspend = 1,
}

修改后结果
在这里插入图片描述
4、使用MBIM, GobiNet or QMI_WWAN 驱动
如果需要MBIM、GobiNet或QMI_WWAN驱动程序,[KERNEL]/drivers/usb/serial/option.c.(第1264行)中添加以下语句以防止模块接口4从被用作一个USB串行设备

static int option_probe(struct usb_serial *serial, const struct usb_device_id *id) {
struct usb_wwan_intf_private *data;
……
#if 1
//Added by Quectel
//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;
}
}
#endif
/* Store device id so we can use it during attach. */
usb_set_serial_data(serial, (void *)id);
return 0;
}

修改后结果
在这里插入图片描述
(二)配置内核

//进入内核配置界面 
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

使能 CONFIG_USB_SERIAL_OPTION

[*] Device Drivers →
	[*] USB Support →
		[*] USB Serial Converter support →
			[*] USB driver for GSM and CDMA modems

在这里插入图片描述
(三)移植GobiNet 驱动
当模块中安装了GobiNet驱动程序后,将会有一个网络设备和一个QMI通道创建。网络设备被命名为ethX和QMI通道是/dev/qcqmiX.数据传输采用网络设备,数据传输采用QMI通道
QMI消息交互。
下面的章节介绍如何将GobiNet驱动程序集成到Linux操作系统中。
(1)将GobiNet驱动程序由Quectel以包含源代码的源文件的形式提供的源文件应该复制到文件[KERNEL]/drivers/net/usb/
(2)修改内核配置

//进入内核配置界面 
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

使能 CONFIG_USB_USBNET

[*] Device Drivers →
	-*- Network device support →
			USB Network Adapters →
				{*} Multi-purpose USB Networking Framework

在这里插入图片描述
(3)增加下面信息到文件中 [KERNEL]/drivers/net/usb/Makefile

obj-y += GobiNet.o
GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o

在这里插入图片描述
(四)移植QMI_WWAN 驱动(非必须)
(1)移远提供了qmi_wwan_q.c 源代码,将它拷贝到[KERNEL]/drivers/net/usb/
(2)修改内核配置

//进入内核配置界面 
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

使能 CONFIG_USB_USBNET

[*] Device Drivers →
	-*- Network device support →
			USB Network Adapters →
				{*} Multi-purpose USB Networking Framework
					<*> QMI_WWAN driver for Qualcomm MSM based 3G and LTE modems

(3) 增加下面信息到文件中[KERNEL]/drivers/net/usb/Makefile.

# must insert qmi_wwan_q.o before qmi_wwan.o
obj-${CONFIG_USB_NET_QMI_WWAN} += qmi_wwan_q.o
obj-${CONFIG_USB_NET_QMI_WWAN} += qmi_wwan.o

在这里插入图片描述
(五)重新编译内核,烧写内核
Hi3520 tftp烧写参考 另一篇博文:https://blog.csdn.net/u011539437/article/details/106897259

//编译内核
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- uImage
//拷贝编译好的内核到指定目录下
cp arch/arm/boot/uImage /mnt/

[附件]:
移远EC20 4G模组 在嵌入式linxu下驱动开发官方文档:https://download.csdn.net/download/u011539437/12669846

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MacianYuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值