我试图在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
来处理网络服务。
总结问题:
答案 0 :(得分:0)
目前,spike和riscv-qemu都没有为网络接口提供模型。使用这两种工具,您将能够使用环回设备(127.0.0.1)进行流程之间的联网。环回网络由OS内核直接实现。
对于其他架构,qemu提供了大量的网络选项。修改riscv-qemu/hw/riscv/riscv_board.c以将这些虚拟网络接口之一实例化为模拟的risc-v系统应该不会太困难。