开发板一般最稳定的接口就是USB串口,而Linux中g_ether
module允许我们将usb虚拟化为网卡,
这样我们的开发板就可以通过这块虚拟网卡借助host PC的代理连接到外部互联网。
本文参考了: How to USB device networking
Compile linux kernel with USB_ETH
Support
在交叉编译arm的内核时我们需要配置kernel,开启USB_ETH支持:
默认是不支持的,根据搜索结果开起来就可以了
1 | Symbol: USB_ETH [=n] |
Enable g_ether
Device
通过指定参数dev_addr
和host_addr
可以制定虚拟网卡在device和host PC显示的MAC地址,方便我们host PC配置IP.
1 | sudo modprobe g_ether dev_addr="00:FF:FF:FF:FF:FF" host_addr="5a:77:1e:af:8e:9e" |
如果这个mod是自动加载的,可以在kernel启动参数里面加上g_ether.dev_addr=XX:XX:XX:XX:XX:XX g_ether.host_addr=XX:XX:XX:XX:XX:XX
成功之后使用ifconfig usb0
将可以看到相应的网卡信息,输出类似于:
1 | usb0 Link encap:Ethernet HWaddr BE:B5:85:EF:48:33 |
为其分配一个IP(这里是TARGET_USB_IP
),并添加路由
1 | HOST_USB_IP=10.0.1.1 |
host PC
当板子上的虚拟网卡成功配置后,hostPC的log中会有相应的信息:
1 | kernel: [1638241.377831] usb 1-4.4.2: new high speed USB device using ehci_hcd and address 47 |
也能看到相应的网卡信息:
1 | ifconfig usb0 |
这个时候只要为host PC的这块网卡分配一个IP即可与板子通信
1 | HOST_USB_IP=10.0.1.1 |
利用上一篇所述的代理, 板子只要使用HOST_USB_IP:port
即可利用host PC代理到外部网络。
引用的链接里还有NFS和Domain Server的相关配置,因为我没怎么用到就省略啦。
Note
host PC的路由表几分钟就会刷新,所以为了保证这条信息一直有,在相关配置文件添加这个ip比较好,如果有图形化界面的话 在网络设置里面为这块虚拟网卡分配相应的IP即可,由于我们配置的这块虚拟网卡是固定MAC地址的,因此配置一次后以后只要两者相连,IP就会自动分配了。