Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何将内部TCP端口/套接字路由到QEMU?_Sockets_Tcp_Qemu_Freertos_Bare Metal - Fatal编程技术网

Sockets 如何将内部TCP端口/套接字路由到QEMU?

Sockets 如何将内部TCP端口/套接字路由到QEMU?,sockets,tcp,qemu,freertos,bare-metal,Sockets,Tcp,Qemu,Freertos,Bare Metal,我正在尝试运行(10.1.1版): 代码是为Windows模拟器编写的,但我正试图以Xilinx Zynq为目标,由(版本4.2.0)模拟。主机是Ubuntu 16.04。存在一个 对于FreeRTOS+TCP的TCP部分,这应该是可能的 对演示的一个明显修改是更改消息的打印方式,并删除对WindowsSleep功能的调用。此外,我还使用查看打印语句的输出 除了这些更改之外,我还需要对命令行调用进行哪些更改?演示创建了一个TCP echo服务器和客户端。如果这些连接在一起,那么就不需要向主机发送

我正在尝试运行(10.1.1版):

代码是为Windows模拟器编写的,但我正试图以Xilinx Zynq为目标,由(版本4.2.0)模拟。主机是Ubuntu 16.04。存在一个 对于FreeRTOS+TCPTCP部分,这应该是可能的

对演示的一个明显修改是更改消息的打印方式,并删除对Windows
Sleep
功能的调用。此外,我还使用查看打印语句的输出

除了这些更改之外,我还需要对命令行调用进行哪些更改?演示创建了一个TCP echo服务器和客户端。如果这些连接在一起,那么就不需要向主机发送流量,对吗?我需要做什么特别的事情才能让它工作吗?我没有太多的社交经验

由于这在技术上是一个纯金属应用程序,CLI选项(如
-nic user,hostfwd=tcp::5022-:22)会发出警告
qemu系统arm:warning:nic cadence_gem.1没有对等方。
(位于)

如果我真的想在主机和客户机之间发送流量(比如使用
ncat
echo服务器,而不是在FreeRTOS中),我该怎么做呢

这是一个相关的问题,没有解决方案:

当前命令行参数:

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
当前输出(我启用了额外调试消息):

然后,下一位无限期重复,每次使用不同的套接字编号:

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客户端和服务器可以相互连接?

我建议尝试下列选项:
-:
-netdev用户,id=mynet0,net=192.168.76.0/24,dhcpstart=192.168.76.9

-:
-netdev点击,id=mynet0

-:
-netdev套接字,id=mynet0,listen=:1234
-netdev套接字,id=mynet0,connect=:1234

指南中还有更多内容。你可能会考虑的事情是,你可能很难直接从你关心主机的虚拟机端口转发,并且将VM连接到另一个VM并将端口从第二个VM转发到主机可能更容易。 听起来有点奇怪,但这是我以前需要做的事情。我发现在两个虚拟机之间交谈是最好的方法。它们的工作原理有点像“虚拟交叉电缆”


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

谢谢您的建议。我制作了两个版本的代码,一个运行服务器任务,另一个运行客户端任务。我已将qemu调用的网络部分分别更改为:
-nic socket,id=n1,mac=00:17:34:51:68:65,listen=:2222
-nic socket,id=n2,mac=00:17:34:51:68:66,connect=127.0.0.1:2222
。现在,客户端任务取得了比以前更多的进展,但服务器仍然无法连接。我会继续写下去,但是任何其他的建议都将不胜感激。继续写下去。在使用QEMU开发时,总是会出现“我的QEMU命令是否有问题?”和“我的VM是否有问题?”。最好的方法是首先确定并确信如何虚拟化您的环境。我相信你的QEMU命令是正确的。现在是时候问一个网络问题了。
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