# Libusb on Linux
###### tags: `Linux kernel` `libusb`
## 如果是 vendor defined 的 interface, Linux kernel 並不會有對應的 driver 那麼 libusb 在 linux 上是怎麼做的呢?
libusb 大架構是各平台分別定義 `struct usbi_os_backend`, 前端再呼叫這個 interface. 可以發現底曾的呼叫是透過 [`ioctl`](https://github.com/libusb/libusb/blob/master/libusb/os/linux_usbfs.c#L2246) , 對應的 cmd 定義在[這裡](https://github.com/libusb/libusb/blob/master/libusb/os/linux_usbfs.h#L138). 在 linux kernel 中對應的是[這裡](https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/usbdevice_fs.h#L187). 最後是透過 [`devio` ](https://elixir.bootlin.com/linux/latest/source/drivers/usb/core/devio.c) 來處理.
> It allows user space programs/"drivers" to communicate directly with USB devices without intervening kernel driver.