在Linux中使用内核空间或用户空间驱动程序之间进行select时,是否有最佳方法(或至less有一些优缺点)?
例如,假设我正在开发用于感测Sensirion SHT21传感器上湿度的电路板。 我的应用程序将从传感器中读取样本,然后以JSON格式呈现,以供Web应用程序使用。
为了与SHT21传感器“交谈”,我可以:
使用echo sht21 0x40 > /sys/class/i2c-adapter/i2c-0/new_device实例化I2C设备,并通过hwmon访问湿度读数,parsing输出,然后在我的应用程序中使用它
编写我自己的软件,根据数据表执行对/dev/i2c-0 write()和read()操作,并自己计算湿度,然后在我的应用程序中使用它
第一种方法是使用sht21内核驱动程序,后者完全在用户空间中运行。
Linux设备驱动程序,用于embedded式系统中的RS232设备
在linux内核中的内存障碍的目的
分叉进程的零星堆栈指针分段错误
embedded式Linux上的轻量级debugging
我应该去哪一个? 我应该如何select?
为什么打开调用两个参数(struct inode *,struct file *)?
为什么我不应该在系统内存上使用iomap for ARMv6 +?
纳米X(Microwindow)编程指南?
用于embedded式系统的开源video编码器
在busyBox sh中,不能递增填充8的数字
我的头顶上:
Userland方法优点:
更快的开发/更容易调试
如果越野车和碰撞,不能崩溃整个系统
Userland方法缺点:
就你的申请而言,从这个角度来看:
因为我们可以放心地说,湿度在短时间内不会显着变化,
和/或你的传感器无论如何都有一些不可忽略的滞后现象(只是因为机械的原因,如果有一滴水落在它上面,它不会在一毫秒内消失),
…你可能不打算每毫秒发送一次湿度测量 – 你呢?
…即使你做了,大部分的延迟(如“性能”)将从那个部分,将使它成为一个JSON,将其发送到服务器(这两个显然是为用户的工作), – 虽然可能与你的业务无关,这仍然是用例的一部分 – 由服务器组成的联网条件和处理时间,
总而言之,我会用200%的用户区的方式去做。
内核空间在技术上可能更“有趣”或“有益”,但工程在“乐趣”之前放置“实用”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。