赞
踩
最近接到一个需求,把多个开发板通过USB连接,由一块主板通过USB,将AI计算任务分配给多个多块板同时计算,经过内部讨论,决定将USB虚拟成网卡,采用网络通信方式。为方便调试用PC代替一块开发板,如下图,三块板相连(下面PC和Board1用USB也是一样的,这里为方便就用网线)
目录
本人使用的开发板有三个USB OTG接口,首先修改dts,USB0用作peripheral,USB1用作Host,上面的图,Board1 USB1连接Board2的USB0(PC和Borad1直接的网线连接,也可以用Board1 USB0连接PC提到,为方便调试直接用网线)。
修改Linux内核配置,开启USB虚拟网卡功能(有很多相关文章,这里不做详细介绍),同时开启Netfilter部分功能(需要用到Netfilter NAT 数据包转发功能,下面Netfilter开启项比较多,有些项可以不用开启)
USB虚拟网卡相关配置可以参考:让Linux支持usb虚拟网卡。_我以为我爱了的博客-CSDN博客
编译内核,下载到开发板,配置好各开发板IP地址。
此时,Board1可以ping通PC,也可以ping通board2,如下图:
但是Board2 ping PC不通(Network is unreachable),如下图
由于Board2不知道192.168.10.10该怎么路由,ping命令直接返回网络不可达(没有对外发包)。
我们可以给Board2添加一个路由表项,告诉Board2 192.168.10.0网段的网关192.168.11.11(Borad1 USB0),即192.168.10.x的数据交由192.168.11.11转发。
添加路由表项后,ping 192.168.10.10,没有直接Network is unreachable,但是还是不通。
此时数据包到了Borad1 USB1口,在内核代码usbnet.c文件rx_process加一个打印qdmalib_dump_skb,打印出收到包的包头。
qdmalib_dump_skb打印函数如下
Board1日志可以看到, USB1收到了Board2发来的ICMP包,但是PC Wireshark抓不到相应的包,应为还没有在Borad1上开启NAT转发功能。
Borad1上开启NAT转发功能:
上面的设置重启后就不起效了,可以在/etc/sysctl.conf中增加net.ipv4.ip_forward = 1。
通过PC端通过Wireshark,可以看到,有收到Board2 192.168.11.12发过来的ICMP包,PC没有回复。
查看PC路由表,没有192.168.11.12所在网段表项,PC不知道192.168.11.12该怎么路由,所以没有回复收到的ICMP包。
直接在PC端增加静态路由,设置192.168.11.0网段网关192.168.10.11(也就是Board1的网口),之前已经在Borad1上开启了转发功能。
此时Board2 ping PC,可以ping通。
Wireshark抓包,可以看到ICMP源地址是Board2的IP地址
试一下,从PC端ping Borad2也可以。
上面的方式Board2 ping PC时,PC端收到ICMP包源地址还是Borad2的IP地址,我们改一下Board1配置,转发时,将Borad2 IP地址替换为Borad1 eth0口的IP地址(内网到外网转发就是如此实现的)。
在Board1上执行命令:
iptables -t nat -A POSTROUTING -d 192.168.10.0/24 -o eth0 -j MASQUERADE
发往192.168.10.0网段的数据,走eth0口转发,并且替换为eth0 IP地址。
此时Board2 ping PC也可以通,Wireshark抓包可以看到,收到的ICMP包Source IP变为了192.168.10.11(Board1 eth0的IP)。
iptables是一个开源的应用程序包,需要自己下载源码编译,具体参考下面两篇博客,这里不做详细介绍。
交叉编译iptables_iptables交叉编译_aaaLG的博客-CSDN博客
Linux之iptables(NAT表)讲解篇_iptables nat表_孤城286的博客-CSDN博客
三块开发板级联,同时Board1通过网口连接到PC
PC端配置:
Board1配置
Board2配置,这里eth0没有连接,忽略
Board3配置
从Board3可以ping通PC。
这里采用的是pc <--> board1 <--> board2 <--> board3,一级一级相连的方式,实际上采用星型拓扑连接方式也可以,需要相应的修改路由配置。
上面ping延时很多,是应为调试是开启了日志功能加了打印
最后觉得没必要采用iptables地址转换的方式转发,所以去掉部分配置,最终增加的配置
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。