文章目录
-
-
-
- 有关模块及顺序
- 各个模块的功能
-
- USB 核心相关
-
- usb_common_init
- usb_init
- ohci_hcd_mod_init
- ohci_s3c2410_init
- USB 设备类驱动(接口驱动)(不包括hub)相关
- 其他
有关模块及顺序
- linux-5.11 ok6410a 中 与 usb 相关的模块如下
drivers/usb$ nm built-in.a |grep initcall
00000000 d __initcall_usb_common_init4
00000000 d __initcall_usb_init4
00000000 d __initcall_ohci_hcd_mod_init6
00000000 d __initcall_ohci_s3c2410_init6
hid 相关
drivers/hid$ nm built-in.a |grep initcall
00000000 d __initcall_hid_init6
00000000 d __initcall_hid_generic_init6
00000000 d __initcall_usb_mouse_driver_init6
__initcall_usb_common_init4
__initcall_usb_init4
__initcall_ohci_hcd_mod_init6
__initcall_ohci_s3c2410_init6
各个模块的功能
USB 核心相关
usb_common_init
usb_common_init
debugfs_create_dir("usb", NULL);
ledtrig_usb_init();
# pwd
/sys/kernel/debug/usb
# ls
devices ohci uvcvideo
# ls -R -l
.:
-r--r--r-- 1 root root 0 Jan 1 00:00 devices
drwxr-xr-x 3 root root 0 Jan 1 00:00 ohci
drwxr-xr-x 2 root root 0 Jan 1 00:00 uvcvideo
./ohci:
drwxr-xr-x 2 root root 0 Jan 1 00:00 s3c24xx
./ohci/s3c24xx:
-r--r--r-- 1 root root 0 Jan 1 00:00 async
-r--r--r-- 1 root root 0 Jan 1 00:00 periodic
-r--r--r-- 1 root root 0 Jan 1 00:00 registers
./uvcvideo:
usb_init
usb_init
usb_disabled
usb_init_pool_max
usb_debugfs_init
usb_acpi_register
bus_register(&usb_bus_type);
bus_register_notifier(&usb_bus_type, &usb_bus_nb);
usb_major_init();
register_chrdev(USB_MAJOR, "usb", &usb_fops);
USB FS
usb_register(&usbfs_driver);
usb_register_driver
usb_devio_init();
register_chrdev_region(USB_DEVICE_DEV, USB_DEVICE_MAX, "usb_device");
cdev_init(&usb_device_cdev, &usbdev_file_operations);
cdev_add(&usb_device_cdev, USB_DEVICE_DEV, USB_DEVICE_MAX);
usb_register_notify(&usbdev_nb);
blocking_notifier_chain_register(&usb_notifier_list, &usbdev_nb);
usb_hub_init();
usb_register(&hub_driver)
hub_wq = alloc_workqueue("usb_hub_wq", WQ_FREEZABLE, 0);
usb_register_device_driver(&usb_generic_driver, THIS_MODULE);
# cat /proc/devices
Character devices:
180 usb
189 usb_device
ohci_hcd_mod_init
ohci_hcd_mod_init
usb_disabled
set_bit(USB_OHCI_LOADED, &usb_hcds_loaded);
debugfs_create_dir("ohci", usb_debug_root);
ohci_s3c2410_init
ohci_s3c2410_init
platform_driver_register(&ohci_hcd_s3c2410_driver);
ohci_hcd_s3c2410_probe
两个行为
硬件行为
为 port 供电
初始化PHY
为 HC 供时钟
软件行为
struct usb_hcd * hcd = usb_create_hcd(&ohci_s3c2410_hc_driver, &dev->dev, "s3c24xx");
填充hcd 的 rsrc_start rsrc_len regs
usb_add_hcd(hcd, dev->resource[1].start, 0);
device_wakeup_enable(hcd->self.controller);
USB 设备类驱动(接口驱动)(不包括hub)相关
其他
设备driver
usb_register_device_driver
接口driver
usb_register
usb_register_driver