关于嵌入式固件开发



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

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

这种广泛性来自于这样一个事实,即"嵌入式硬件"不是一个精确的术语。该硬件的范围从4位微控制器或8针微控制器到大型CPU,这些CPU与Linux机器(台式机和服务器(上典型使用的典型处理器有许多共同点。Linux本身可以定制,直到它不再像普通的操作系统。

无论如何,一些事情,通常可以接受,可以是以下内容。Linux在其"普通"版本中不是实时操作系统 - 使用术语RTOS代替,暗示了"实时"部分。所以,这可能是一个分叉。但我认为,最重要的是,嵌入式固件试图在不添加任何其他内容的情况下处理硬件要完成的任务。相反,Linux O.S.是通用的 - 这意味着它提供了许多服务和功能,在许多情况下,这些服务和功能是不需要的,只会提供更多的成本,更少的性能,更多的复杂性。

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

Linux 驱动程序不针对应用程序,而是针对内核。应用程序很少与驱动程序通信 - 而是使用统一的语言(典型的"文件系统习惯用法"(与内核通信,内核又代表应用程序调用驱动程序。

我非常熟悉的一个简单的例子是串行端口。在Linux下,你打开一个文件(可能是/dev/ttyS0(,使用一些IOCTL等来设置它,然后开始读取和写入该文件。你甚至不在乎中间有一个驱动程序,驱动程序是在不了解应用程序的情况下编写的 - 驱动程序只与内核交互。

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

希望这个答案至少能解释整个画面的一部分,这是非常大的。

最新更新