1. 驱动移植

需要综合参考《Neoway_N720_N720V5_USB驱动应用指南_V1.0.pdf》,《Neoway_N720V5_Linux集成用户手册V1.0.pdf》。

(1)修改驱动代码

1.1)添加 VID PID

打开内核源码文件 cdc -acm.c (路径一般为 kernel/drivers/usb/class/cdc/kernel/drivers/usb/class/cdc)找到数组 acm_ids[],添加模块 VID 、PID 信息,代码添加如下:
static const struct usb_device_id acm_ids[] = {

{ USB_DEVICE(0x2949, 0x8700)}, //N720V5

}

1.2)过滤端口

ACM 驱动可能 被加载 成网卡端口( RNDIS/RMNET/ECMRNDIS/RMNET/ECM 端口),使得主设备将网卡枚举成 tty ACM 设备,加载 RMNET RMNET 等网卡驱动后无法正确枚举出设备,导致不能拨号。因此需要 在 ACM 驱动中过滤网卡端口, 修改方式如下 :

在kernel/drivers/usb/class/cdc-acm.c 文件里添加如下内容:
static void acm_tty_set_termios(struct tty_struct *tty, struct ktermios *termios_old);

/*

* Functions for ACM control messages.
*/
#if 1 /*Added by Neoway*/
#define true 1
#define false 0
#define NEOWAY_VENDOR_ID 0x2949
#define NEOWAY_PRODUCT_N720V5 0x8700
bool detected_neoway_product(struct usb_device *dev)
{
    if (NULL == dev)
        return false;
    if (le16_to_cpu(dev->descriptor.idVendor) == NEOWAY_VENDOR_ID &&
        le16_to_cpu(dev->descriptor.idProduct) == NEOWAY_PRODUCT_N720V5 )
        return true;

return false;
}
#endif

……

static int acm_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
struct usb_cdc_union_desc *union_header = NULL;
……
int rv = -ENOMEM;
#if 1 /*Added by Neoway*/
struct usb_interface_descriptor *desc = &intf->cur_altsetting->desc;
if (detected_neoway_product(usb_dev) && (desc->bInterfaceNumber == 0 || desc->bInterfaceNumber == 1)) {
dev_err(&intf->dev, "Neoway quirk, skipping interface 0x%x\n", desc->bInterfaceNumber);
    return -ENODEV;
}
#endif

(2)修改内核配置

2.1)进入内核目录

cd XXX/kernel/linux-4.9.y/

2.2)执行make menuconfig

make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- menuconfig
2.3)配置内核

Device Drivers --->

[*]USB Support --->

*** USB Device Class drivers ***

<M> USB Modem (CDC ACM) support (CONFIG_USB_ACM=y)

2.4)选择“Save”,保存配置,然后选择“Exit”,退出

2.5)重新编译内核

2.6)重新烧录内核

按照官方手册中的方法,执行以上步骤之后就可以了,在/dev/下能够生成ttyyACM0、/dev/ttyACM1、/dev/ttyACM2设备。但实际上并没有生成。问题出在哪里?

1)怀疑是没有插入模块的缘故,只有插入模块,才能调用probe函数,从而建立/dev/ttyACM0-2设备

将模块插入,问题依旧;

2)怀疑上边的指导说明有误

<M> USB Modem (CDC ACM) support (CONFIG_USB_ACM=y)

之前就对这一项存在疑问,因为menuconfig中实际上并没有这一项,而只有USB Modem (CDC ACM) support这一项,在《Neoway_N720V5_Linux集成用户手册V1.0.pdf》的步骤图示中也确实是只有<M> USB Modem (CDC ACM) support,而并没有后边的 (CONFIG_USB_ACM=y)。分析说明手册的意思应该是将此项由M改为y,即永久编译进内核中,而不用模块形式。将此项做修改,改为y。之后重新执行2.4)~ 2.6)。这一次正确看到/dev/tty0-2设备了!

3)还有一个小问题需要弄清楚:是插入模块后才会正确枚举出设备,还是即使不插4G模块,也能枚举出设备?

