【问题标题】:Userspace Serial communication Library on LinuxLinux 上的用户空间串行通信库
【发布时间】:2018-06-29 10:49:05
【问题描述】:

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

我想到的想法是:

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

我的问题是:我应该走哪条路,为什么?
此外,任何关于该主题的文章/书籍/链接都将受到高度赞赏。
提前致谢!

【问题讨论】:

  • 每个(硬件接口)使用不同的设置和通信协议(内核ABI),为什么需要统一?!

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


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 2014-04-12
  • 2012-10-19
相关资源
最近更新 更多