网络是linux系统最为重要的功能之一,为此我们迫切需移植网络支持,实现一个稳定的网卡驱动和相应的外设是比较麻烦的,考虑到之前已经完善好虚拟机串口的外设,所以可以直接让以太网帧在串口上传输。虚拟机端则可以利用宿主机的tuntap虚拟网卡转发数据。
1.虚拟机实现:
虚拟机里添加第二个串口,中断号2,实现4个虚拟网卡函数。
.interrupt_id = 2,
.readable = slip_tun_readable,
.read = slip_tun_read,
.writeable = slip_tun_writeable,
.write = slip_tun_write,
虚拟机串口网卡外设使用linux的tuntap虚拟网卡/dev/net/tun, 打开了两个线程,slip_out_task_proc、tun_out_task_proc,分别处理由虚拟机串口发出的数据和虚拟网卡发出的数据,使用SLIP协议进行数据帧和数据流之间的适配。由于虚拟机线程不能被阻塞,所以中间加入两个方向的fifo提高效率,利用fifo的状态实现串口readable,writeable的状态判断。
2.虚拟机内系统配置:
内核需要开启Universal TUN/TAP device driver support 这个选项支持。
这里有一个之前写的工具可以利用,ethoslip_tun(地址),这个工具是之前调试串口WIFI模块时写的,功能是将tuntap虚拟网卡的L2数据帧使用SLIP协议封装成串口数据流。ethoslip_tun 具体流程:
tap0 <tuntap内核驱动> /dev/net/tun <系统调用> [ethoslip_tun] <系统调用> /dev/ttySx <串口驱动> 串口外设
首先我们将ethoslip_tun下载,然后使用arm-linux-gnueabi-gcc 交叉编译,拷贝到buildroot的rootfs里,即可运行。
./ethoslip_tun /dev/ttyS1 115200&配置IP地址:
ifconfig tap0 10.0.0.23.虚拟机外系统配置:
只需要配置IP地址即可,与虚拟机不同。
ifconfig tap0 10.0.0.1此时可以互相ping通:
我们尝试在虚拟机里新建一个index.php
vi index.php
<?php
phpinfo();
运行:
php -S 0.0.0.0:80
此时即可看到一个虚拟机里网页。。。😀
当然,虚拟机想要wget什么访问外网的话,只要配置宿主机的iptables,将虚拟网卡网段数据转发给物理网卡,同时虚拟机内添加默认gw。



没有评论:
发表评论