zoukankan      html  css  js  c++  java
  • 35、在JZ2440上使用3G上网卡

    1. 简单使用:
    1.1 选型:
    中国联通:E网时空 EW65 (64元), ZTE中兴 MF637U (160多)
    中国电信:Benton/本腾 EQ10B (35元)
    中国移动:华为 ET128 (99元), 不要用ZTE A371(Linux下不支持)

    更多型号可参考: usb_modeswitch的device_reference.txt

    1.2 使用步骤(以windows为例)
    a. 接上发现移动硬盘,里面有安装程序和驱动程序
    b. 安装完后,移动硬盘消失;
    c. 发现新硬件,自动安装好驱动程序后,发现2个串口和一个modem
    d. 运行程序即可拨号上网

    zeroCD: 3G上网卡自带程序,接到PC后先作为移动硬盘使用,安装程序后切换为modem

    对于Linux使用过程:
    a. 接上后切换mode: usb_modeswitch
    b. 安装驱动程序: linux内核自带, 会出现3个ttyUSB0,1,2
    c. 拨号上网:pppd

    1.3 交叉编译应用程序并测试
    配置内核
    -> Device Drivers
      -> Network device support
        <*> PPP (point-to-point protocol) support
        <*> PPP BSD-Compress compression
        <*> PPP Deflate compression
        [*] PPP filtering
        <*> PPP MPPE compression (encryption) (EXPERIMENTAL)
        [*] PPP multilink support (EXPERIMENTAL)
        <*> PPP over Ethernet (EXPERIMENTAL)
        <*> PPP support for async serial ports
        <*> PPP support for sync tty ports
    -> Device Drivers
      -> USB support
        <M> USB Serial Converter support
        <M> USB driver for GSM and CDMA modems

    make uImage && make modules

    应用程序源码:
    http://www.draisberghof.de/usb_modeswitch/
    http://www.libusb.org/
    ftp://ftp.samba.org/pub/ppp/

    交叉编译:
    libusb:
    ./configure --host=arm-linux --prefix=$PWD/tmp
    make
    make install
    cd把头文件和库复制进交叉工具链里

    cd ./tmp/include/libusb-1.0

    sudo cp libusb.h /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

    cd ./tmp/lib

    sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

    把库复制到根文件系统的lib目录下
    sudo cp *so* -d /work/nfs_root/fs_mini_mdev_new/lib/

    usb_modeswitch:
    修改Makefile
    CC = arm-linux-gcc
    LIBS = -lusb-1.0//根据前面安装的libusb库libusb-1.0 把“ib”去掉

    make DESTDIR=$PWD/tmp
    make DESTDIR=$PWD/tmp install

    cd tmp
    sudo cp * -rfd /work/nfs_root/fs_mini_mdev_new

    usb-modeswitch-data-20131113:
    make DESTDIR=$PWD/tmp install
    cd tmp//在usr/share/usb_modeswitch中有一大堆配置文件

    sudo cp * -rfd /work/nfs_root/fs_mini_mdev_new

    pppd:
    修改这6个文件, "$(INSTALL) -s"改为"$(INSTALL) "//-s 在make install的时候会提示一些符号无法识别,具体意思可查看install指令,这里也可以把-s改为-strip-program = arm-linux-strip
    chat/Makefile.linux
    pppd/plugins/radius/Makefile.linux
    pppd/plugins/rp-pppoe/Makefile.linux
    pppd/Makefile.linux
    pppdump/Makefile.linux
    pppstats/Makefile.linux

    ./configure --host=arm-linux --prefix=$PWD/tmp
    make CC=arm-linux-gcc
    make CC=arm-linux-gcc install
    cd tmp
    sudo cp * -rfd /work/nfs_root/fs_mini_mdev_new

    使用:
    A. 以mf637为例
    参考 HI3515海思开发板移植3G模块笔记 - 倔强的晓奇 - 博客频道 - CSDN.NET.htm
    http://blog.csdn.net/alangdangjia/article/details/9413009
    a. 用新内核启动开发板
    复制驱动: sudo cp drivers/usb/serial/*.ko /work/nfs_root/fs_mini_mdev_new
    b. 接上3G上网卡,用lsusb查看VID/PID
    lsusb
    Bus 001 Device 002: ID 19d2:2000

    c. 使用usb_modeswitch切换工作模式
    它需要一个配置文件,使用上面得到的VIP/PID在device_reference.txt里找到一段配置值,
    写入一个文件mf637.cfg
    把它放到开发板的/etc目录
    usb_modeswitch -c /etc/mf637.cfg(执行后lsusb会发现ID值有改变:TargetProduct

    d. 安装驱动程序
    insmod usbserial.ko
    insmod usb_wwan.ko
    insmod option.ko

    ls /dev/ttyUSB*会发现三个usb设备节点,pppd切换模式的时候使用其中一个串口,需要在/etc/ppp/peers/下的配置文件中指定然后尝试

    e. 用pppd拨号
    对于mf637:
    修改/etc/ppp/peers/wcdma-dailer, 使用/dev/ttyUSB2
    pppd call wcdma-dailer &
    cp /etc/ppp/resolv.conf /etc/resolv.conf
    ping news.qq.com

    B. 以EW65为例
    在device_refeence.txt里选取一段存为ew65.cfg
    板上接入EW65后执行:usb_modeswitch -c /etc/ew65.cfg
    修改/etc/ppp/peers/wcdma-dailer, 使用/dev/ttyUSB0
    pppd call wcdma-dailer &
    cp /etc/ppp/resolv.conf /etc/resolv.conf
    ping news.qq.com

    C. 中国电信:Benton/本腾 EQ10B (35元)
    在device_refeence.txt里选取一段存为eq10b.cfg
    板上接入EQ10B后执行:usb_modeswitch -c /etc/eq10b.cfg
    修改/etc/ppp/peers/evdo-dailer, 使用/dev/ttyUSB0
    pppd call evdo-dailer &
    cp /etc/ppp/resolv.conf /etc/resolv.conf
    ping news.qq.com

    D. 中国移动 ET128
    在device_refeence.txt里选取一段存为et128.cfg
    板上接入EQ10B后执行:usb_modeswitch -c /etc/et128.cfg

    D的设置需要参考下面文章,因为其使用的不是ttyUSB串口,其使用的是ttyACM:
    http://wenku.baidu.com/link?url=pVNn9okBYfUAHiNDBdtpGXselQ9uYVj1lKL5WPmEYaOpMawiYamLrtRcdRZgy5LslcPQL28ySW7q282o1VdBqciHZmsjaRsQ5Xj97oYDqce

    配置内核:
    -> Device Drivers
    -> USB support
    <M> USB Modem (CDC ACM) support

    sudo cp drivers/usb/class/cdc-acm.ko /work/nfs_root/fs_mini_mdev_new/

    ls /dev/ttyACM*
    /dev/ttyACM0 /dev/ttyACM1 /dev/ttyACM2

    根据下面的贴子修改td-dailer脚本:
    http://wenku.baidu.com/link?url=pVNn9okBYfUAHiNDBdtpGXselQ9uYVj1lKL5WPmEYaOpMawiYamLrtRcdRZgy5LslcPQL28ySW7q282o1VdBqciHZmsjaRsQ5Xj97oYDqce

    pppd call td-dailer &

    2. 编写控制程序自动使用各种型号3G上网卡
    a. usb_modeswitch -c /etc/... // 1. 对于不同的3G上网卡配置信息不一样
    b. insmod ...
    c. pppd call wcdma-dailer // 2. 对于不同的3G上网卡使用不同的/dev/ttyUSB
    pppd call evdo-dailer
    pppd call td-dailer

    写一个控制程序:
    a. 接上3G上网卡后它会调用usb_modeswitch并提供对应的配置信息
    b. 当识别出/dev/ttyUSB...后, 它创建一个链接文件/dev/gsmmodem指向拨号时要用的/dev/ttyUSB

    参考PC上对3G上网卡的识别过程:
    在PC上编译、安装: libusb-1.0.9.tar.bz2, usb-modeswitch-2.0.1.tar.bz2, usb-modeswitch-data-20131113.tar.bz2, ppp-2.4.5.tar.gz7
    重启电脑
    接上USB 3G上网卡
    分析PC操作过程:
    a. 从/lib/udev/rules.d/40-usb_modeswitch.rules可知
    接上3G上网卡后将执行: usb_modeswitch '%b/%k'
    执行的是:/lib/udev/usb_modeswitch
    它又会调用/usr/sbin/usb_modeswitch_dispatcher
    b. /usr/sbin/usb_modeswitch_dispatcher会调用usb_modeswitch进行模式切换
    它调用:/usr/sbin/usb_modeswitch -W -D -s 20 $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$configBuffer"
    它并不使用配置文件,而是使用-f参数, 这些参数来自/usr/share/usb_modeswitch
    在/usr/share/usb_modeswitch里有众多文件,已"vid:pid"为名

    /usr/sbin/usb_modeswitch_dispatcher根据3G上网卡的vid,pid找到/usr/share/usb_modeswitch里的文件,
    然后执行:usb_modeswitch -V vid -P pid -f "文件里的内容"

    以上操作见源码中写的应用程序,同时修改/etc/mdev.conf ,添加:

    usbdev[0-9]+.[0-9]+ 0:0 777 @ 3g_manager switch &MDEV > /dev/console//MDEV就是指的usbdev1.X设备

    可以实现插入网卡后自动切换
    c. 怎么创建接文件/dev/gsmmodem:(见代码里面的ln指令,同时修改etcppppeers下的配置文件把/dev/TTYUSBX改为/dev/gsmmodem)下面说明在/usr/sbin/usb_modeswitch_dispatcher中
    # The facility to add a symbolic link pointing to the
    # ttyUSB port which provides interrupt transfer, i.e.
    # the port to connect through.
    # Will check for interrupt endpoint in ttyUSB port (lowest if
    # there is more than one); if found, return "gsmmodem[n]" name
    # to udev for symlink creation
    /dev/gsmmodem是指向一个/dev/ttyUSBX, 这个/dev/ttyUSBX所对应的interface含有"中断类型的端点"
    如果有多个/dev/ttyUSBX有中断类型端点, 则/dev/gsmmodem指向最小的/dev/ttyUSBX

    以上操作见源码中写的应用程序,同时修改/etc/mdev.conf ,添加:

    TTYUSB[0-9]+ 0:0 777 @ 3g_manager link &MDEV > /dev/console//MDEV就是指的usbdev1.X设备

    可以实现插入网卡后自动切换

    怎么判断ttyUSB有无中断类型端点:
    # In case the device path is returned as /sys/class/tty/ttyUSB,
    # get the USB device path from linked tree "device"
    /* 1. 对于每一个/dev/ttyUSBX
    * 都有一个对应的/sys/class/tty/ttyUSBX
    * 2. 它是一个链接文件, 指向: /sys/......../1-1:1.0/ttyUSB0/tty/ttyUSB0(ls ttyUSB* -l)
    * 3. 进入/sys/......../1-1:1.0/   目录下查看,
    * 里面有多个"ep_"的子目录cat ep_01/type 可以查看端点类型
    * 4. 子目录里有名为type的文件
    * 5. 如果这个文件的内容为Interrupt, 则返回1
    *
    */

    参考文章:
    嵌入式Linux下3G USB Modem的使用 - 空之轨迹~约修亚 - 博客频道 - CSDN.NET.htm
    http://blog.csdn.net/ling1874/article/details/8148822
    http://wenku.baidu.com/link?url=HLRk3U9Jbr2Zx35e5knamYeUKYs14bhV3F9-hzC6rWMwdxCu2gTtAR89VBAdpoAF4UC9LmxCPxGLbjAu_XoSXuy065ZbbvfwtWm9vLy5UWe

    配置文件最全:
    HI3515海思开发板移植3G模块笔记 - 倔强的晓奇 - 博客频道 - CSDN.NET.htm
    http://blog.csdn.net/alangdangjia/article/details/9413009

    好文章:ppp及usb_modeswitch等工具移植说明_百度文库.htm
    http://wenku.baidu.com/link?url=Y7gsW5izmXwzur3VS3hGYWV_k_glZwzmu7Prdh_F69LuFxcOGT1LwhtsmXA3TVhR6F0l8_ozspcQvO08nlHex2yss0EW7wWIzysw9cZn-wu


    1. http://www.draisberghof.de/usb_modeswitch/
    http://www.libusb.org/

    wvdial arm移植笔记 .-UP-NETARM2410-ChinaUnix博客.htm
    http://blog.chinaunix.net/uid-20759926-id-3337026.html

    wvdial:
    http://alumnit.ca/wiki/index.php?page=WvDial

    How to interface USB modem to ARM board (for android or linux)
    http://embeddlinux.blogspot.com/2013/01/how-to-interface-usb-modem-to-arm-board.html


    嵌入式Linux下3G无线上网卡的驱动移植
    http://www.embeddedlinux.org.cn/html/yingjianqudong/201303/15-2489.html

    pppd
    ftp://ftp.samba.org/pub/ppp/


    嵌入式Linux下3G USB Modem的使用 - 空之轨迹~约修亚 - 博客频道 - CSDN.NET.htm
    http://blog.csdn.net/ling1874/article/details/8148822
    http://wenku.baidu.com/link?url=HLRk3U9Jbr2Zx35e5knamYeUKYs14bhV3F9-hzC6rWMwdxCu2gTtAR89VBAdpoAF4UC9LmxCPxGLbjAu_XoSXuy065ZbbvfwtWm9vLy5UWe

    配置文件最全:
    HI3515海思开发板移植3G模块笔记 - 倔强的晓奇 - 博客频道 - CSDN.NET.htm
    http://blog.csdn.net/alangdangjia/article/details/9413009

    好文章:ppp及usb_modeswitch等工具移植说明_百度文库.htm
    http://wenku.baidu.com/link?url=Y7gsW5izmXwzur3VS3hGYWV_k_glZwzmu7Prdh_F69LuFxcOGT1LwhtsmXA3TVhR6F0l8_ozspcQvO08nlHex2yss0EW7wWIzysw9cZn-wu

    udev详解-ChinaUnix操作系统频道.htm
    http://os.chinaunix.net/a2008/0626/982/000000982085.shtml


    Linux USB FAQ.htm
    http://www.linux-usb.org/FAQ.html

    lsusb
    https://www.kernel.org/pub/linux/utils/usb/usbutils/

    /lib/udev/usb_modeswitch /1-1
    if [ -e "/etc/init/usb-modeswitch-upstart.conf" ]; then
    exec /sbin/initctl emit --no-wait usb-modeswitch-upstart UMS_PARAM=$1

    /usr/sbin/usb_modeswitch_dispatcher --switch-upstart /1-1
    /sbin/initctl emit --no-wait usb-modeswitch-upstart UMS_PARAM=/1-1

    /usr/sbin/usb_modeswitch_dispatcher --switch-mode $1

    /usr/sbin/usb_modeswitch -W -D -s 20 -u -1 -b 1 -g 7 -v 19d2 -p 2000 -f # ZTE devices TargetVendor= 0x19d2 TargetProductList="0001,0002,0015,0016,0017,0019,0031,0037,0052,0055,0061,0063,0064,0066,0091,0108,0117,0128,0157,0177,1402,2002,2003" MessageContent="5553424312345678000000000000061e000000000000000000000000000000" MessageContent2="5553424312345679000000000000061b000000020000000000000000000000" MessageContent3="55534243123456702000000080000c85010101180101010101000000000000" NeedResponse=1

    # The facility to add a symbolic link pointing to the
    # ttyUSB port which provides interrupt transfer, i.e.
    # the port to connect through.
    # Will check for interrupt endpoint in ttyUSB port (lowest if
    # there is more than one); if found, return "gsmmodem[n]" name
    # to udev for symlink creation

    # This is run once for every port of LISTED devices by
    # an udev rule


    # In case the device path is returned as /class/tty/ttyUSB,
    # get the USB device path from linked tree "device"

  • 相关阅读:
    case when then 根据不同条件 查询不同的数据 相当于 if-else if-else
    完美的拼接sql语句,中间可以加字符等东西,
    C++抽象类
    C #引用NuGet程序包MySQLData问题
    win10磁盘100%占用解决方法
    C# ASP.NetCore 检测到包降级
    VS 命令“npm install”已退出的问题
    序列化和反序列化含义
    数据库MySQL忘记本地密码
    MongoDB授予权限
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/8921698.html
Copyright © 2011-2022 走看看