我的问题是以太网/套接字调用。在 Linux 中,我们有 sendto 和 recvfrom 调用来从通过以太网连接的外部设备发送和接收数据。现在我在 U-Boot 上执行我的代码作为一个独立的应用程序。我需要替换这些应该独立于操作系统的套接字调用。
U-Boot 中是否提供了任何 API/驱动程序,以便我可以直接使用它们并将数据传输到目标板或从目标板传输数据?如果是这样,我应该在哪里检查特定于处理器的驱动程序?我找不到它。我使用的板是基于 MPC8548E 处理器的定制板。
U-Boot 独立API确实支持原始以太网数据包 eth_send() 和 eth_receive()。但是,这比 Linux 套接字的功能要少得多。
UDP 上的协议,例如 DHCP 和 TFTP 在 U-Boot 命令中实现(尽管这些协议未在独立 API 中导出)。如果您需要更多的功能,例如 TCP,您可能需要一个操作系统,即 Linux,而不是 U-Boot。
理想情况下,现有命令可以满足您的需求。例如,您可以在通过命令行调用的独立应用程序中组装文件内容,然后使用现有命令 tftpboot 传输文件。或者您可以在 u-boot 而不是独立应用程序中实现自定义命令;您可以从现有协议的实现中复制/粘贴。
如果您确实追求独立应用程序,请参阅examples/api/demo.c。这显示了独立 API 的能力和局限性。如果您有自定义 u-boot 的源代码,demo.bin 将在构建输出中(确保您的板 config.h 中有#define CONFIG_API),它可能只是在您的板上加载/运行而无需进一步模组。对于 eth 接口,它将使用 ethact,并发送一个填充为 00 的数据包。板特定的驱动程序已经在您的 u-boot 中。
U-Boot 独立 API 确实支持原始以太网数据包 eth_send() 和 eth_receive()。但是,这比 Linux 套接字的功能要少得多。
这一点我更感兴趣。据我了解,我们可以从 U-Boot 中导出 eth_send() 和 eth_receive() 函数,并在独立应用程序中使用它们。正确的?功能少了,这是什么意思?通过使用 Linux 套接字,我传输了原始以太网帧。这是按照以下链接完成的: http : //aschauf.landshut.org/fh/linux/udp_vs_raw/ch01s03.html 我不能在这里使用 eth_send 和 eth_receive 函数实现类似的功能吗?我的独立应用程序是:创建一个包含 60 个元素的无符号字符缓冲区,并尝试通过调用 eth_send() 来发送它们,如下所示: ethSendVar = eth_send (txFrame, 60); 这是正确的做法吗?当我这样做时,板子会在我在代码中调用 eth_send () 的地方自动重置。
理想情况下,现有命令可以满足您的需求。例如,您可以在通过命令行调用的独立应用程序中组装文件内容,然后使用现有命令 tftpboot 传输文件。或者您可以在 u-boot 而不是独立应用程序中实现自定义命令;您可以从现有协议的实现中复制/粘贴。
这实际上是暂时没有兴趣的。我应该只能从应用程序发送和接收。