【问题标题】:Write to a UIO Device写入 UIO 设备
【发布时间】:2018-09-18 03:27:30
【问题描述】:

我了解 UIO 驱动程序背后的基础知识,如 documentation 中所述。我缺少的部分是如何将数据从用户空间程序 back 写入设备驱动程序。我的猜测是你会将这些数据写入mmap 区域,但是如何让设备驱动程序知道它应该读取所​​述内存?

最终我正在尝试编写一个可以由用户空间程序实现的块设备。我已经删除了块设备代码并可以正常工作:https://github.com/wspeirs/usbd。我的想法是,UIO 是在块设备和用户空间程序之间传输块/扇区的最有效方式。这是从用户空间与块设备驱动程序通信的错误方式吗?我应该使用sysfs 还是其他一些通信机制?

【问题讨论】:

  • 当您的代码甚至没有调用 uio_register_device() 或定义 uio_info 结构时,它与 UIO 驱动程序有什么关系?已经有块设备的框架。由于您没有使用该框架,因此您无法充分利用您的块设备,例如在其上安装文件系统。顺便说一句,您的代码不符合内核编码风格。
  • @sawdust 我还没有添加 uio 部分,因为我不明白如何从用户空间程序获取数据到内核驱动程序。你指的我没有使用的块设备框架是什么?谢谢!
  • @sawdust I'm using 你在那篇文章中提到的block_device_operations 结构......是你说的“框架”吗?
  • 减去 1 个讨厌的答案。您可能会认为有人提出问题是在寻找信息,而不是侮辱。

标签: linux-kernel linux-device-driver


【解决方案1】:

UIO 被设计为使用户空间绕过内核与硬件设备进行通信。这似乎不符合您的需求。

在标准的 Linux 块设备中,您可以使用 mmap() 将数据写入您的块,并使用 msync() 向驱动程序指示您写入了哪些区域。

【讨论】:

  • 加1个愉快的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 2011-09-26
相关资源
最近更新 更多