将模块拔掉,这一次没有/dev/ttyACM0-2设备了。由此看来,必须插入4G模块,走probe函数后设备节点才会产生。

至此,驱动移植全部完成了!

2. 应用开发

驱动移植成功只是一个很小的阶段性的胜利,真正的考验才刚刚开始。接下来,开始在Hi3559AV100上进行友方4G模块N720V5的应用开发。

饭要一口一口地吃,事要一步一步地做。

在开发应用之前,先要把操作4G模块的AT指令集先过一遍,把基础工作做好。

(1)通用AT指令

1.1)获取模块厂商信息

终端下发送(以下简写为发送):

~ # echo -e "ATI\r\n" > /dev/ttyACM1

4G模块回应(以下简称回应)(插入/不插入SIM卡一致):

~ #

NEOWAY

N720V5

REVISION V004

OK

1.2)获取模块软件版本

发送:

~ # echo -e "AT+GMR\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+GMR: N720V5_BZ_CM570_V004

OK

1.3)获取信号强度

发送:

~ # echo -e "AT+CSQ\r\n" > /dev/ttyACM1

回应(未插天线)(插入/不插入SIM卡一致):

~ #

+CSQ: 15,99

OK

1.4)获取当前网络注册状态

发送:

~ # echo -e "AT+CREG?\r\n" > /dev/ttyACM1

回应(未插SIM卡时):

~ #

+CREG: 0,0

OK

回应(插入SIM卡时):

~ #

+CREG: 0,1

OK

发送:

~ # echo -e "AT+CREG=?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CREG: (0-2)

OK

发送:

~ # echo -e "AT+CREG=1\r\n" > /dev/ttyACM1

回应:

~ #

OK

再发送:

~ # echo -e "AT+CREG?\r\n" > /dev/ttyACM1

回应:

~ #

+CREG: 1,1

OK

1.5)获取EPS网络注册状态

发送:

~ # echo -e "AT+CEREG?\r\n" > /dev/ttyACM1

回应(未插SIM卡时):

~ #

+CEREG: 0,0

OK

回应(插入SIM卡时):

~ #

+CEREG: 0,1

OK

发送:

~ # echo -e "AT+CEREG=1\r\n" > /dev/ttyACM1

回应:

~ #

OK

再发送:

~ # echo -e "AT+CEREG?\r\n" > /dev/ttyACM1

回应(插入SIM卡时):

~ #

+CEREG: 1,1

OK

发送:

~ # echo -e "AT+CEREG=?\r\n" > /dev/ttyACM1

回应:

~ #

+CEREG: (0-2)

OK

1.6)网络选择

以下均在未插SIM卡的状态下测试。

发送:

~ # echo -e "AT+COPS?\r\n" > /dev/ttyACM1

回应(未插SIM卡时):

~ #

+COPS: 0

OK

回应(插入SIM卡时):

~ #

+COPS: 0,0,"CHINA MOBILE",7

OK

发送:

~ # echo -e "AT+COPS=0,0\r\n" > /dev/ttyACM1

回应(未插SIM卡时):

~ #

OK

长时间后终端会出现:

+CREG: 2

+CEREG: 2

回应(插入SIM卡时):

~ #

OK

发送:

~ # echo -e "AT+COPS=0,2\r\n" > /dev/ttyACM1

回应(插入SIM卡时):

~ #

OK

再次发送:

echo -e "AT+COPS?\r\n" > /dev/ttyACM1

回应:

~ #

+COPS: 0,2,"46000",7

OK

1.7)查询国际移动用户识别码

以下均在未插SIM卡的状态下测试。

发送:

~ # echo -e "AT+CIMI\r\n" > /dev/ttyACM1

回应(未插SIM卡时):

~ #

ERROR

回应(插入SIM卡时) :

~ #

460001271966189

OK

1.8)获取通信模块IMEI号

发送:

~ # echo -e "AT+CGSN\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CGSN: "865192041776138"

OK

1.9)获取SIM卡标识

发送:

~ # echo -e "AT+CCID\r\n" > /dev/ttyACM1

回应(未插SIM卡时):

~ #

ERROR

回应(插入SIM卡时):

~ #

+CCID: 898600690119F0215276

OK

1.10)查询模块型号

发送:

~ # echo -e "AT+CGMM\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CGMM: N720V5

OK

1.11)查询模块型号

发送:

~ # echo -e "AT+GMM\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+GMM: N720V5

OK

1.12)设置模块波特率

发送:

~ # echo -e "AT+IPR=115200\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

OK

发送:

~ # echo -e "AT+IPR=100\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

ERROR

输入以上错误比特率后,再发送:

echo -e "AT+IPR?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+IPR: 0

OK

发送:

~ # echo -e "AT+IPR=?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+IPR: 0, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600

OK

1.13)模块功能选择

发送:

~ # echo -e "AT+CFUN=?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CFUN: (0-1,4),(0-1)

OK

发送:

~ # echo -e "AT+CFUN?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CFUN: 1

OK

发送:

~ # echo -e "AT+CFUN=0,0\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

OK

发送:

~ # echo -e "AT+CFUN=4,0\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

OK

发送:

~ # echo -e "AT+CFUN=0,1\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

OK

usb 3-1: USB disconnect, device number 2
cdc_acm 3-1:1.4: failed to set dtr/rts

[1]+  Done                       cat /dev/ttyACM1
~ # usb 3-1: new high-speed USB device number 3 using xhci-hcd
cdc_acm 3-1:1.0: Neoway quirk, skipping interface 0x0
cdc_acm 3-1:1.1: Neoway quirk, skipping interface 0x1
cdc_acm 3-1:1.2: ttyACM0: USB ACM device
cdc_acm 3-1:1.4: ttyACM1: USB ACM device
cdc_acm 3-1:1.6: ttyACM2: USB ACM device

发送:

~ # echo -e "AT+CFUN=1,1\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CREG: 0

+CEREG: 0

OK

usb 3-1: USB disconnect, device number 2
cdc_acm 3-1:1.4: failed to set dtr/rts

[1]+  Done                       cat /dev/ttyACM1
~ # usb 3-1: new high-speed USB device number 3 using xhci-hcd
cdc_acm 3-1:1.0: Neoway quirk, skipping interface 0x0
cdc_acm 3-1:1.1: Neoway quirk, skipping interface 0x1
cdc_acm 3-1:1.2: ttyACM0: USB ACM device
cdc_acm 3-1:1.4: ttyACM1: USB ACM device
cdc_acm 3-1:1.6: ttyACM2: USB ACM device

1.14)串口多路复用

发送:

~ # echo -e "AT+CMUX=0\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

OK

发送:

~ # echo -e "AT+CMUX=?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CMUX: (0-1),(0-2),(1-8),(1-32768),(1-255),(0-100),(2-255),(1-255),(1-7)

OK

 1.15)时钟

发送:

~ # echo -e "AT+CCLK?\r\n" > /dev/ttyACM1

回应(未插SIM卡时):

~ #

+CCLK: "14/01/01,00:00:40"

OK

回应(插入SIM卡时):

~ #

+CCLK: "20/02/11,16:31:02"

OK

1.16)输入PIN码

发送:

~ # echo -e "AT+CPIN?\r\n" > /dev/ttyACM1

回应(未插SIM卡时):

~ #

ERROR

回应(插入SIM卡时):

~ #

+CPIN: READY

OK

发送:

~ # echo -e "AT+CPIN=\"0000\"\r\n" > /dev/ttyACM1

回应(插入SIM卡时):

~ #

+CME ERROR: 4

ERROR

1.17)PIN使能与查询功能指令

发送:

~ # echo -e "AT+CLCK=?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CLCK: ("CS","PS","PF","SC","AO","OI","OX","AI","IR","NT","NM","NS","NA","AB","AG","AC","FD","PN","PU","PP","PC")

OK

发送:

~ # echo -e "AT+CLCK=\"SC\",2\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CLCK: 0

OK

1.18)修改密码指令

发送:

~ # echo -e "AT+CPWD=?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CPWD: ("CS",16),("PS",16),("PF",16),("SC",16),("AO",16),("OI",16),("OX",16),("AI",16),("IR",16),("AB",16),("AG",16),("AC",16),("FD",16),("NT",16),("NM",16),("NS",16),("NA",16),("PN",16),("PU",16),("PP",16),("PC",16),("P2",16)

OK

~ #

发送:

~ # echo -e "AT+CPWD=\"SC\",\"1234\",\"0000\"\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CME ERROR: 10

~ #

1.19)设置PDP格式 

发送:

~ # echo -e "AT+CGDCONT=1,\"IP\",\"CMNET\"\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

OK

发送:

~ # echo -e "AT+CGDCONT?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+CGDCONT: 1,"IP","CMNET","",,,

OK

1.20)用户认证

发送:

~ # echo -e "AT+XGAUTH=?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

+XGAUTH: (1),(0-2),32,32

OK

 1.21)设置GPRS附着和分离

发送:

echo -e "AT+CGATT=?\r\n" > /dev/ttyACM1 或 echo -e "AT+CGATT?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

OK

OK

......

发送:

echo -e "AT+CGATT=1\r\n" > /dev/ttyACM1

回应(未插SIM卡时):

~ #

ERROR

回应(插入SIM卡时):

~ #

OK

1.22)GPRS拨号

发送:

~ # echo -e "ATD*99#\r\n" > /dev/ttyACM1

回应(未插SIM卡时):

~ #

+CME ERROR: 100

回应(插入SIM卡时):

~ #

CONNECT

1.23)模块休眠模式使能

发送:

~ # echo -e "AT+ENPWRSAVE?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+ENPWRSAVE: 0

OK

发送:

~ # echo -e "AT+ENPWRSAVE=1\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

OK

再次发送:

echo -e "AT+ENPWRSAVE?\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

+ENPWRSAVE: 1

OK

1.24)打开&关闭回显

发送:

~ # echo -e "ATE0\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

OK

发送:

~ # echo -e "AT\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

OK

发送:

~ # echo -e "ATE1\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

~ #

OK

再次发送:

~ # echo -e "AT\r\n" > /dev/ttyACM1

回应(插入/不插入SIM卡一致):

ATATATATAT

ERROR

ATATATATATAT

ERROR

ATATATATAT

ERROR

ATATATATATAT

ERROR

ATATATATAT

ERROR

……

1.25)读写本机号码

发送:

~ # echo -e "AT+CNUM\r\n" > /dev/ttyACM1

回应(插入SIM卡时):

~ #

+CNUM: "","13691005742",129

OK

