usb储存驱动
声明
drivers/usb/storage/usb.c
static struct usb_driver usb_storage_driver = {.name = DRV_NAME,.probe = storage_probe, //这里是挂载.disconnect = usb_stor_disconnect,.suspend = usb_stor_suspend,.resume = usb_stor_resume,.reset_resume = usb_stor_reset_resume,.pre_reset = usb_stor_pre_reset,.post_reset = usb_stor_post_reset,.id_table = usb_storage_usb_ids,.supports_autosuspend = 1,.soft_unbind = 1,
};// 这里是usb主机储存控制器的驱动模板挂载
module_usb_stor_driver(usb_storage_driver, usb_stor_host_template, DRV_NAME);
普通BOT挂载流程
如果为UAS或非常规设备,则退出storage_probe。
drivers/usb/storage/usual-tables.c 的两个数组列表
- 非规设备 ignore_ids[]
- UAS列表 usb_storage_usb_ids[]
UAS判断:uas_use_uas_driver
/* If uas is enabled and this device can do uas then ignore it. */
#if IS_ENABLED(CONFIG_USB_UAS)if (uas_use_uas_driver(intf, id, NULL))return -ENXIO;
#endif
非规设备判断:
/** If the device isn't standard (is handled by a subdriver* module) then don't accept it.*/if (usb_usual_ignore_device(intf))return -ENXIO;
然后就会走usb_stor_probe1和usb_stor_probe2流程
流式UAS挂载
drivers/usb/storage/uas.c