代码之家  ›  专栏  ›  技术社区  ›  jatinBatra

关于嵌入式固件开发[已关闭]

  •  -3
  • jatinBatra  · 技术社区  · 6 年前

    在过去的几天里,我发现嵌入式硬件顶部的RTOS层有多么重要。 我的问题是: 设备驱动程序之间是否存在任何分歧(用C编写,直接在微控制器上运行) Linux设备驱动程序呢?

    1 回复  |  直到 6 年前
        1
  •  1
  •   linuxfan says Reinstate Monica    6 年前

    这个问题有点宽泛,但可以给出一个答案,一个本身有点宽泛的答案。

    其广泛性源于“嵌入式硬件”不是一个精确的术语。硬件范围从4位微控制器或8针微控制器,到大型CPU,这些CPU与linux机器(台式机和服务器)上使用的典型处理器有许多共同点。Linux本身可以定制到与普通操作系统不同的程度。

    总之,有几件事,通常可以接受,可以如下。Linux是 ,在它的“普通”版本中,是一个实时操作系统,与RTOS一词相反,暗示了“实时”部分。所以,这可能是一个分歧。但我认为,最重要的是嵌入式固件试图解决硬件问题 在没有添加任何其他内容的情况下要完成的任务。相反,Linux O.S.是通用的,这意味着它提供了许多在许多情况下不需要的服务和功能,只会带来更高的成本、更低的性能和更复杂的问题。

    通常,在中小型嵌入式系统中,甚至没有“驱动程序”:硬件和应用程序直接相互通信。当然,当硬件(或多或少)是标准的(如USB端口、以太网控制器、串行端口)时,编程框架可以提供随时可用的软件,有时被称为“驱动程序”——但通常它不是驱动程序,而只是一个库,其中包含一组用于初始化设备和交换数据的函数。应用程序使用这些库例程直接管理设备。O.S.层不存在,或者,如果程序员想要使用RTOS,他必须检查是否没有问题。

    Linux驱动程序的目标不是应用程序,而是内核。而且应用程序很少与驱动程序对话,而是使用统一的语言(尤其是“文件系统习惯用法”)与内核对话,内核反过来代表应用程序调用驱动程序。

    我非常熟悉的一个简单示例是串行端口。在Linux下,打开一个文件(可能是/dev/ttyS0),使用一些IOCTL和类似的方法进行设置,然后开始读写该文件。您甚至不在乎中间是否有一个驱动程序,而驱动程序是在不了解应用程序的情况下编写的——驱动程序只与内核交互。

    相反,在许多嵌入式情况下,您可以设置串行端口直接写入硬件寄存器;然后编写两个中断例程,对串行端口进行读写,从ram缓冲区获取数据并将其放入ram缓冲区。应用程序直接将数据读写到这些缓冲区。特殊事件(或不太特殊的事件)可以直接从中断处理程序向应用程序发送信号。有时我直接在中断例程中实现串行协议(校验和、数据包、序列)。它更快、更简单,并且使用更少的资源。但很明显,这一软件不再是常识上的“驱动程序”。

    希望这个答案至少解释了整个情况的一部分,这是非常大的。