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

时间:2016-06-30 08:36:06

标签: 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 repo中删除。

所以现在我想看看和risc-v linux,看看它实际上如何处理像connect这样的网络系统调用。我想,如果网络操作只在localhost内完成,可以在没有网络设备的情况下正确处理。或者可以通过简单的方法扩展fesvr来处理网络服务。

总结问题:

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

1 个答案:

答案 0 :(得分:0)

目前,spike和riscv-qemu都没有为网络接口提供模型。使用这两种工具,您将能够使用环回设备(127.0.0.1)进行流程之间的联网。环回网络由OS内核直接实现。

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