【问题标题】:is there a way to run network(socket) program in RISC-V?有没有办法在 RISC-V 中运行网络(套接字)程序?
【发布时间】:2016-06-30 08:36:06
【问题描述】:

我正在尝试在 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 中运行网络应用程序的方法吗?
  • 如果请求来自同一主机,即使没有网络设备,是否可以实际处理网络服务?
  • 还有其他有用的 cmets 或参考资料吗?

【问题讨论】:

    标签: linux sockets networking riscv


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。我在busybox 中添加了ifconfig 小程序,并使用ifconfig lo: 127.0.0.1 netmask 255.0.0.0 up 命令设置了环回网络。然后我运行了简单的回显服务器和客户端,但服务器和客户端分别挂在acceptconnect 上。环回网络似乎设置正确,因为如果我在未设置的情况下运行程序,connect 将失败并显示network unreachable。如果我有更新,我会添加到评论中。
    猜你喜欢
    • 2020-06-16
    • 2022-10-13
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2021-12-27
    • 2016-11-15
    相关资源
    最近更新 更多