T31开发笔记:EC200T-CN 4G模块调试

若该文为原创文章,转载请注明原文出处 

一、硬件和开发环境

1、硬件:T31X+SC5235 + EC200T-CN

2、开发环境: ubuntu16.04-64bit

3、编译器:mips-gcc540-glibc222-32bit-r3.3.0.tar.gz

注:板子和4G模块某淘上淘的,uboot和内核是自己裁剪移植的,没有移植wifi,所以USB接口未使用; EC200T-CN使用的是USB接口,电源外供5V,注意4G模块电源。

二、内核文件修改、配置及编译

1、内核中需要修改的代码

主要修改下面四个文件的代码:

drivers/net/usb/qmi_wwan.c

drivers/usb/serial/option.c

drivers/usb/serial/qcserial.c

drivers/usb/serial/usb_wwan.c

A、  修改drivers/net/usb/qmi_wwan.c代码:

diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 5645921..f8f0020 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -614,7 +614,7 @@ static const struct usb_device_id products[] = {
{QMI_GOBI_DEVICE(0x05c6, 0x9225)}, /* Sony Gobi 2000 Modemdevice (N0279, VU730) */
{QMI_GOBI_DEVICE(0x05c6, 0x9245)}, /* Samsung Gobi 2000 Modemdevice (VL176) */
{QMI_GOBI_DEVICE(0x03f0, 0x251d)}, /* HP Gobi 2000 Modemdevice (VP412) */
- {QMI_GOBI_DEVICE(0x05c6, 0x9215)}, /* Acer Gobi 2000 Modemdevice (VP413) */
+// {QMI_GOBI_DEVICE(0x05c6, 0x9215)}, /* Acer Gobi 2000 Modemdevice (VP413) */
{QMI_GOBI_DEVICE(0x05c6, 0x9265)}, /* Asus Gobi 2000 Modemdevice (VR305) */
{QMI_GOBI_DEVICE(0x05c6, 0x9235)}, /* Top Global Gobi 2000Modem device (VR306) */
{QMI_GOBI_DEVICE(0x05c6, 0x9275)}, /* iRex Technologies Gobi2000 Modem device (VR307) *}

B、 drivers/usb/serial/option.c

--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -530,6 +530,22 @@ static const struct option_blacklist_info
telit_le920_blacklist = {
};
static const struct usb_device_id option_ids[] = {
+#if 1 //Added by Quectel
+ { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
+ { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
+ { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25 */
+ { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
+ { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
+ { USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */
+ { USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */
+ { USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */
+ { USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */
+ { USB_DEVICE(0x2C7C, 0x0435) }, /* Quectel AG35 */
+ { USB_DEVICE(0x2C7C, 0x0512) }, /* Quectel EG12/EG18 */
+ { USB_DEVICE(0x2C7C, 0x6026) }, /* Quectel EC200 */
+ { USB_DEVICE(0x2C7C, 0x6120) }, /* Quectel UC200 */
+ { USB_DEVICE(0x2C7C, 0x6000) }, /* Quectel EC200/UC200 */
+#endif
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
@@ -1377,6 +1393,9 @@ static struct usb_serial_driver
option_1port_device = {
#ifdef CONFIG_PM
.suspend = usb_wwan_suspend,
.resume = usb_wwan_resume,
+#if 1 //add by Quectel
+ .reset_resume = usb_wwan_resume,
+#endif
#endif
};
@@ -1421,6 +1440,27 @@ static int option_probe(struct usb_serial
*serial,
&serial->interface->cur_altsetting->desc;
struct usb_device_descriptor *dev_desc =
&serial->dev->descriptor;
+#if 1 //Added by Quectel
+ //Quectel UC20's interface 4 can be used as USB Network device
+ if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) &&
serial->dev->descriptor.idProduct ==
+ cpu_to_le16(0x9003) &&
serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
+ return -ENODEV;
+ //Quectel EC20's interface 4 can be used as USB Network device
+ if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) &&
serial->dev->descriptor.idProduct ==
+ cpu_to_le16(0x9215) &&
serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
+ return -ENODEV;
+ if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {
+ __u16 idProduct =
le16_to_cpu(serial->dev->descriptor.idProduct);
+
+ //Quectel EC200&UC200's interface 0 can be used as USB
Network device (ecm, rndis)
+ if
(serial->interface->cur_altsetting->desc.bInterfaceClass != 0xFF)
+ return -ENODEV;
+ //Quectel
EC25&EC21&EG91&EG95&EG06&EP06&EM06&BG96&AG35&EG12&EG18's interface 4 can be
used as USB network device (qmi,ecm,mbim)
+ if ((idProduct != 0x6026 && idProduct != 0x6126) &&
serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
+ return -ENODEV;
+ }
+#endif
+
/* Never bind to the CD-Rom emulation interface */
if (iface_desc->bInterfaceClass == 0x08)
return -ENODEV;

C、 drivers/usb/serial/qcserial.c 
 

--- a/drivers/usb/serial/qcserial.c
+++ b/drivers/usb/serial/qcserial.c
@@ -53,7 +53,7 @@ static const struct usb_device_id id_table[] = {
{DEVICE_G1K(0x05c6, 0x9202)}, /* Generic Gobi Modem device */
{DEVICE_G1K(0x05c6, 0x9203)}, /* Generic Gobi Modem device */
{DEVICE_G1K(0x05c6, 0x9222)}, /* Generic Gobi Modem device */
- {DEVICE_G1K(0x05c6, 0x9008)}, /* Generic Gobi QDL device */
+// {DEVICE_G1K(0x05c6, 0x9008)}, /* Generic Gobi QDL device */
{DEVICE_G1K(0x05c6, 0x9009)}, /* Generic Gobi Modem device */
{DEVICE_G1K(0x05c6, 0x9201)}, /* Generic Gobi QDL device */
{DEVICE_G1K(0x05c6, 0x9221)}, /* Generic Gobi QDL device */

D、 drivers/usb/serial/usb_wwan.c
 

--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -456,8 +456,22 @@ static struct urb *usb_wwan_setup_urb(struct
usb_serial_port *port,
/* Fill URB using supplied data. */
usb_fill_bulk_urb(urb, serial->dev,
- usb_sndbulkpipe(serial->dev, endpoint) | dir,
- buf, len, callback, ctx);
+ 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(0x05C6) &&
desc->idProduct == cpu_to_le16(0x9090))
+ urb->transfer_flags |= URB_ZERO_PACKET;
+ if (desc->idVendor == cpu_to_le16(0x05C6) &&
desc->idProduct == cpu_to_le16(0x9003))
+ urb->transfer_flags |= URB_ZERO_PACKET;
+ if (desc->idVendor == cpu_to_le16(0x05C6) &&
desc->idProduct == cpu_to_le16(0x9215))
+ urb->transfer_flags |= URB_ZERO_PACKET;
+ if (desc->idVendor == cpu_to_le16(0x2C7C))
+ urb->transfer_flags |= URB_ZERO_PACKET;
+ }
+#endif
return urb;
}

2、内核配置

在终端执行 make menuconfig, 开始配置内核:

A、 配置 ppp

配置路径如下:
Device Drivers ---> Network device support --->
PPP (point-to-point protocol) support
PPP BSD-Compress compression
PPP Deflate compression PPP filtering
PPP MPPE compression (encryption) PPP multilink support
PPP over Ethernet
PPP support for async serial ports
PPP support for sync tty ports

B、配置支持USBNET 

配置路径如下:
Device Drivers ---> Network device support --->
USB Network Adapters --->
Multi-purpose USB Networking Framework

C、使能 USB 串口 GSM、CDMA 驱动

配置路径如下:
Device Drivers ---> USB support --->
USB Serial Converter support --->
USB driver for GSM and CDMA modems

 配置完成后,重新编译内核,然后使用新的内核启动开发板。如果配置成功开发板启动后会有如下信息打印:

 三、PPP  软件包编译

A、ppp-2.4.4.tar.gz编译

1、拷贝 ppp-2.4.4.tar.gz 到 Ubuntu 下,然后执行下面的命令解压:
tar -xvf ppp-2.4.4.tar.gz
解压完成得到 ppp-2.4.4 目录,进入 ppp-2.4.4 目录如图 所示:

2、使用 configure 进行配置,命令如下:
./configure
结果如图 所示:


配置完成后,使用下面的命令进行编译:
make CC=mips-linux-gnu-gcc
“CC=mips-linux-gnu”指定编译器,和开发板内核使用同一个编译器。

编译完成后,分别在 chat、pppd、pppdump、pppstats 四个目录下生成 chat、pppd、pppdump、pppstats可执行文件。

把可执行文件全部拷贝到开发板的bin目录 下。

B、自动ppp拨号

使用文件为linux-ppp-scripts_v1.2.zip,解压后获取的文件如下:

在开发板下新建/etc/ppp/peers目录:        

拷贝 quectel-chat-connect、quectel-chat-disconnect、quectel-ppp、quectel-ppp-kill 到 /etc/ppp/peers 目录下。
拷贝ip-up文到/etc/ppp目录下,请确保该文件在你的系统里有可执行权限。

修改串口:

需要修改串口,修改文件 quectel-ppp 里的串口,默认文件是ttyUSB3,修改成ttyUSB2

其他文件未修改,linux-ppp-scripts_v1.2.zip文件是购买EC200T-CN模块厂家给的驱动,网上可自行下载。

C、拨号测试:

启动 ppp 拨号:
quectel-pppd.sh &

输出信息跟方案一输出一样,同样会生成/etc/ppp/resolv.conf文件,并获得IP地址:

D、挂断拨号

quectel-ppp-kill 用来挂断拨号的,pppd必须被正常的挂断,否则可能会导致你下次ppp拨号失败。

使用下面方式来调用这个脚本

./quectel-ppp-kill 

注:
在进行拨号之前一定要确保没有默认网关,如果已经设置了其他网卡的默认网关了,则4G模块没法正常上网,需要删除原来的默认网关,现以网卡eth0为例:

route del default
route del -host 255.255.255.255 dev eth0

如果去掉默认网关,可以直接ping www.baidu.com

四、上电自启动ppp拨号上网

在/etc目录下新建ec200t.sh
内容如下:

ls /dev/ |grep ttyUSB
if [ "$?" == "0" ]; then
        echo "4g init ..."
        cd /etc/ppp/peers/
        pppd call quectel-ppp &
fi

修改ec200t.sh权限 

chmod +x ec200t.sh

修改/etc/init.d/rcS,增加上电就自启动ppp拨号上网:

./etc/ec200t.sh

五、结束:

移植过程还算顺利,在测试的时候卡没有放对,插反了,在此感谢模块厂家,也感谢网友。

移植所使用的文件及测试下载地址:君正T31EC200T-CN调试-Linux文档类资源-CSDN下载

主要参考的博文:

Linux下EC20实现ppp拨号_Ahren.zhao的博客-CSDN博客_ppp拨号

如何使用4G模块实现上网功能 - 嵌入式学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛!

如有侵权,请及时联系博主删除,VX:18750903063

### 回答1: T31 Tiziano ISP动态调试工具是一款专业的嵌入式系统调试工具,旨在帮助开发人员在嵌入式系统开发过程中进行高效、准确的调试,提高开发效率。该工具具有多种功能和使用方法,下面介绍其中的几种常见的使用方法。 1、代码调试功能:利用T31 Tiziano ISP可以对嵌入式系统中的应用程序进行断点调试,实时监测程序的运行状态,可以帮助开发人员快速定位问题并进行解决。 2、性能监测功能:该工具可以对嵌入式系统中的性能参数进行实时监测和记录,例如CPU使用率、内存使用量等,可以帮助开发人员了解系统运行状态,及时调优系统性能。 3、外设调试功能:T31 Tiziano ISP支持对嵌入式系统中的外设进行调试,包括串口、网络等外设,可以快速定位外设出现的问题。 4、协议分析功能:该工具还支持各种嵌入式协议的分析和解码,包括CAN、SPI、I2C、UART等协议,可以帮助开发人员诊断协议相关的问题。 总之,T31 Tiziano ISP动态调试工具拥有丰富的功能和灵活的使用方法,可以满足嵌入式系统开发中的各种调试需求,是一款值得推荐的工具。开发人员可以根据自己的需求选择合适的使用方法,提高开发效率和代码质量。 ### 回答2: T31 Tiziano ISP动态调试工具是一款针对图像处理器的调试工具,可以在调试过程中对图像进行实时显示和操作。使用该工具需要先将目标机器和调试工具连接,然后进行如下步骤: 1. 打开T31 Tiziano ISP动态调试工具,选择“连接”,输入目标机器的IP地址和连接端口,点击“连接”按钮连接目标机器。 2. 在“配置”选项中设置所需的图像分辨率、色彩空间等参数。 3. 选择“调试”选项卡,在左侧的“输入”窗口中选择所需的图像输入源,可以是相机、视频流等。 4. 在右侧的“输出”窗口中,选择所需的图像输出源,可以是显示器、文件输出等。 5. 在调试过程中,可以使用工具栏上的各种调试工具,例如图像放大、旋转、裁剪等,并可以实时查看调试结果。 6. 调试结束后,可以保存调试过程中的图像和参数等信息。 总之,T31 Tiziano ISP动态调试工具是一款性能强大、操作简单的图像处理调试工具,适用于图像算法调试和优化等方面。 ### 回答3: T31 Tiziano ISP动态调试工具是一种用于数字视频信号处理和图像算法开发的高性能工具。使用该工具可以快速定位和解决数字视频信号处理中的问题。以下是使用T31 Tiziano ISP动态调试工具的方法: 1.安装工具:首先,从官方网站下载最新版本的工具,并按照说明进行安装。 2.打开工具:启动工具,打开需要调试的图像文件。 3.设置调试参数:在工具栏中选择ISP调试模式,然后进入ISP调试参数设置,选择相应的调试参数,例如图像格式、分辨率、图像区域等。 4.调试功能:在调试功能栏中选择需要调试的功能,例如白平衡、色彩增强等。然后进行相应的参数设置,例如色相、亮度、对比度等。 5.图像分析:在图像分析栏中选择需要分析的图像,例如YUV、RGB等格式。然后进行相应的像素值和统计分析。 6.保存数据:将调试结果保存到相应的文件中,例如XML格式文件。 7.反馈结果:将调试结果反馈给开发人员,帮助开发优化相应的图像算法。 总之,T31 Tiziano ISP动态调试工具可以帮助用户快速定位和解决数字视频信号处理中的问题。通过选择相应的调试参数、调试功能和图像分析,用户可以快速优化相应的图像算法,并获得更好的图像处理效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

殷忆枫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值