首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将TCP端口/套接字路由到QEMU内部?

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

Stack Overflow用户
提问于 2020-06-02 16:01:06
回答 1查看 2.3K关注 0票数 1

我正在尝试运行FreeRTOS+TCP演示 (10.1.1版):

该代码是为Windows模拟器编写的,但我试图针对QEMU (Version4.2.0)模拟的Xilinx。主机是Ubuntu16.04。存在一个网络接口端口,用于FreeRTOS+TCPTCP部分,因此这应该是可能的。

对演示的一个明显的修改是改变消息的打印方式,并删除对Windows Sleep函数的调用。此外,我使用ARM半托管查看打印语句的输出。

除了这些更改之外,我还需要对命令行调用进行哪些更改?该演示创建一个TCP回显服务器和客户端。如果把它们绑在一起,就不需要把流量送到主机上了,对吧?有什么特别的事情我需要做才能让它起作用吗?我对人际关系没有太多的经验。

由于这在技术上是一个赤裸的应用程序,所以像-nic user,hostfwd=tcp::5022-:22这样的CLI选项给出了警告qemu-system-arm: warning: nic cadence_gem.1 has no peer. (在命令争论?中找到)。

如果我曾经想在主机和客户之间发送通信量(比如有一个ncat回送服务器,而不是在FreeRTOS中),我该怎么做呢?

下面是一个相关的问题,没有解决方案:使用QEMU运行LWIP TCP/IP堆栈

当前命令行参数:

代码语言:javascript
复制
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

当前输出(我启用了额外的调试消息):

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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和服务器能够相互连接?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-14 22:49:13

我建议试用qemu网络指南中列举的所有选项

  • SLIRP-netdev user,id=mynet0,net=192.168.76.0/24,dhcpstart=192.168.76.9
  • 水龙头-netdev tap,id=mynet0
  • 插座-netdev socket,id=mynet0,listen=:1234-netdev socket,id=mynet0,connect=:1234

指南中还有更多的东西。您可能还会考虑的是,您可能很难直接从所关心的VM移植到主机,并且可能更容易将该VM连接到另一个VM,并从该第二个VM移植到您的主机。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62156202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档