一个新的架构 “armvirt” 在2016年12月被添加到LEDE项目中. 这是运行在QEMU模拟器上的系统。
在没有物理路由的情况下,这会对测试修正非常有用。
可以手动构建镜像,或者从链接下载, 比如. armvirt lede-17.01的armvirt镜像.
这种方式会使用到 qemu-system-arm
, 因此你需要安装必要的软件包。
在 Debian:
apt-get install qemu qemu-system-arm
在 Arch Linux:
pacman -S qemu qemu-arch-extra
这是能用来测试一个镜像的最简单的方法。然而,它运行在内存中: 任何修改都会在重启后丢失.
这里我们用64MB的内存配置来启动:
qemu-system-arm -nographic -M virt -m 64 -kernel lede-armvirt-zImage-initramfs
qemu 有几种选项来提供网络连接来模拟镜像, 在qemu(1)中使用 -net
选项来查看.
qemu的默认网络模式是“用户模式网络栈(user mode network stack)”.
在这种模式下,qemu
作为一个出口连接代理(proxy). 它同样能为模拟系统提供DHCP和DNS服务功能.
给LEDE系统接入因特网,运行以下命令:
qemu-system-arm -net nic,vlan=0 -net nic,vlan=1 -net user,vlan=1 \ -nographic -M virt -m 64 -kernel lede-17.01.0-r3205-59508e3-armvirt-zImage-initramfs
这里,我们设置两张网卡到模拟的LEDE系统:
eth0
, 在LEDE作为LAN口(不用于连接外部网络)eth1
, 在LEDE作为WAN口, 并且连接到代理了所有tcp/udp请求的qemu
LEDE 系统将会在eth1
(通过DHCP/DHCPv6)获取到一个IPv4和IPv6地址. IPv4和IPv6地址段是10.0.2.0/24 和 fec0::/64 (qemu默认设置, 查看 qemu(1) 来设置其他地址段).
1).
LUCI 是LEDE的web管理界面. 如果你想要检查luci的工作原理,或者查看其他luci应用,这个设置会适合你。
注意: 这个设置需要一些高级权限 (在Linux下的CAP_NET_ADMIN
和 CAP_MKNOD
) ,因为使用sudo
会很方便的运行
保存以下脚本,并修改 IMAGE
变量为你的LEDE版本, 然后用sudo
运行
#!/bin/sh IMAGE=lede-17.01.0-r3205-59508e3-armvirt-zImage-initramfs LAN=ledetap0 # create tap interface which will be connected to LEDE LAN NIC ip tuntap add mode tap $LAN ip link set dev $LAN up # configure interface with static ip to avoid overlapping routes ip addr add 192.168.1.101/24 dev $LAN qemu-system-arm \ -device virtio-net-pci,netdev=lan \ -netdev tap,id=lan,ifname=$LAN,script=no,downscript=no \ -device virtio-net-pci,netdev=wan \ -netdev user,id=wan \ -M virt -nographic -m 64 -kernel $IMAGE # cleanup. delete tap interface created earlier ip addr flush dev $LAN ip link set dev $LAN down ip tuntap del mode tap dev $LAN
网络的运行原理:
eth1
, 在LEDE作为WAN口, 并且连接到代理了所有tcp/udp请求的qemu这种方式会启动的更快,但是只能当你的cpu架构和目标镜像的架构相同才能用。(ARM cortex-a15).
qemu-system-arm -nographic -M virt,accel=kvm -cpu host -m 64 -kernel lede-armvirt-zImage-initramfs
qemu-system-arm -nographic -M virt -m 64 -kernel lede-armvirt-zImage \ -drive file=lede-armvirt-root.ext4,format=raw,if=virtio -append 'root=/dev/vda rootwait'
qemu-system-arm -nographic -M virt -m 64 -kernel lede-armvirt-zImage \ -fsdev local,id=rootdev,path=root-armvirt/,security_model=none \ -device virtio-9p-pci,fsdev=rootdev,mount_tag=/dev/root \ -append 'rootflags=trans=virtio,version=9p2000.L,cache=loose rootfstype=9p'
# 开启一个名为armvirt0的模拟器 lkvm run -k lede-armvirt-zImage -i lede-armvirt-rootfs.cpio --name armvirt0
# 使用virtio-9p的rootfs lkvm run -k lede-armvirt-zImage -d root-armvirt/
# 停止 "armvirt0" lkvm stop --name armvirt0
# 停止所有 lkvm stop --all