[4 G]Linuxプラットフォームで4 G通信を実現する

25852 ワード

回転:http://blog.sina.com.cn/s/blog_7880 d 3350102 wb 92.
ARMプラットフォームの上で4 GモジュールのPPPダイヤルを実現してインターネットを利用して、ネット上の資料と自分の理解を参考にして、何も知らないから開発完成まで一週間以上かかりました.最後にARMボードのpingを見て、wwww.baidu.comを通した時はとても嬉しかったです.今はこの過程を下記のように整理します.もちろん、それ以外にもやるべき仕事はたくさんあります.
4 Gモジュールで使用するSIM TECH のSIM 7100 C、SIM 7100 CはUARTとUSBインターフェースを持っています.速度を考慮してUSBインターフェースとARMを使って通信します.3 Gモジュールの駆動(USBシリアルドライバ)とPPPプロトコルのサポートをlinuxカーネルに追加し、カーネルをコンパイルして開発ボードにダウンロードします.
仕事量は主に二つの部分が含まれています.普通はモジュールメーカーガイドにあります.
  • Linux駆動層のサポート
  • モジュール起動停止スクリプトデバッグ
  • 1. カーネルをコンパイルする
    ◇ 大容量メモリ駆動
    > Device Drivers > USB support
    make ARCH=arm menuconfig  USB  :
         USB Mass Storage support
    [*]       USB Mass Storage verbose debug
           Realtek Card Reader support
    [*]         Realtek Card Reader autosuspend support
           Datafab Compact Flash Reader support
    ◇ USBドライバ
    > Device Drivers > USB support
       Inventra Highspeed Dual Role Controller (TI, ADI, ...)   
                MUSB Mode Selection (Dual Role mode)  --->             
             Platform Glue Layer (TI DSPS platforms)  --->           
            MUSB DMA mode (Disable DMA (always use PIO))  --->
       USB Serial Converter support  --->
    [*]      USBGeneric Serial Driver 
         USBdriver for GSM and CDMA modems
    ◇ PPPドライバ
    > Device Drivers > Network device support
          PPP (point-to-point protocol) support         
             PPP BSD-Compress compression                         
             PPP Deflate compression                              
         [*]     PPP filtering                                            
             PPP MPPE compression (encryption)                          
         [*]     PPP multilink support                 
             PPP over Ethernet                 
             PPP support for async serial ports    
             PPP support for sync tty ports      
       SLIP (serial line) support      
    [*]   CSLIP compressed headers 
    2. クロスコンパイルlibus b
    usblibライブラリとlibusb-comptをダウンロードします.
    https://sourceforge.net/projects/libusb/files/
    root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# mkdir install
    configure: error: "udev support requested but libudev not installed"(  :  --disable-udev)
    root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# ./configure --host=arm-none-linux-gnueabi --prefix=/opt/usb-tools/libusb-1.0.20/install --disable-udev
    root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# make
    root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# make install 
    環境変数を追加 http://www.linuxidc.com/Linux/2011-03/33432.htm(PKGuCONFIGuPATH設定)
    root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# export PKG_CONFIG_PATH=/opt/usb-tools/libusb-1.0.20/install/lib/pkgconfig:$PKG_CONFIG_PATH
    root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# echo $PKG_CONFIG_PATH 
    リブンスb-comptをコンパイル:
    root@zhaoxc-VBox:/opt/usb-tools/libusb-compat-0.1.5# ./configure --host=arm-none-linux-gnueabi --prefix=/opt/usb-tools/libusb-compat-0.1.5/install
    root@zhaoxc-VBox:/opt/usb-tools/libusb-compat-0.1.5# make
    root@zhaoxc-VBox:/opt/usb-tools/libusb-compat-0.1.5# make install 
    生成したlibus b-1.0.20とlibus b-compt-0.1.5のライブラリファイルをARMボードのlinux/libの下にコピーすればいいです.
    3. クロスコンパイル4 Gモジュール駆動
    クロスコンパイルGobiSerial.c(ARCH=arm CC=arm-none-linux-gnueabi-gcc)は、Gobi Serial.koを得る.ARMボードにコピーしてドライバをインストールします.
    #insmod GobiSerial.ko
    4. 駆動運転状況を表示
    4 Gモジュールを挿して、6つのキティUSBを仮想します.それぞれ:
    root@am335x-evm:/# ls /dev/ttyUSB*
    /dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2  /dev/ttyUSB3  /dev/ttyUSB4  /dev/ttyUSB5
    1) /dev/ttyUSB0-diag port for output developing messages
    2) /dev/ttyUSB1- NMEA port for GPS NMEA data output
    3) /dev/ttyUSB2-AT port for AT commands
    4) /dev/ttyUSB3-Modem port for ppp-dial
    5) /dev/ttyUSB4-audio port
    6) /dev/ttyUSB5-Virtual Net card 
    USBメモリを挿入し、デバイスの運転を促す.
    [75097.986054] usb 2-1: New USB device found, idVendor=058f, idProduct=6387
    [75097.993167] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [75098.000689] usb 2-1: Product: Mass Storage
    [75098.004995] usb 2-1: Manufacturer: Generic
    [75098.009342] usb 2-1: SerialNumber: AC3DF2EE
    [75098.024341] usb-storage 2-1:1.0: USB Mass Storage device detected
    [75098.049922] scsi0 : usb-storage 2-1:1.0
    lsusbコマンドで結果を確認します.
    Bus 001 Device 002: ID 1e0e:9001
    Bus 002 Device 002: ID 058f:6387
    Bus 001 Device 001: ID 1d6b:0002
    Bus 002 Device 001: ID 1d6b:0002 
    5. クロスコンパイルPPP
    参照:http://blog.sina.com.cn/s/blog_7880 d 3350102 wb 3 e.
    6. ダイヤルアップスクリプトの設定
    root@am335x-evm:/etc/ppp# vi gprs-connect-chat
    #Chat script for China Mobile, used SIMCOM sim4100 TD module.
    TIMEOUT 15
    ABORT "DELAYED"
    ABORT "BUSY"
    ABORT "ERROR"
    ABORT "NO DIALTONE"
    ABORT "NO CARRIER"
    TIMEOUT 40
    '' \rAT
    OK ATS0=0
    OK ATE0V1
    OK AT+CGDCONT=1,"IP","CMNET"
    OK AT+CGEQREQ=1,2,128,384,,,0,,,,,,
    OK ATDT*99*1#
    CONNECT
    root@am335x-evm:/etc/ppp/peers菗vi gprsdial
    #/etc/ppp/peers/gprsdial
    # This is pppd script for China Mobile, used SIMCOM SIM7100 Module
    # Usage: root>pppd call gprs
    #Interface should be used is the interface which connects physics interface of S
    /dev/ttyUSB3
    115200
    crtscts
    modem
    #noauth
    debug
    nodetach
    #hide-password
    usepeerdns
    noipdefault
    defaultroute
    user "cmnet"
    0.0.0.0:0.0.0.0
    #ipcp-accept-local
    #ipcp-accept-remote
    #lcp-echo-failure 12
    #lcp-echo-interval 3
    #noccp
    #novj
    #novjccomp
    #persist
    connect '/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat'
    #disconnect '/bin/chat -v -f /etc/ppp/gprs-disconnect-chat'
    7. ダイヤル
    root@am335x-evm:pppd call gprsdial
    8. テスト
    ダイヤルしてテストしたら、pingはipを通すことができますが、ドメイン名をpingに通すことはできません.これはDNS解析サーバのアドレスを追加するために設定/etc/resoliv.coを必要とする.
    ファイル/etc/resoliv.co nfはDNSクライアントを構成しており、ホストのドメイン名検索順序とDNSサーバのアドレスを含んでおり、各行は一つのキーワードと一つ以上のスペースで区切られたパラメータを含むべきである.以下は例ファイルです. 
    domain test.com
    search www.test.com test.co
    nameserver 202.96.128.86
    nameserver 202.96.128.166
    nameserver   #  DNS    IP  
    domain       #      
    search       #         
    sortlist     #          
    主にnameserverのキーワードです.nameserverを指定していないとDNSサーバが見つからなくなります.他のキーワードは選択できます.
        ここには二つのDNSしか設置していません.
    nameserver 114.114.114.114
    nameserver 8.8.8.8
    参考文献:
    How to use the SIM 7100 module in Linux.pdf
    http://blog.csdn.net/hanmengaidudu/article/details/17099737
    http://www.linuxidc.com/Linux/2011-03/33430p2.htm
    http://www.linuxidc.com/Linux/2011-03/33430.htm
    --------------------私は分割線-------------------
    2016.11.25上記の部分のスクリプトに対して補足コメントを行いました.より分かりやすいです.
    PPPプロトコルの3つのコンポーネントは、PPPプロトコルのパッケージ方式、LCPプロトコル、NCPプロトコルを含む.ダイヤルアップ成功には確立プロセスが必要で、ダイヤルアップの双方がプロトコル規則に従って行う複数のインタラクションプロセスが必要です.
    PPP紹介参考文章:http://blog.sina.com.cn/s/blog_7880 d 335010 wr 3 z.
    ダイヤル設定のコメントは以下の通りです.
    ヽoo/etc/ppp/peers/gprsdial
    # This is pppd script for China Mobile, used SIMCOM SIM7100 Module
    # Usage: root>pppd call gprs
    #Interface should be used is the interface which connects physics interface of SIM7100 Module.
    /dev/ttyUSB3          //Modem port for ppp-dial
    115200                //     
    crtscts               //       
    modem                 //         。        。    ,pppd   CD  。
    #noauth               //         
    debug                 //        /var/log/messages
    nodetach              //
    #hide-password        // log           ,        
    usepeerdns            //      ,       DNS  .            /etc/ppp/ip-up      DNS1 DNS2,     USEPEERDNS   1.   pppd       /etc/ppp/resolv.conf file,                     。
    noipdefault           //         IP           ,            (      )  IP  。        ,        IPCP   (                  )     IP  。 
    defaultroute          //  IPCP        ,                  ,          。      ppp         。
    user "cmnet"          //
    0.0.0.0:0.0.0.0
    #ipcp-accept-local    //        ,pppd          IP     ,     IP            。
    #ipcp-accept-remote   //        ,pppd          IP     ,     IP            。
    #lcp-echo-failure 12  //        ,      n LCP            LCP      pppd          。        ,pppd       。              lcp-echo-interval   。                                   (e.g.,       )   pppd   。
    #lcp-echo-interval 3  //        ,pppd        LCP    (echo-request)  (frame)   。 Linux   ,     n                 。               (echo-reply)        。       lcp-echo-failure                。
    #noccp                //          。          PPPD                 ,       。
    #novj                 //      ,      Van Jacobson  TCP/IP     
    #novjccomp            //      ,   Van Jacobson  TCP/IP         ID  。Pppd     Van Jacobson    TCP/IP       ID  ,         。
    #persist              //        ,        。
    connect '/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat' //[    :      ]
    #disconnect '/bin/chat -v -f /etc/ppp/gprs-disconnect-chat'
    正常ダイヤルのプロセス印刷出力:
    timeout set to 15 seconds
    abort on (DELAYED)
    abort on (BUSY)
    abort on (ERROR)
    abort on (NO DIALTONE)
    abort on (NO CARRIER)
    timeout set to 40 seconds
    send (^MAT^M)
    expect (OK)
    AT^M^M
    OK
     -- got it
    send (ATS0=0^M)
    expect (OK)
    ^M
    ATS0=0^M^M
    OK
     -- got it
    send (ATE0V1^M)
    expect (OK)
    ^M
    ATE0V1^M^M
    OK
     -- got it
    send (AT+CGDCONT=1,"IP","CMNET"^M)
    expect (OK)
    ^M
    ^M
    OK
     -- got it
    send (AT+CGEQREQ=1,2,128,384,,,0,,,,,,^M)
    expect (OK)
    ^M
    ^M
    OK
     -- got it
    send (ATDT*99*1#^M)
    expect (CONNECT)
    ^M
    ^M
    CONNECT
     -- got it
    Script /usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat finished (pid 1633), status = 0x0
    Serial connection established.
    using channel 1
    Using interface ppp0
    Connect: ppp0  /dev/ttyUSB3
    Warning - secret file /etc/ppp/pap-secrets has world and/or group access
    sent [LCP ConfReq id=0x1 ]
    rcvd [LCP ConfReq id=0x0 ]
    No auth is possible
    sent [LCP ConfRej id=0x0 ]
    rcvd [LCP ConfAck id=0x1 ]
    rcvd [LCP ConfReq id=0x1 ]
    sent [LCP ConfAck id=0x1 ]
    sent [CCP ConfReq id=0x1 ]
    sent [IPCP ConfReq id=0x1 ]
    rcvd [LCP DiscReq id=0x2 magic=0x451b7dc9]
    rcvd [LCP ProtRej id=0x3 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]
    Protocol-Reject for 'Compression Control Protocol' (0x80fd) received
    rcvd [IPCP ConfReq id=0x0]
    sent [IPCP ConfNak id=0x0 ]
    rcvd [IPCP ConfRej id=0x1 ]
    sent [IPCP ConfReq id=0x2 ]
    rcvd [IPCP ConfReq id=0x1]
    sent [IPCP ConfAck id=0x1]
    rcvd [IPCP ConfNak id=0x2 ]
    sent [IPCP ConfReq id=0x3 ]
    rcvd [IPCP ConfAck id=0x3 ]
    Could not determine remote IP address: defaulting to 10.64.64.64
    local  IP address 10.19.25.49
    remote IP address 10.64.64.64
    primary   DNS address 211.136.112.50
    secondary DNS address 211.136.150.66
    Script /etc/ppp/ip-up started (pid 1639)
    Script /etc/ppp/ip-up finished (pid 1639), status = 0xff
     pppdスタートモジュールは、自動的に/etc/pppの下にreolv.comファイルを作成します.中には対応するDNS解析サーバがあります.これは、/etc/resoliv.comの4 GモジュールDNSの代わりになります.