Linux 3g上网卡 拨号,嵌入式Linux下使用3G卡上网

2023-11-23 12:11

本文主要是介绍Linux 3g上网卡 拨号,嵌入式Linux下使用3G卡上网,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

嵌入式linux是2.6.24版的。主机是AT9261(arm926ej-s内核)的开发板。

买是市面上常见的中兴AC2746 usb接口的3G上网卡。在windows下使用极方便,可是在linux下使用就麻烦了。 首先,要确认你的嵌入式linux系统是可以支持热插拔的系统。(我用的是mdev方式支持热插拔)然后,是驱动的安装。AC2746没有专门linux下的驱动。不过,它的usb口在windows系统中实际是用usb转串口的方式转为串口工作的。那么,在linux下同样也可以用usb转串口的方式来使用。linux内核自带了usb转串口的驱动。在内核的编译选择中,选中

Device Drivers  ---> [*] USB support  ---> USB Serial Converter support  --->  USB Serial Converter support

再选中其下的USB driver for GSM and CDMA modems 的选项即可。要注意的是,编译方式一定要选为模块化编译。

选定这两项后,执行make modules命令,会编译源码中/driver/usb/serial/目录下的usb-serial.c和option.c两个文件及其它一些相关文件。在option.c中,可以看到已经定义了很多设备的描述符,但没有定义AC2746的描述符。我们自已定义一下即可。方法是,在源码中,添加#define    ZTE_VENDOR_ID        0x19d2

#define    ZTE_PRODUCT_AC2746    0xfff1

option_ids[]的数组中添加{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2746) },完成后,重新编译即可。 将生成的/driver/usb/serial/usbserial.ko,option.ko拷贝到嵌入式linux根文件系统的/lib/modules/2.6.24目录下。

执行

insmod /lib/modules/2.6.24/usbserial.ko

insmod /lib/modules/2.6.24/option.ko插入AC2746,通常系统会认为是cdrom和usb stroage设备插入,并会生成/dev/sr0文件(我用的mdev方式生成设备文件,如果你用的是其它方式,可能设备名会不一样)。这时,输入eject /dev/sr0命令,则系统会自动删除/sr0,并重新确认AC2746,这时,就会认出它是一个cdma数据卡,并自动生成/dev/ttyUSB0,/dev/ttyUSB1,

/dev/ttyUSB2,/dev/ttyUSB3,/dev/ttyUSB4,共5个串行口。这一步是最容易出错的,现象是没有生成这几个设备文件。出错的原因主要是设备描述符没有在驱动程序中定义,查看一下你的CDMA卡的设备描述符。方法是,把CDMA数据卡插到桌面版的linux下,执行lsusb命令即可查看到,然后修改option.c中的设备描述符。有了这几个设备,就成功了一大半。接下来,是安装pppd拨号软件。网上有很多相关资料,我不多说了。安装好后,要写两个脚本。一个是在/etc/ppp/peers/evdo文件。内容如下# Usage: root>pppd call evdo

# Privied by hugerat

/dev/ttyUSB0

921600

crtscts

modem

debug

nodetach

usepeerdns

noipdefault

defaultroute

user ctnet@mycdma.cn

password vnet.mobi

0.0.0.0:0.0.0.0

connect '/usr/sbin/chat -s -v -f /etc/ppp/evdo-connect-chat' 其中,user和password项可能会因为地区不同而不同(这两项是南京地区的)

再建立/etc/ppp/evdo-connect-chat文件,文件内容如下:

#/etc/ppp/evdo-connect-chat

# chat script for China telecom, used AC2746.

# Privided by hugerat

TIMEOUT 15

ABORT "DELAYED"

ABORT "BUSY"

ABORT "ERROR"

ABORT "NO DIALTONE"

ABORT "NO CARRIER"

TIMEOUT 15

"" AT

OK ATE0

OK AT\^PREFMODE=8

OK ATDT#777

CONNECT要说明的一项是AT\^PREFMODE=8,这个是设置模块工作模式的。2表示用CDMA 1X模式。4表示EVDO模式,8表示混和模式。模块默认是用2,即CDMA 1X模式。如果你要使用EVDO高速上网就要设为4或8。执行pppd call evdo&,顺利的话,拨号就会成功,并会获得dns服务器地址。ping www.linuxidc.com,连通的话,证明已经在网上了。但是你会发现网速并没有达到evdo的正常速度。这是因为,usb-serial.c并不是为高速外设设计的,它的缓存开的太小,要把缓存开大。方法如下。创建一个usbserial.c的补丁文件/root/usbserial.c.patch,内容如下:--- linuxold/drivers/usb/serial/usb-serial.c 2006-12-31 17:40:28.000000000 -0600

+++ linux/drivers/usb/serial/usb-serial.c 2009-05-02 23:55:08.000000000 -0600

@@ -58,4 +58,5 @@

*/

+static ushort maxRSize, maxWSize, maxISize;

static int debug;

static struct usb_serial *serial_table[SERIAL_TTY_MINORS]; /* initially all NULL */

@@ -817,4 +818,6 @@

}

buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);

+ if (buffer_size < maxRSize)

+ buffer_size = maxRSize;

port->bulk_in_size = buffer_size;

port->bulk_in_endpointAddress = endpoint->bEndpointAddress;

@@ -841,4 +844,6 @@

}

buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);

+ if (buffer_size < maxWSize)

+ buffer_size = maxWSize;

port->bulk_out_size = buffer_size;

port->bulk_out_endpointAddress = endpoint->bEndpointAddress;

@@ -866,4 +871,6 @@

}

buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);

+ if (buffer_size < maxISize)

+ buffer_size = maxISize;

port->interrupt_in_endpointAddress = endpoint->bEndpointAddress;

port->interrupt_in_buffer = kmalloc (buffer_size, GFP_KERNEL);

@@ -1191,2 +1198,8 @@

module_param(debug, bool, S_IRUGO | S_IWUSR);

MODULE_PARM_DESC(debug, "Debug enabled or not");

+module_param(maxRSize, ushort, 0);

+MODULE_PARM_DESC(maxRSize, "User specified USB input buffer size");

+module_param(maxWSize, ushort, 0);

+MODULE_PARM_DESC(maxWSize, "User specified USB output buffer size");

+module_param(maxISize, ushort, 0);

+MODULE_PARM_DESC(maxISize, "User specified USB interrupt buffer size");这个文件是我在网上找到的,并不是2.6.24版的,不能直接为usb-serial.c打上补丁,不过,没关系,你可以手工添加带“+”号的信息到指定的位置即可。完成后,重新编译生成usbserial.ko文件。insmod /lib/modules/2.6.24/usbserial.ko命令改为如下insmod /lib/modules/2.6.24/usbserial.ko maxRSize=4096 maxWSize=1024这样,再试试网速吧,一切正常了。 上述方法在AC2746上测试正常,其它的网卡应该也可以,只是要注意修改相应的设备描述符即可。0b1331709591d260c1c78e86d0c51c18.png

这篇关于Linux 3g上网卡 拨号,嵌入式Linux下使用3G卡上网的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/417865

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Linux磁盘分区、格式化和挂载方式

《Linux磁盘分区、格式化和挂载方式》本文详细介绍了Linux系统中磁盘分区、格式化和挂载的基本操作步骤和命令,包括MBR和GPT分区表的区别、fdisk和gdisk命令的使用、常见的文件系统格式以... 目录一、磁盘分区表分类二、fdisk命令创建分区1、交互式的命令2、分区主分区3、创建扩展分区,然后

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —