【问题标题】:TCP/IP Protocol stack without an OS没有操作系统的 TCP/IP 协议栈
【发布时间】:2010-07-12 13:02:46
【问题描述】:

我正在寻找可以在没有操作系统的情况下使用的 TCP/IP 堆栈。我们的客户对中断有一种“厌恶”,并且不希望我们正在构建的嵌入式板上有真正的操作系统。由于我们将仅使用 50 到 100 MHz 的 Arm,因此希望将尽可能多的功能转移到 FPGA。而且我很确定这个客户不会接受 GPL 许可的东西。 (由于与之相关的法律泥潭。他们希望在软件完成后对软件拥有完全不受限制的权利。)

【问题讨论】:

  • 他们应该要求您说明您投票结束问题的原因。这不是一般查询,而是基于系统要求的具体问题?我需要一个 TCP/IP 堆栈,我不想从头开始编写它。我在哪里可以买到不需要操作系统的? (uIP 看起来很有潜力。)
  • 厌恶打断的原因是什么?客户是否有严格的实时限制?
  • 请尽可能不要发明像“no-os”这样的新标签。
  • @ninjalj - 厌恶的原因是什么?管理规范是从高处传下来的,直到时间结束!他们认为中断允许“不可预测”的行为,类似于 Java 对指针的恐惧。坏事会发生吗?在这两种情况下,如果您滥用中断或指针,是的,但我认为,无论您使用什么功能,只要您编写错误的代码都是如此。
  • @Neil - 没有操作系统是对系统的重大限制。如果您可以提供一个预先存在的标签来捕获该信息,我将很乐意使用它。但是我不知道一个。我没有将其标记为“ARM”标签,因为我不认为使用 ARM 会以任何显着方式限制系统,但是 No-os 是。

标签: embedded tcp arm bare-metal


【解决方案1】:

uIP(微型 IP)和lwIP(轻量级 IP)都是值得考虑的候选者。根据这两个堆栈的原始开发人员 - Adam Dunkel - 两者之间的主要区别之一是:“lwIP 比 uIP 大,但提供更好的吞吐量”。两种堆栈都采用修改后的 BSD 许可证,并已用于商业产品。

【讨论】:

  • 我们使用 uIP 和 lwIP 都取得了巨大的成功,两者都没有操作系统。我强烈推荐。如果你有空间,lwIP 似乎没有那么“神奇”,更容易理解。不过,uIP 最近似乎得到了更好的支持。
【解决方案2】:

这并不一定以您希望的方式回答您的问题(它不在 cmets 部分,因为我的谩骂可能会太长)。不过,我认为它可能仍然有用。

几点。我认为你应该重新教育你的客户关于中断的好处和成本。中断是处理设备控制的一种非常有效的方法,除非您对编码非常细致,否则您不太可能将性能与非中断驱动的代码相匹配。

其次,使用 GPL 软件赋予他们对软件的完全不受限制的权利,只是不允许他们限制其他人。如果您的意思是他们确实想要限制他人,那么我会问他们为什么认为他们应该有权使用他人的劳动而没有任何回馈。

您很可能能够在比 GPL 更宽松的许可下找到 TCP 堆栈(允许他们有效地关闭源代码)。如果你的 FPGA 有一个 C 编译器,你可以看看uIP,它有一个非常宽松的许可证:

版权所有 (c) 2001-2006,Adam Dunkels 和瑞典计算机科学研究所

保留所有权利。

只要满足以下条件,就允许以源代码和二进制形式重新分发和使用,无论是否经过修改:

  1. 源代码的再分发必须保留上述版权声明、此条件列表和以下免责声明。

  2. 二进制形式的再分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。

  3. 未经事先明确的书面许可,不得使用作者的姓名来认可或推广源自本软件的产品。

本软件由作者“按原样”提供,并提供任何明示或默示的保证,包括但不限于对适销性和特定用途适用性的默示保证 被拒绝。在任何情况下,作者均不对任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于购买替代品)承担责任 商品或服务;使用、数据或利润的损失;或业务中断),无论是由何种责任理论引起的,无论是合同、严格责任或侵权(包括疏忽或其他)以任何方式使用本软件引起的,即使已被告知存在此类损害的可能性。

就是这样,没有“必须根据 GPL 发布”或任何其他病毒性条款,唯一的归属是包含版权声明。

【讨论】:

  • 我过去曾尝试使用中断,但它违反了他们为所有系统调用的管理规范。基本上性能是该死的,如果有任何方法可以在不使用中断的情况下满足系统的要求,那么你就不应该使用中断。至于 GPL,他们永远不会向公众披露任何源代码,因此没有 GPL。 uIP 的实现有多完整?
  • 我认为这是一个糟糕的许可证 - “二进制形式”是什么意思。?这是否意味着在嵌入式系统中您必须将许可证文本刻录到 ROM 中?当人们编写自己的许可证时会发生这种情况 - 他们使他们的软件无法使用。
  • @Neil,通常我会认为只是将许可证文本放入您的文档中的某个位置(“...在文档中和/或...”)。某大型无名公司在使用第三方产品时也做了类似的事情——他们在 doco 中有自己的许可证,并且还声明使用了其他软件,并将所有其他许可证也放在那里。至于它有多糟糕,它肯定比 GPL 更容易理解和遵守——只需要担心三个条款。
  • 这是一个 BSD 许可证,作者、组织和年份已更改,以反映作者和组织是谁以及材料受版权保护的年份。 (opensource.org/licenses/bsd-license.php)
