Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 将Linux内核驱动程序移植到libusb_Linux Kernel_Driver_Kernel Module_Libusb_Libusb 1.0 - Fatal编程技术网

Linux kernel 将Linux内核驱动程序移植到libusb

Linux kernel 将Linux内核驱动程序移植到libusb,linux-kernel,driver,kernel-module,libusb,libusb-1.0,Linux Kernel,Driver,Kernel Module,Libusb,Libusb 1.0,所以我想知道:既然libusb提供了对USB的用户空间访问,那么是否可以将现有的内核驱动程序移植到libusb 我知道它可能需要重写驱动程序,但您认为有可能编写一个“虚拟内核”,它依赖libusb访问设备,并将现有的驱动程序链接到该设备吗?实际上,在libusb和内核模块之间编写一个层,将内核USB命令转换为libusb命令 为什么要麻烦?例如,如果您想在Android上运行内核驱动程序,您需要确保它是针对特定的内核版本/设备模型编译的。因此,应用程序将无法在所有设备上运行。另一方面,libus

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

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


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

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


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

只有主机控制器驱动程序需要这种低级访问。那么-是否可以只在用户空间中写入USB设备驱动程序?嗯,我已经编写了usb设备驱动程序,但我需要使用中断、总线(物理)地址和一些锁定方法。那么如何在用户空间中编写这样的驱动程序呢?没有USB设备驱动程序直接处理中断或DMA映射;所有这些都是由HCD完成的。用户空间驱动程序使用libusbapi(它包装了usbfsapi)。