假设您有一个运行嵌入式Linux的嵌入式设备(例如Rasberry pi),并希望与外部模块进行通信。
在哪种情况下,您是否决定通过编写内核空间驱动程序与设备进行通信?
在哪种情况下,您只是通过在用户空间中编写软件来与设备进行通信?
答案 0 :(得分:3)
如果您对此事有任何选择,请与用户空间中的设备进行通信。用户空间驱动程序更易于开发,更易于安全,并且不太可能需要更新才能在较新的内核上运行。
内核驱动程序可能不可避免的情况包括:
如果您的硬件提供将由内核的其他部分使用的标准服务 - 例如,如果它是块设备或网络设备。输入设备和视频设备也可能属于此类别,具体取决于您打算如何使用它们。
如果您的设备具有异常严格的时序要求,这是用户空间应用程序无法满足的,或者它需要仅在内核空间中可用的驱动程序组件,例如硬件计时器。
如果您正在与未直接暴露给用户空间的硬件(如PCI设备)进行连接。 (即使如此,编写“瘦”内核驱动程序并在用户空间中完成其余工作可能在情境上也适合。)