arm linux開發板通過USB橋接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。
二、Linux主機端操作
使用如下命令給usb0分配IP地址:
ifconfig usb0 up ifconfig usb0 192.168.1.2
使能Linux主機端網路轉發功能:
#! /bin/sh
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -P FORWARD ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.1.0/24
通過上面配置iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.1.0/24可知允許192.168.1.0~255 IP地址的網路轉發。
注意:
如果Linux主機系統自帶的網路管理程式在執行,網路管理程式檢測到主機端usb0的網路不通時,可能會清除上面手動給usb0設定的IP地址。這時需要我們關掉主機端的網路管理程式,如果是ubuntu系統,執行/etc/init.d/network-manager stop即可。
三、arm linux開發板網路配置
配置開發板上usb0 IP:
ifconfig usb0 up
ifconfig usb0 192.168.1.1
route add deafult gw 192.168.1.2 dev usb0
192.168.1.2為Linux主機端usb0網絡卡的IP地址。
使用route -n 或者netstat -r檢視一下Kernel IP routing table,如果有如下一條,表示路由OK:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.2 0.0.0.0 UG 0 0 0 usb0
192.168.1.2為Linux主機上面給usb0網絡卡設定的IP地址。
這時使用ping www.baidu.com -I usb0可以看到arm linux開發板已經可以通過USB橋接Linux主機的網路去訪問公網了。
本文來自部落格園,作者:王樓小子,轉載請註明原文連結:https://www.cnblogs.com/wanglouxiaozi/p/15186553.html