嵌入式 Linux:内核驱动程序与用户 space 驱动程序?

Embedded Linux: kernel drivers vs user space drivers?

在 Linux 中选择使用内核 space 还是用户 space 驱动程序时,是否有最佳方法(或至少一些优点和缺点)?

例如,假设我正在开发一个基于 Sensirion SHT21 传感器的湿度感应板。我的应用程序将从传感器读取样本,然后以 JSON 形式呈现给 Web 应用程序使用。

为了 "talk" 使用 SHT21 传感器,我可以:

第一种方法使用 sht21 内核驱动程序,后者完全在用户 space 中工作。

我应该去哪一个?我该如何选择?

在这两种情况下,你的驾驶都是从用户 space 那里发生的事情,选项 2 意味着编写一个我会避免的驱动程序,如果它已经存在你的好处。

如果有一个驱动程序可以解析和理解生产中使用的某些数据,如果它更易于使用或拥有大量用户群,请使用它。如果解析原始数据是微不足道的,并且你真的被挤压 space (我怀疑这一点,因为你 运行 一个内核)然后编写你自己的解析器等

简而言之,什么是最少的工作,即最不复杂的,那就去做吧。

我的头顶:

Userland 方法优点:

  • 开发速度更快/调试更容易
  • 如果出现错误和崩溃,不会导致整个系统崩溃

Userland 方法缺点:

  • "performances" - 我将把它作为一个非常模糊的概念留在这里 今天...

就您的申请而言,正确看待:

  • 因为我们可以放心地打赌湿度在 时间短,
  • and/or 你的传感器无论如何都有一些不可忽略的滞后(会 它只是出于机械原因,例如一滴水落在它上面,它 不会在一毫秒内消失),
  • ...而且您可能不打算每次都发送湿度测量值 毫秒 - 你呢?
  • ...即使您这样做了,大部分延迟(如 "vs performance") 将来自使它成为 JSON 的部分,将其发送到 服务器(两者显然都是用户空间的工作),以及 - 尽管这可能 成为您公司的 none,这仍然是用例的一部分 - 服务器的联网情况和处理时间,

...总而言之,我 200% 会采用用户态方法。

内核 space 在技术上可能更 "fun" 或 "rewarding",但工程将 "pragmatic" 放在 "fun" 之前。 :-)