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 ````