【问题标题】:About embedded firmware development [closed]关于嵌入式固件开发[关闭]
【发布时间】:2018-05-14 05:14:15
【问题描述】:

在过去的几天里,我发现嵌入式硬件之上的 RTOS 层是多么重要。 我的问题是: 设备驱动程序之间是否有分叉(用C写的直接烧在单片机上) 和 Linux 设备驱动程序?

【问题讨论】:

  • 驱动程序只是一些直接与硬件对话的代码,然后为应用程序提供某种抽象层 (HAL),这样就可以在不知道脏细节的情况下访问该硬件。否则,微控制器驱动程序和 Linux 驱动程序之间会有很大的不同 - 在后一种情况下,您需要考虑各种操作系统特定和 API,因此驱动程序必须采用某种格式。

标签: embedded embedded-linux hardware microcontroller


【解决方案1】:

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

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

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

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

Linux 驱动程序不是针对应用程序,而是针对内核。并且应用程序很少与驱动程序对话——它使用一种统一的语言(通常是“文件系统习惯用法”)与内核对话,而内核又代表应用程序调用驱动程序。

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

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

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

【讨论】:

    猜你喜欢
    • 2010-11-24
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2012-04-07
    相关资源
    最近更新 更多