zoukankan      html  css  js  c++  java
  • linux主机通过USB使用arm linux开发板网络

    一、配置开发板USB Gadget模式为rndis

    1.内核配置:

    Device Drivers  ---> 
        [*] USB support  --->   
            <*>   USB Gadget Support  ---> 
              <*>   USB Gadget Drivers (USB functions configurable through configfs)  ---> 
             [*]       Generic serial bulk in/out                                                                                   
                 [*]       Abstract Control Model (CDC ACM)                                                                               
              [*]       Object Exchange Model (CDC OBEX) 
                   [ ]       Network Control Model (CDC NCM)     
                   [ ]       Ethernet Control Model (CDC ECM)         
                   [ ]       Ethernet Control Model (CDC ECM) subset                
                   [*]       RNDIS                                                                                                  
                   [ ]       Ethernet Emulation Model (EEM)                                                                                 
                   [*]       Mass storage                                                                                                     
                   [ ]       Loopback and sourcesink function (for testing)                                                               
                   [*]       Function filesystem (FunctionFS)                                                                                 
                   [ ]       MTP gadget                                                                                                      
                   [*]       Uevent notification of Gadget state                                                                             
                   [*]       Audio Class 1.0                                                                                                 
                   [ ]       Audio Class 2.0                                                                                                  
                   [ ]       MIDI function                                                                                                    
                   [*]       HID function                                                                                                     
                   [*]       USB Webcam function                                                                                            
                   [*]       Printer function       

    2.配置USB Gadget模式为rndis

    可以在/etc/init.d目录下添加一个启动脚本:

    #!/bin/sh
    #
    # Start rndis
    #
    
    export CONFIGFS_HOME=/sys/kernel/config
    
    case "$1" in
      start)
            echo "Starting usb devices ..."
            # usb common configs.
    
            mount -t configfs none $CONFIGFS_HOME
            cd $CONFIGFS_HOME/usb_gadget
            mkdir -p demo/strings/0x409
            echo 0x18d1 > demo/idVendor
            echo 0xd002 > demo/idProduct
            echo 0x200 > demo/bcdUSB
            echo 0x100 > demo/bcdDevice
            echo "xxx" > demo/strings/0x409/manufacturer
            echo "composite-demo" > demo/strings/0x409/product
            echo "0123456789ABCDEF" > demo/strings/0x409/serialnumbermkdir -p demo/configs/c.1/strings/0x409
    
            echo "compsite-config" > demo/configs/c.1/strings/0x409/configuration
            echo 120 > demo/configs/c.1/MaxPower
    
            # config device
            /etc/init.d/usb/rndis   $1
    
            # enable UDC.
            echo 13500000.otg > demo/UDC   #13500000.otg根据/sys/class/udc/目录下文件得到
    
            ;;
      stop)
            echo "Stop usb devices ..."
            echo none > demo/UDC
            /etc/init.d/usb/rndis   $1
            ;;
      restart|reload)
            ;;
      *)
            echo "Usage: $0 {start|stop|restart}"
            exit 1
    esac
    
    exit $?

    /etc/init.d/usb/rndis脚本内容如下:

    # cat /etc/init.d/usb/rndis
    #!/bin/sh
    #
    # Start rndis....
    #
    
    cd $CONFIGFS_HOME/usb_gadget
    
    case "$1" in
      start)
            echo "Starting usb rndis devices ..."
    
            mkdir -p demo/functions/rndis.0
            if [ $? != 0 ]; then
                    echo "unable to create function rndis, check kernel config!"
                    exit 1
            fi
            ln -s demo/functions/rndis.0 demo/configs/c.1/
    
            ;;
      stop)
            echo "Stop usb rndis devices ..."
            if [ ! -d demo/configs/c.1/rndis.0 ];then
                    exit 0
            fi
    
            rm demo/configs/c.1/rndis.0
            rm demo/functions/rndis.0
    
            ;;
      restart|reload)
            ;;
      *)
            echo "Usage: $0 {start|stop|restart}"
            exit 1
    esac
    exit $?

    关于上述配置USB Gadget功能的解释,参见:通过configfs配置的Linux USB gadget 。

     二、arm linux开发板网络配置

    在/etc/init.d目录下写一个脚本启动dnsmasq服务:

    #!/bin/sh
    
    [ -f /etc/dnsmasq.conf ] || exit 0
    
    case "$1" in
            start)
                    printf "Starting dnsmasq: "
                    start-stop-daemon -S -x /usr/sbin/dnsmasq
                    [ $? = 0 ] && echo "OK" || echo "FAIL"
                    ;;
            stop)
                    printf "Stopping dnsmasq: "
                    start-stop-daemon -K -q -x /usr/sbin/dnsmasq
                    [ $? = 0 ] && echo "OK" || echo "FAIL"
                    ;;
            restart|reload)
                    $0 stop
                    $0 start
                    ;;
            *)
                    echo "Usage: $0 {start|stop|restart}"
                    exit 1
    esac
    
    exit 0

    dnsmasq配置文件/etc/dnsmasq.conf内容如下:

    dhcp-range=192.168.1.2,192.168.1.25,12h

    配置开发板上usb0 IP:

    ifconfig usb0 up

    ifconfig usb0 192.168.1.1

    使能开发板上网络转发功能:

    echo "1" > /proc/sys/net/ipv4/ip_forward
    #echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf
    #sysctl -p
    iptables -F
    iptables -t nat -F
    iptables -P INPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    通过上面配置 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 可以知道使用的是arm开发板上eth0网卡进行转发。

    如何配置arm linux开发板kernel层面支持ip_forward,参考:WIFI AP模式通过LAN网线上网 。

    三、Linux主机端操作

    使用如下命令给usb0分配IP地址:

    ifconfig usb0 up
    udhcpc -i usb0

    这时Linux主机端usb0拿到的IP地址理论上在192.168.1.2~25之间。

    使用 route -n 或者 netstat -r 查看一下Kernel IP routing table,如果有如下一行,表示路由OK:

    root@allen:~# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 usb0

    否则需要手动添加:

    route add default gw 192.168.1.1 dev usb0

    192.168.1.1为arm linux开发板上面给usb0网卡设置的IP地址。

    这时使用 ping www.baidu.com -I usb0 可以看到Linux主机已经可以通过USB使用arm linux开发板的网络去访问公网了。

    本文来自博客园,作者:王楼小子,转载请注明原文链接:https://www.cnblogs.com/wanglouxiaozi/p/15184831.html

  • 相关阅读:
    vue集成百度UEditor富文本编辑器
    HTTPS访问站点,出现证书问题解决(转载) 规格严格
    JSSE 提供的 动态 debug 追踪模式 规格严格
    javax.net.debug 规格严格
    Oralce null 规格严格
    pipe 规格严格
    (总结)ibatis 动态传入表名和列名 规格严格
    垃圾回收算法简介 规格严格
    转载(正则表达式的分类) 规格严格
    长度为0的数组 规格严格
  • 原文地址:https://www.cnblogs.com/wanglouxiaozi/p/15184831.html
Copyright © 2011-2022 走看看