Linux上的用户空间串行通信库

时间:2018-06-29 10:49:05

标签: c linux-kernel embedded-linux drivers zynq

我需要开发一个(用户空间)库来处理Linux上的串行通信(在Zynq-Zybo板上:UART,SPI,I2C)。
我浏览了各种网站和资料,并研究了xilinx-linux内核,以及有关O'Reilly Linux Device Drivers的一些参考。
到目前为止,我发现:Linux已经包含自己的内核模块来处理通信(例如:UART内核模块处理外围设备,以便它们显示在/ dev /中,并且可以通过该设备文件与该设备进行交互。使用打开,读取,写入等方式从用户空间访问)。
我还读到,作为一种常见模式,与设备驱动程序的交互是通过字符设备驱动程序完成的,该字符设备驱动程序在用户空间中访问,并负责与设备驱动程序的交互(下图中的详细信息)
enter image description here

我想到的想法是:

  • 编写一个用户空间库,该库通过经典的打开,读取,写入简单地与提供的设备文件(在/ dev / ..中)进行交互
  • 参考上图,开发一个字符设备驱动程序并将此模块包含在内核中,以便用户空间库仅通过IOCTL(或类似方法)与之交互,然后此新模块将直接与(存在的)设备驱动程序
    (但是,这种解决方案对我来说听起来不太好:我读到在内核模块内部使用用户空间之类的东西(例如打开,读取,写入)不是一个好主意-尽管可能)-

我的问题是:我应该选择哪种方式,为什么?
此外,无论在该主题上的任何文章/书籍/链接都将受到高度赞赏。
预先感谢!

1 个答案:

答案 0 :(得分:1)

快速搜索中的

似乎有很多库,所以不确定为什么要发明轮子。 https://www.acmesystems.it/user_i2c

但是无论如何,如果它是新型的总线/设备,那么用户空间库始终是一个好方法