我正在尝试在 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/