【解决方案3】:

目前我在 ARM Cortex-M3 上使用 lwIP 库,频率为 50MHz,没有操作系统。这是一个基于 Luminary Micro(现为 TI)Stellaris 串行到以太网参考设计套件 (http://www.luminarymicro.com/products/rdk-s2e.html) 的项目。

该套件包括源代码和原理图,为我们开发一些产品提供了坚实的基础。

我与 TI 或 Luminary 没有任何关系,只是一个非常满意的客户。

【讨论】:

    【解决方案4】:

    我为德州仪器公司的 16 位 DSP 在“裸机”上编写了以太网 + TCP 堆栈。缺少字节范围的寻址相当麻烦。一些数据结构每个字存储两个字节的数据,而另一些每个字存储一个字节(在 C 编译器中,'char' 和 'int' 都是有符号的 16 位类型)。以太网或 TCP 代码都没有使用中断;两者都在“尽可能方便地调用”例程中处理,该例程通常循环大约 100 次/秒。性能不是超级骗子,但通常是足够的。也许我的堆栈中最大的弱点是它不处理乱序数据包(乱序到达的数据包将被忽略;它们有望在预期的数据包到达后重新传输)。您正在寻找的东西肯定是可行的,但这并不一定意味着它值得付出努力。

    顺便说一句,我的 TCP 堆栈在端口 23 上支持一个相当有趣的“回显服务器”。任何数量的 telnet 客户端都可以连接到端口 23,并且它们发送的任何数据都会返回给它们。尽管该服务器只是回显数据,但它可以适应完全无状态地发送文档之类的东西。有人见过这样的吗?

    【讨论】:

    • 我也在使用 Code Composer Studio 在没有操作系统的 TI 板上开发相同的 DSP。我的以太网数据包包含捕获的原始数据,显示在以下链接 [s8.picofile.com/file/8356768868/8284_shot_PNG_1230x0.png].其中一些丢失了。你的作品有空吗?或者我可以和你分享我的来源吗?
    • @AhmadSiavashi:自从我查看该代码以来已经有大约十年了,我不太记得了。如果有乱序交付或碎片,您有什么处理方法?我的堆栈将数据包保持在 576 字节以下(包括标头)以避免碎片,并用于乱序交付通常不会成为问题的上下文(通常,乱序到达的数据包将被忽略且不被确认)导致它在一秒钟后重新传输)。
    【解决方案5】:

    只需添加一点说明,飞思卡尔的FNET 中有一个相当新的开源 TCP/IP 堆栈,旨在用于 MCU。它是 LGPL/GPLv3 许可的,与其他一些 BSD 许可的不同,因此它可能不适合原始发布者的项目,但它可能仍然与其他用户相关。它目前将 Kinetis (Cortex-M4) 以及一些 ColdFire 部件列为受支持的平台。

    【讨论】:

      【解决方案6】:

      好吧,我在研究 FNET 时偶然发现了这篇文章,虽然它很旧,但没有得到回答,所以我会加两分钱...... Micromonitor 是一个启动监视器,当独立运行时,它支持 TFTP 客户端/服务器、DHCP 客户端、ping 客户端/服务器和一个简单的基于 UDP 的命令行界面。 它包括演示应用程序,允许您将 LWIP 直接连接到 bootmonitor 使用的底层以太网驱动程序。这使得该演示可以在几乎没有任何变化的任何微显示器端口上使用。

      没有中断,没有 GPL……只是一个轮询循环。示例应用程序包括几个不同的连接:(LWIP、LUA、PICO-C、BWBASIC 等)。该演示包括一个 HTTP 服务器 (挂钩到 uMon 的 TFS 文件系统,因此您只需构建 html 基本文件)、基于 UDP 的命令服务器、telnet 客户端和 http-get 客户端。大多数演示是演示的扩展 LWIP 附带的。

      看看...http://www.umonfw.com

      【讨论】:

        【解决方案7】:

        您可以使用 Simulink Embedded Coder 来实现它。然后如果需要,可以修改生成的代码。 (当然,如果您有其他选择,例如上述解决方案之一,则不建议这样做。)

        【讨论】:

          猜你喜欢
          • 2022-01-15
          • 2012-02-05
          • 2018-06-25
          • 1970-01-01
          • 2014-05-27
          • 2012-10-17
          • 1970-01-01
          • 2020-09-26
          • 1970-01-01
          相关资源
          最近更新 更多