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 --->
USB Network Adapters --->
(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显示如下图
配置成功后,用命令:ls /dev/ttyUSB*,可以看到设备/dev目录下面有USB0,USB1(AT),USB2(PPP)三个USB设备。
(2)lsusb 查看网络设备
网络设备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:
debug串口
配置为RNIDS网卡,这样避免同时CDC-ECM网卡冲突问题。参考文档《EC200模组介绍、升级抓log和拨号应用_charlie.pdf》p33
(4)网络验证
说明:在验证前,需要脚SIM卡插入卡槽中,天线连接到EC200模块上。
执行ping www.baidu.com
(5) 问题:当插入USB扩展的网卡SR9900后,导致usb0设备关闭退出。
解决问题时间:20200116
原因:在程序中,eth端口的评分等级设置的是100,只要有eth端口启用,就会将wlan和4g功能关闭。这里将等级降低为30.
文件修改目录:
framework/opt/net/ethernet/java/com/android/server/ethernet/ EthernetNetworkFactory.java
修改程序: