Linux 系统下驱动安装
## 1.修改内核配置
进入内核目录执行 make menuconfig配置内核
````
Device Drivers --->
[*] USB support --->
<*> USB Serial Converter support --->
<*> USB driver for GSM and CDMA modems
````
保存重编内核
## 2.CDC ACM 驱动
N720V5 配置 CDC ACM 驱动,修改添加流程如下:
修改驱动代码
1. 添加 VID PID
打开内核源码文件 cdc-acm.c(路径一般为/kernel/drivers/usb/class/cdc-acm.c),找到数组
acm_ids[],添加模块 VID、PID 信息,代码添加如下:
static const struct usb_device_id acm_ids[] = {
{ USB_DEVICE(0x2949, 0x8700)}, //AM400P}
## 3. 过滤端口
ACM 驱动可能被加载成网卡端口(RNDIS/RMNET/ECM 端口),使得主设备将网卡端口枚举成ttyACM 设备,加载 RMNET 等网卡驱动后无法正确枚举出网卡设备,导致不能拨号。因此,需要在 ACM 驱动中过滤网卡端口,修改方式如下: 在/kernel/drivers/usb/class/cdc-acm.c 文件里添加如下内容:
````
在/kernel/drivers/usb/class/cdc-acm.c 文件里添加如下内容:
static void acm_tty_set_termios(struct tty_struct *tty,
struct ktermios *termios_old);
/*N720/N720V5
* 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
````
## 4.修改内核配置
````
Device Drivers --->
[*] USB support --->
*** USB Device Class drivers *** --->
<M> USB Modem (CDC ACM) support (CONFIG_USB_ACM=y)
````
## 5.保存重编内核
## 6.测试
按照上述配置后,在/dev 目录下会生成相应的设备节点:
````
root@root: ls /dev/ttyACM*
/dev/ttyACM0 /dev/ttyACM1 /dev/ttyACM2
此时可以往 AT 口或者 MODEM 口发送 AT 指令
root@support:/dev# echo -en "AT\r\n" > ttyUSB0
root@support:/dev# AT
OK
````