嵌入式 Linux:内核驱动程序与用户 space 驱动程序?
Embedded Linux: kernel drivers vs user space drivers?
在 Linux 中选择使用内核 space 还是用户 space 驱动程序时,是否有最佳方法(或至少一些优点和缺点)?
例如,假设我正在开发一个基于 Sensirion SHT21 传感器的湿度感应板。我的应用程序将从传感器读取样本,然后以 JSON 形式呈现给 Web 应用程序使用。
为了 "talk" 使用 SHT21 传感器,我可以:
- 使用
echo sht21 0x40 > /sys/class/i2c-adapter/i2c-0/new_device
实例化 I2C 设备并通过 hwmon
访问湿度读数,解析输出然后在我的应用程序中使用它
- 编写我自己的软件来执行所需的(根据数据表)
write()
和 read()
针对 /dev/i2c-0
的操作并自己计算湿度,然后在我的应用程序中使用它
第一种方法使用 sht21
内核驱动程序,后者完全在用户 space 中工作。
我应该去哪一个?我该如何选择?
在这两种情况下,你的驾驶都是从用户 space 那里发生的事情,选项 2 意味着编写一个我会避免的驱动程序,如果它已经存在你的好处。
如果有一个驱动程序可以解析和理解生产中使用的某些数据,如果它更易于使用或拥有大量用户群,请使用它。如果解析原始数据是微不足道的,并且你真的被挤压 space (我怀疑这一点,因为你 运行 一个内核)然后编写你自己的解析器等
简而言之,什么是最少的工作,即最不复杂的,那就去做吧。
我的头顶:
Userland 方法优点:
- 开发速度更快/调试更容易
- 如果出现错误和崩溃,不会导致整个系统崩溃
Userland 方法缺点:
- "performances" - 我将把它作为一个非常模糊的概念留在这里
今天...
就您的申请而言,正确看待:
- 因为我们可以放心地打赌湿度在
时间短,
- and/or 你的传感器无论如何都有一些不可忽略的滞后(会
它只是出于机械原因,例如一滴水落在它上面,它
不会在一毫秒内消失),
- ...而且您可能不打算每次都发送湿度测量值
毫秒 - 你呢?
- ...即使您这样做了,大部分延迟(如 "vs performance")
将来自使它成为 JSON 的部分,将其发送到
服务器(两者显然都是用户空间的工作),以及 - 尽管这可能
成为您公司的 none,这仍然是用例的一部分 -
服务器的联网情况和处理时间,
...总而言之,我 200% 会采用用户态方法。
内核 space 在技术上可能更 "fun" 或 "rewarding",但工程将 "pragmatic" 放在 "fun" 之前。 :-)
在 Linux 中选择使用内核 space 还是用户 space 驱动程序时,是否有最佳方法(或至少一些优点和缺点)?
例如,假设我正在开发一个基于 Sensirion SHT21 传感器的湿度感应板。我的应用程序将从传感器读取样本,然后以 JSON 形式呈现给 Web 应用程序使用。
为了 "talk" 使用 SHT21 传感器,我可以:
- 使用
echo sht21 0x40 > /sys/class/i2c-adapter/i2c-0/new_device
实例化 I2C 设备并通过hwmon
访问湿度读数,解析输出然后在我的应用程序中使用它 - 编写我自己的软件来执行所需的(根据数据表)
write()
和read()
针对/dev/i2c-0
的操作并自己计算湿度,然后在我的应用程序中使用它
第一种方法使用 sht21
内核驱动程序,后者完全在用户 space 中工作。
我应该去哪一个?我该如何选择?
在这两种情况下,你的驾驶都是从用户 space 那里发生的事情,选项 2 意味着编写一个我会避免的驱动程序,如果它已经存在你的好处。
如果有一个驱动程序可以解析和理解生产中使用的某些数据,如果它更易于使用或拥有大量用户群,请使用它。如果解析原始数据是微不足道的,并且你真的被挤压 space (我怀疑这一点,因为你 运行 一个内核)然后编写你自己的解析器等
简而言之,什么是最少的工作,即最不复杂的,那就去做吧。
我的头顶:
Userland 方法优点:
- 开发速度更快/调试更容易
- 如果出现错误和崩溃,不会导致整个系统崩溃
Userland 方法缺点:
- "performances" - 我将把它作为一个非常模糊的概念留在这里 今天...
就您的申请而言,正确看待:
- 因为我们可以放心地打赌湿度在 时间短,
- and/or 你的传感器无论如何都有一些不可忽略的滞后(会 它只是出于机械原因,例如一滴水落在它上面,它 不会在一毫秒内消失),
- ...而且您可能不打算每次都发送湿度测量值 毫秒 - 你呢?
- ...即使您这样做了,大部分延迟(如 "vs performance") 将来自使它成为 JSON 的部分,将其发送到 服务器(两者显然都是用户空间的工作),以及 - 尽管这可能 成为您公司的 none,这仍然是用例的一部分 - 服务器的联网情况和处理时间,
...总而言之,我 200% 会采用用户态方法。
内核 space 在技术上可能更 "fun" 或 "rewarding",但工程将 "pragmatic" 放在 "fun" 之前。 :-)