linux - 有没有办法在 RISC-V 中运行网络(套接字)程序?

标签 linux sockets networking riscv

我正在尝试在 RISC-V 上运行一些网络程序(如 nginx)。

我不知道 RISC-V 上可用的网络设备,我不想自己实现它,所以我正在寻找其他方式。

首先,我尝试运行简单的程序,将 HTTP 请求发送到给定的地址。它使用 gethostbyname 解析 IP 地址并发送 HTTP 请求。

我在spike模拟器上成功运行了riscv-linux,并且编译了程序并运行了。 gethostbyname返回Unknown server error,当我直接使用IP地址时,connect返回Network is unreachable错误。

我发现前端服务器 fesvr 可以处理从 RISC-V 处理器转发的系统调用,并认为它可能会处理与网络相关的系统调用。我还找到了 fesvr-eth 并认为它可能与处理网络服务有关,但根据 this link它只是为了通过以太网将PC上运行的fesvr连接到开发板。此外,fesvr-eth 已从最新的 git 存储库中删除。

所以现在我想看看 risc-v linux,看看它实际上是如何处理像 connect 这样的网络系统调用的。我在想,如果网络操作仅在 localhost 内部完成,则无需网络设备也可以正确处理。或者可以有一种简单的方法来扩展 fesvr 来处理网络服务。

总结问题:

  • 有没有我错过的在 RISC-V 中运行网络应用程序的方法?
  • 如果请求来自同一主机,即使没有网络设备,网络服务是否真的可以处理?
  • 任何其他有用的评论或引用资料?

最佳答案

目前,spike 和 riscv-qemu 都没有提供网络接口(interface)模型。使用这两个工具,您将能够使用环回设备 (127.0.0.1) 在进程之间联网。环回网络由操作系统内核直接实现。

对于其他架构,qemu 提供了大量的网络选项。修改应该不会太难riscv-qemu/hw/riscv/riscv_board.c将这些虚拟网络接口(interface)之一实例化为模拟的 RISC-V 系统。

关于linux - 有没有办法在 RISC-V 中运行网络(套接字)程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38117905/

相关文章:

delphi - TCP 客户端未接收到来自 RTSP 服务器的响应

java - 使用 Elasticsearch JAVA API 将 network.publish_host 设置为客户端节点

java - 同一连接的客户端和服务器上的不同端口号

java - 在 Java 中处理内存不足情况的最佳方法是什么?

linux - 创建指向所有子文件夹的大量符号链接(symbolic link)

c - C 中奇怪的输出缓冲行为

sockets - 静态html页面直接创建WebSocket连接golang服务器

c++ - 手动检索和存储指向 OpenGL 函数的指针时出现问题

java - TcpSockets 无法连接

networking - UDP可以重传丢失的数据吗?