使用 QEMU 从主机 运行 raspbian 获取 ping 'DUP' 响应
Getting ping 'DUP' response from host machine running raspbian buster lite image with QEMU
I 运行 raspbian 图像使用以下命令:
qemu-system-arm -kernel kernel-qemu-4.19.50-buster -cpu arm1176 -m 256 -M versatilepb -dtb versatile-pb.dtb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -drive "file=2020-02-13-raspbian-buster-lite.img,index=0,media=disk,format=raw" -net user,hostfwd=tcp::5022-:22 -net nic -net user,smb=/dev/shm/
引导映像成功完成。
使用来宾机器,我得到以下路由 table:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 202 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
现在,在 10.0.2.2 处 ping 网关时工作正常,但在 10.0.0.138 处 ping 主机或主机网关时,我得到:
pi@raspberrypi:~$ ping 10.0.0.138
PING 10.0.0.138 (10.0.0.138) 56(84) bytes of data.
64 bytes from 10.0.0.138: icmp_seq=1 ttl=255 time=1.19 ms
64 bytes from 10.0.0.138: icmp_seq=1 ttl=255 time=1.23 ms (DUP!)
我确认 10.0.0.138 没有被定义为广播地址,并且没有 IP 重复。知道如何从这里调试吗?谢谢
正如 Peter Maydell 所建议的那样,将两个选项合并为一个“-net user,smb=/dev/shm/,hostfwd=tcp::5022-:22”解决了这个问题。
这是因为 QEMU 为每次在命令行上使用 '-net user' 创建一个新的 'user' 网络后端,所以在原始命令行中有两个后端,每个都响应 ping数据包。
I 运行 raspbian 图像使用以下命令:
qemu-system-arm -kernel kernel-qemu-4.19.50-buster -cpu arm1176 -m 256 -M versatilepb -dtb versatile-pb.dtb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -drive "file=2020-02-13-raspbian-buster-lite.img,index=0,media=disk,format=raw" -net user,hostfwd=tcp::5022-:22 -net nic -net user,smb=/dev/shm/
引导映像成功完成。 使用来宾机器,我得到以下路由 table:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 202 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
现在,在 10.0.2.2 处 ping 网关时工作正常,但在 10.0.0.138 处 ping 主机或主机网关时,我得到:
pi@raspberrypi:~$ ping 10.0.0.138
PING 10.0.0.138 (10.0.0.138) 56(84) bytes of data.
64 bytes from 10.0.0.138: icmp_seq=1 ttl=255 time=1.19 ms
64 bytes from 10.0.0.138: icmp_seq=1 ttl=255 time=1.23 ms (DUP!)
我确认 10.0.0.138 没有被定义为广播地址,并且没有 IP 重复。知道如何从这里调试吗?谢谢
正如 Peter Maydell 所建议的那样,将两个选项合并为一个“-net user,smb=/dev/shm/,hostfwd=tcp::5022-:22”解决了这个问题。
这是因为 QEMU 为每次在命令行上使用 '-net user' 创建一个新的 'user' 网络后端,所以在原始命令行中有两个后端,每个都响应 ping数据包。