【问题标题】:Porting a Linux kernel driver to libusb将 Linux 内核驱动程序移植到 libusb
【发布时间】:2014-03-12 02:19:31
【问题描述】:

所以我想知道:既然 libusb 提供对 USB 的用户空间访问,是否可以将现有的内核驱动程序移植到 libusb?

我确实理解它可能需要重写驱动程序,但是您认为可以编写一个依赖 libusb 来访问设备并将现有驱动程序链接到该设备的“虚拟内核”吗?本质上是在 libusb 和内核模块之间编写一个层,将内核 USB 命令转换为 libusb 命令。

何必呢?例如,如果你想在 Android 上运行内核驱动程序,你需要确保它是为特定的内核版本/设备模型编译的。因此,应用程序将无法在所有设备上运行。另一方面,libusb 与大多数最新的 Android 设备完全兼容。

【问题讨论】:

    标签: linux-kernel driver kernel-module libusb libusb-1.0


    【解决方案1】:

    AFAIK,libusb 是一个与内核 USB 层的更高层通信的库。 USB 子系统的最低部分必须写入内核空间,因为它们需要访问 USB 主机控制器的物理地址空间并使用中断和其他无法在用户空间中实现的低级功能.

    所以我认为在用户空间中移植 USB 子系统的低级部分是不可能的。

    【讨论】:

    • 只有主机控制器驱动程序需要低级访问。
    • 那么 - 是否可以仅在用户空间中编写 USB 设备驱动程序?好吧,我已经编写了 USB 设备驱动程序,但我需要使用中断和总线(物理)地址以及一些锁定方法。那么如何在用户空间编写这样的驱动呢?
    • 没有USB设备驱动直接处理中断或DMA映射;这一切都是由 HCD 完成的。用户空间驱动程序使用 libusb API(封装了 usbfs API)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2015-12-31
    • 2023-04-04
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多