A40I 平台Android7.1 系统程序 -4G EC200T

 A40I 平台Android7.1 系统程序 -4G EC200T

(1)  a40_p1.mk文件修改

增加copy配置:

#EC200

PRODUCT_COPY_FILES += \

         device/softwinner/a40-p1/r2ril/ec200/ip-down:system/etc/ppp/ip-down \

         device/softwinner/a40-p1/r2ril/ec200/ip-up:system/etc/ppp/ip-up \

         device/softwinner/a40-p1/r2ril/ec200/chat:system/bin/chat \

         device/softwinner/a40-p1/r2ril/ec200/libreference-ril.so:system/lib/libreference-ril.so

说明:将EC200需要的文件libreference-ril.so,ip-up,ip-down,chat四个文件拷贝到新建文件ec200下,并通过mk文件拷贝到system对应目录下。

A40I默认系统程序采用3G模式,这里需要修改配置:

#BOARD_MODEL_TYPE := usb_modeswitch

BOARD_MODEL_TYPE := r2_4g

将原来的usb_modeswitch注释掉,开启r2_4g。

 

(2)修改文件目录

lichee/linux-3.10/drivers/usb/serial/option.c

增加内容:

static const struct usb_device_id option_ids[] = {

         { USB_DEVICE(0x2C7C, 0x6026) },/*Quectel EC200T*/

增加源码:

static int option_probe(struct usb_serial *serial,

                            const struct usb_device_id *id)

{

         struct usb_interface_descriptor *iface_desc =

                                     &serial->interface->cur_altsetting->desc;

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

 

#if 1  //add for EC20

         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;

}       

 

#endif

(3)修改目录文件:

若linux kernel >3.4 则需要修改]/drivers/usb/serial/option.c

static struct usb_serial_driver option_1port_device = {

#ifdef CONFIG_PM

         .suspend           = usb_wwan_suspend,

         .resume            = usb_wwan_resume,

#endif

//add by hp for EC200T

         .reset_resume      = usb_wwan_resume,

修改目录文件lichee/linux-3.10//drivers/usb/serial/usb-serial.c

/* 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   //add by hp for EC200T

         .reset_resume = usb_serial_resume,

#endif

         .no_dynamic_id =    1,

         .supports_autosuspend =        1,

};

 

(4)文件目录:drivers/usb/serial/qcserial.c

删除程序:

static const struct usb_device_id id_table[] = {

//{DEVICE_G1K(0x05c6, 0x9008)},  /* Generic Gobi QDL device */

//{USB_DEVICE(0x05c6, 0x9215)},  /* Acer Gobi 2000 Modem device (VP413) */

 

(5)文件目录:drivers/usb/serial/usb_wwan.c

增加:

static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,

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

                                           void (*callback) (struct urb *))

{

/* Fill URB using supplied data. */

         usb_fill_bulk_urb(urb, serial->dev,

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

                              buf, len, callback, ctx);

#if 1   //Add by hp 20191216

         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;

}

(6)修改目录

Android_src)/system/core/rootdir/ueventd.rc

# CDMA radio interface MUX

/dev/ts0710mux*           0640   radio      radio

/dev/ppp                  0660   radio      v*n

/dev/ttyUSB*              0660   radio           radio

/dev/cdc-wdm*             0660   radio            radio

/dev/qcqmi*               0660   radio             radio

/dev/cdc-acm*             0660   radio             radio

 

(7)修改 :make menuconfig

[*] Device Drivers →

[*] USB Support →

[*] USB Serial Converter support →

[*] USB driver for GSM and CDMA modems

(8)修改 :make menuconfig

[*] Device Drivers →

[*] Network device support  --->

 A40I 平台Android7.1 系统程序 -4G EC200T

USB Network Adapters  --->

 A40I 平台Android7.1 系统程序 -4G EC200T

(9)文件目录android/device/softwinner/a40-common/init.sun8iw11p1.rc

# ril related services  hp modify for EC200 20191223

service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so 

         class main

         socket rild stream 660 root radio

         socket rild-debug stream 660 radio system

         user root

         group radio cache inet misc audio sdcard_rw log

 

三 配置功能验证

(1)驱动验证

驱动加载成功后,log显示如下图 A40I 平台Android7.1 系统程序 -4G EC200T

 

配置成功后,用命令:ls /dev/ttyUSB*,可以看到设备/dev目录下面有USB0,USB1(AT),USB2(PPP)三个USB设备。

(2)lsusb 查看网络设备

 A40I 平台Android7.1 系统程序 -4G EC200T

网络设备ID 2C7C,说明EC200设备已经加载成功。

 

(3)AT指令验证

# ls -la /dev/ttyUSB*ls -la

/dev/ttyUSB*crwxrwxrwx system   system   188,   0 1970-01-01 08:00 ttyUSB0crwxrwxrwx system   system   188,   1 1970-01-01 08:00 ttyUSB1crwxrwxrwx system   system   188,   2 2018-04-19 19:10 ttyUSB2crwxrwxrwx system   system   188,   3 2018-04-19 19:10 t

于是手动向EC200发 at 指令试试看 打开一个 终端编号A,

 # cat /dev/ttyUSB1

用另外一个终端向ttyUSB1发命令 echo -en "AT\r\n" > /dev/ttyUSB1

可以在终端A上,看到OK响应信息。

若是切换网络:

执行命令:echo -en "AT+QCFG="usbnet",3" > /dev/ttyUSB1 这样配置ECM网卡;配置后,与SR9900冲突,二者只能选择一个。

需要配置为

echo -en "AT+QCFG="usbnet",1\r\n" > /dev/ttyUSB1 这样配置,就不与SR9900冲突,两个网口都可以用了。

附:查询当前模式
cat /dev/ttyUSB2 & echo -e “AT+QCFG=“usbnet”\r\n” >/dev/ttyUSB2
+QCFG: “usbnet”,1
ECM模式
+QCFG: “usbnet”,0 RNDS模式

 

两个终端方案:一个终端是adb shell,另外一个是debug 串口0.

截图如下:

adb

 A40I 平台Android7.1 系统程序 -4G EC200T

debug串口

 A40I 平台Android7.1 系统程序 -4G EC200T

 

配置为RNIDS网卡,这样避免同时CDC-ECM网卡冲突问题。参考文档《EC200模组介绍、升级抓log和拨号应用_charlie.pdf》p33

 

(4)网络验证

 A40I 平台Android7.1 系统程序 -4G EC200T

说明:在验证前,需要脚SIM卡插入卡槽中,天线连接到EC200模块上。

执行ping www.baidu.com

 A40I 平台Android7.1 系统程序 -4G EC200T

(5) 问题:当插入USB扩展的网卡SR9900后,导致usb0设备关闭退出。

解决问题时间:20200116

原因:在程序中,eth端口的评分等级设置的是100,只要有eth端口启用,就会将wlan和4g功能关闭。这里将等级降低为30.

文件修改目录:

framework/opt/net/ethernet/java/com/android/server/ethernet/ EthernetNetworkFactory.java

修改程序:

 A40I 平台Android7.1 系统程序 -4G EC200T