gpt4 book ai didi

sockets - 如何路由QEMU内部的TCP端口/套接字?

转载 作者:行者123 更新时间:2023-12-03 12:02:38 24 4
gpt4 key购买 nike

我正在尝试运行FreeRTOS+TCP demo(版本10.1.1):

该代码是为Windows模拟器编写的,但是我试图针对由QEMU(版本4.2.0)模拟的Xilinx Zynq。主机是Ubuntu 16.04。存在一个
FreeRTOS + TCP TCP 部分的Network Interface port,因此应该可行。

该演示的明显修改之一是更改了消息的打印方式,并删除了对Windows Sleep函数的调用。另外,我正在使用ARM semihosting来查看打印语句的输出。

除了这些更改,我还需要对命令行调用进行哪些​​更改?该演示创建一个TCP回显服务器和客户端。如果将它们 bundle 在一起,则无需向主机发送任何流量,对吗?为了使它正常工作,我需要做些特别的事情吗?我没有大量的网络经验。

由于从技术上讲这是裸机应用程序,因此像-nic user,hostfwd=tcp::5022-:22这样的CLI选项会给出警告qemu-system-arm: warning: nic cadence_gem.1 has no peer.(位于How to replace `qemu-system -redir` command argument?)。

如果我确实想在主机和 guest 之间发送流量(例如使用ncat回显服务器,而不是在FreeRTOS中),我该怎么做?

这是一个相关的问题,没有解决方案:
Running LWIP TCP/IP Stack with QEMU

当前命令行参数:

qemu-system-arm -semihosting --semihosting-config enable=on,target=native -nographic -serial mon:stdio -machine xilinx-zynq-a9 -m 512M -cpu cortex-a9 -nic user,hostfwd=tcp::12346-:7 -kernel build/rtos_demo_tcp/rtos_demo_tcp.elf

当前输出(我启用了额外的调试消息):
qemu-system-arm: warning: nic cadence_gem.1 has no peer
Seed for randomiser: 1591112953
Random numbers: 00001294 00001925 000022D0 00005CC3
FreeRTOS_IPInit
vTaskStartScheduler
prvIPTask started
Network buffers: 30 lowest 30


IP Address: 10.2.118.223
Subnet Mask: 255.255.255.0
Gateway Address: 10.2.118.1
DNS Server Address: 208.67.222.222


Socket 7 -> 0ip:0 State eCLOSED->eTCP_LISTEN

然后,下一位无限期地重复,每次使用不同的套接字号:
FreeRTOS_connect: 14207 to a0276dfip:7
Socket 14207 -> a0276dfip:7 State eCLOSED->eCONNECT_SYN
ARP for a0276dfip (using a0276dfip): rc=0 00:00:00 00:00:00
Network buffers: 30 lowest 29
Connect[a0276dfip:7]: next timeout 1: 500 ms
ARP for a0276dfip (using a0276dfip): rc=0 00:00:00 00:00:00
Connect[a0276dfip:7]: next timeout 2: 500 ms
ARP for a0276dfip (using a0276dfip): rc=0 00:00:00 00:00:00
Connect[a0276dfip:7]: next timeout 3: 500 ms
Connect: giving up a0276dfip:7
Socket 14207 -> a0276dfip:7 State eCONNECT_SYN->eCLOSE_WAIT
FreeRTOS_closesocket[14207 to a0276dfip:7]: buffers 30 socks 1

摘要:如何更改调用QEMU的方式,以便TCP客户端和服务器可以相互连接?

最佳答案

我建议尝试使用qemu networking guide中列举的所有选项:
-SLIRP:-netdev user,id=mynet0,net=192.168.76.0/24,dhcpstart=192.168.76.9-TAP:-netdev tap,id=mynet0-SOCKET:-netdev socket,id=mynet0,listen=:1234-netdev socket,id=mynet0,connect=:1234
指南中还有更多内容。您可能还会考虑的一件事情是,您可能难以直接从您关心的VM移植到主机,并且可能更容易将该VM连接到另一个VM并从第二个VM移植到您的主机。主持人。

听起来有些奇怪,但这是我之前需要做的事情。在两个VM之间进行交谈,我发现sockets是最好的方法。它们的工作有点像“虚拟交叉电缆”。

这种VM到VM的方法将使您只需在每个VM上设置相应的静态IP和子网,然后ncat便可以在它们之间工作。消除DHCP服务器的所有复杂性和任何类型的端口转发。

关于sockets - 如何路由QEMU内部的TCP端口/套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62156202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com