本文介绍了在Linux系统下,如何修改USB驱动支持合宙 Air720模块,以及使用Air720进行PPP拨号上网流程。
Air720正常启动后,通过USB连接到Linux设备上,驱动正常加载后会产生如下设备(请点击放大查看):
以下代码相关内容建议横屏查看,或在PC端打开本文链接。
一、修改驱动
static const struct usb_device_id option_ids[] = {
//+add by airm2m for Air72x
{ USB_DEVICE(0x1286, 0x4e3d) },
//-add by airm2m for Air72x
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD) },
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD_LIGHT) },
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 *))
{
struct usb_serial *serial = port->serial;
struct urb *urb;
urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
if (!urb)
return NULL;
usb_fill_bulk_urb(urb, serial->dev,
usb_sndbulkpipe(serial->dev, endpoint) | dir,
buf, len, callback, ctx);
//+add by airm2m for Air72x
if(dir == USB_DIR_OUT){
struct usb_device_descriptor *desc = &serial->dev->descriptor;
if(desc->idVendor == cpu_to_le16(0x1286) && desc->idProduct == cpu_to_le16(0x4e3d))
{
urb->transfer_flags |= URB_ZERO_PACKET;
}
}
//-add by airm2m for Air72x
return urb;
}
⦁ For linux Kernel Version older than 2.6.35:
static struct urb *option_setup_urb(struct usb_serial *serial, 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);
//+add by airm2m for Air72x
if(dir == USB_DIR_OUT)
{
struct usb_device_descriptor *desc = &serial->dev->descriptor;
if(desc->idVendor == cpu_to_le16(0x1286) && desc->idProduct == cpu_to_le16(0x4e3d))
{
urb->transfer_flags |= URB_ZERO_PACKET;
}
}
//-add by airm2m for Air72x
return urb;
}
static struct usb_serial_driver option_1port_device = {
.driver = {
.owner = THIS_MODULE,
.name = "option1",
},
....
#ifdef CONFIG_PM
.suspend = usb_wwan_suspend,
.resume = usb_wwan_resume,//+add by airm2m for Air726
#endif
.reset_resume = usb_wwan_resume,
//-add by airm2m for Air726
};
⦁ For linux Kernel Version older than 3.5:
/* 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,
//+add by airm2m for Air72x
.reset_resume = usb_serial_resume,
//-add by airm2m for Air72x
.no_dynamic_id = 1,
};
cd <your kernel directory>
Step 2:
make menuconfig
Step 3:Enable CONFIG_USB_SERIAL_OPTION
[*] Device Drivers →
[*] USB Support →
[*] USB Serial Converter support →
[*] USB driver for GSM and CDMA modems
[*] Device Drivers →
[*] Network device support →
[*] PPP (point-to-point protocol) support
make
二、模块测试
三、PPP拨号
# /etc/ppp/peers/air720-pppd # Usage:root>pppd call air720-pppd
#Modem path, like /dev/ttyUSB3,/dev/ttyACM0, depend>/dev/ttyUSB3 115200
#Insert the username and password for authentication, default user and password are test
user "" password ""
# The chat script, customize your APN in this file
connect 'chat -s -v -f /etc/ppp/peers/air720-chat-connect'
# The close script
disconnect 'chat -s -v -f /etc/ppp/peers/air720-chat-disconnect'
# Hide password in debug messages
hide-password
# The phone is not required to authenticate
noauth
# Debug info from pppd
debug
# If you want to use the HSDPA link as your gateway
defaultroute
# pppd must not propose any IP address to the peer
noipdefault
# No ppp compression
novj
novjccomp
noccp
ipcp-accept-local
ipcp-accept-remote
local
# For sanity, keep a lock>lock
modem
dump
nodetach
# Hardware flow control
nocrtscts
remotename 3gppp
ipparam 3gppp
ipcp-max-failure 10
# Ask the peer for up to 2 DNS server addresses
usepeerdns
/etc/ppp/peers/air720-chat-connect
#/etc/ppp/peers/air720-chat-connect
ABORT "BUSY"
ABORT "NO CARRIER"
ABORT "ERROR"
#ABORT "NO ANSWER"
TIMEOUT 10
"" AT
"OK-+++\c-OK" ATH0
OK ATE0
OK ATI;+CESQ;+CPIN?;+COPS?;+CEREG?;+CGREG?;&D2
#china unicom's apn is 3gnet
#OK AT+CGDCONT=1,"IP","3gnet",,0,0
#OK ATD*99#
#China mobile APN
OK AT+CGDCONT=1,"IP","cmnet"
#OK ATDT*99***1#
OK ATD*99#
CONNECT ""
/etc/ppp/peers/air720-chat-disconnect
#/etc/ppp/peers/air720-chat-disconnect
TIMEOUT 5
ABORT "ERROR"
ABORT "NO DIALTONE"
ABORT "NO CARRIER"
#SAY "\nSending break to the modem\n"
"" "+++\c"
OK "ATH0"
SAY "\nGoodbay\n"
编辑好这几个文件之后,便可以通过pppd进行拨号:
# pppd call air720-ppp &
此时通过ifconfig命令查看网卡就有一个ppp0网卡出现,这时可以禁用其他网卡,就可以用Air720模块连接到互联网了。
以上就是Linux系统下修改USB驱动以及使用Air720进行PPP拨号上网的详细流程,如有相关问题不清楚的,欢迎留言交流~
为感谢大家对合宙Luat的关注与支持,合宙商城活动持续进行中,多样福利等你来领取,点击本公众号菜单“合宙商城”或识别下图二维码即可直达商城:
Luat小企业系列原创文章:
合宙Luat将陆续推出小企业系列原创作品,敬请关注!
>4G模块价格进入2位数时代,合宙Air720模块正式量产发货
朋友会在“发现-看一看”看到你“在看”的内容