Hi3559AV100移植友方4G模块N720V5(一)相关推荐

  1. Linux移植EC20 4G模块驱动简易教程

    关于4G模块常见的品牌与型号: 品牌 型号 市场价格 芯片组 状态 HUAWEI ME909s-821 210-260 海思芯片,只有五模 在售 HUAWEI ME909s-521 400左右 高通芯 ...

  2. 在tiny210上移植华为4G模块 me909s-821

    最近做毕设需要一个终端将解算数据发送到服务器,一开始想到了用4G串口透传模块,但是考虑到串口通信速度慢,而且在linux C编程时还要单独的写AT指令,感觉麻烦,所以放弃. 4G模块:华为me909s ...

  3. 基于Xavier 移植移远EG25G 4G模块

    基于Jetson Xavier NX 移植移远EG25G 4G模块 先敲一下黑板,使劲敲 大家一定先试一下直接插上4G模块后,linux能否读出来,就是右上角的wifi设置那里面出不出现移动网络信息, ...

  4. 小白求,用RE文件管理器移植移远EC20 4G模块驱动。 有重谢。请加w jiao1998524

    小白求,用RE文件管理器移植移远EC20   4G模块驱动.  有重谢.请加w  jiao1998524

  5. linux系统华为4G模块移植及pppd拨号上网开发总结

    一.开发环境简介 开发系统: Ubuntu 14.04 内核版本:linux 3.10 4G模块:ME909-821和ME909-120 模块接口:pcle SIM卡:联通 二.内核驱动配置 需向li ...

  6. linux ec20 usb驱动移植,linux下EC20 4G模块驱动移植

    之前有移植过ME909s MU609,主要工作就是把4G模块当做USB设备,挂载在linux上,驱动移植主要是能够让板子识别到模块,并产生SUB多个虚拟的节点,用于操作模块,拨号上网 关于内核的配置, ...

  7. Android6.0 EC20 R2.1 4G模块移植

    摘要:   本文主要针对MTK MT8317 Android6.0 代码进行4G模块移植,使用pppd拨号的方式实现上网,并没有按照移远提供的文档GobiNet方式上网. 1.内核部分的移植 1.1 ...

  8. ZTE ME3630 4G模块在Hi3559AV100平台上拨号指令流程

    ZTE ME3630 4G模块在Hi3559AV100平台上拨号指令流程 驱动配置 内核版本linux-4.9.37 CONFIG_USB_SERIAL=y     CONFIG_USB_SERIAL ...

  9. linux 4g wifi切换,Linux 开发板4G转WiFi热点 手机连接热点上网(二 4G模块的移植)...

    接着前一篇,本篇博文记录4G模块的移植. 我使用的模块是中兴ME3630模块,前面说了使用供应商或者官方的资料进行移植即可.一般来说4G模块的驱动,Linux内核也基本都有了,只需要设置一下optio ...

  10. Hi3798移植4G模块(移远EC20)

    Hi3798移植4G模块(移远EC20) 一.前言 二.USB驱动修改 2.1 添加VID和PID信息 2.2 添加空包处理机制 2.3 添加复位重连机制 2.4 修改内核配置 三.GoBiNet测试 ...

最新文章

  1. ASP.NET-FineUI开发实践-14
  2. PythonScript_demo--搭建PXE服务器
  3. 【错误记录】Android 内存泄漏 错误排查记录 ( FinalizerReference 内存泄漏 )
  4. 对比2个表mailbox_id字段的差集,然后做插入操作
  5. 【Electron】C++ 扩展Node 系列 (一)
  6. C语言函数class,C语言--7-class-while和函数.ppt
  7. MATLAB Tick的方向(刻度标外翻)
  8. Mysql数据库小结
  9. WebLOAD Open Source 从入门到精通
  10. 【资讯】国内 42 所一流大学综合排名出炉!清北之后谁是国内第三?
  11. Tecplot360 作图经验
  12. 三维重建之结构光编码方案研究
  13. 微信小程序——三角形面积计算
  14. 【毕业设计_课程设计】基于python的微信公众平台机器人的设计与实现
  15. 三星980处理器和骁龙855_手机处理器最新排名:麒麟980因一缺陷,不敌高通骁龙855...
  16. 用计算机演奏的生日快乐歌,51单片机演奏音乐“祝你生日快乐”
  17. 新闻平台聚合之腾讯新闻爬虫发布
  18. 银联在线支付5100030异常
  19. Flink 中的时间和窗口
  20. TCP-UDP网络编程调试助手下载

热门文章

  1. 摄动法在计算机中的应用,渐近分析与摄动方法的计算机辅助求解.pdf
  2. C语言小项目—数字雨—简单易学
  3. 编译原理学习笔记 4.5 自底向上分析方法
  4. S-PTAM:Stereo Parallel Tracking and Mapping论文笔记
  5. HTML+CSS 制作下拉菜单
  6. rs485全双工中只接一组_RS485通讯的正确接线方式
  7. SDR SDRAM控制器设计
  8. 天轰穿C#教程之数学运算符
  9. 人人商城 / 数据库
  10. 用Tikz 画一幅神舟12号简图,致敬中国航天工作者,顺便学习Tikz作图的高级技巧!