usb core负责实现一些核心的功能:为别的设备驱动程序提供服务,提供一个用于访问和控制USB硬件的接口,而不用去考虑系统当前存在哪种host controller。
core、host controller和driver之间的关系如下:
USser
--------------------------------------------------------------------------------------
vfs layer | block layer | net layer | char layer | TTY layer
---------------------------------------------------------------------
USB device driver
--------------------------------------------------------------------- kernel
USB core
---------------------------------------------------------------------
USB HOST controlers (host controller的驱动)
----------------------------------------------------------------------------------------
hardware (物理usb及相连的usb设备)
USB device driver 驱动编写的时候,只能调用core的接口
USB core将用户的请求映射到相关的HCD
HCD提供host controller硬件的抽象,隐藏硬件的细节。
因此咱们写usb设备驱动程序的时候只需关注:调用core的接口
查看 usb core目录:
ls drivers/usb/core
-rw-rw-r-- 1 lxl lxl 3573 May 17 09:55 buffer.c
-rw-rw-r-- 1 lxl lxl 24823 May 17 09:55 config.c
-rw-rw-r-- 1 lxl lxl 19280 May 17 09:55 devices.c
-rw-rw-r-- 1 lxl lxl 61021 May 17 09:55 devio.c
-rw-rw-r-- 1 lxl lxl 55564 May 17 09:55 driver.c
-rw-rw-r-- 1 lxl lxl 4990 May 17 09:55 endpoint.c
-rw-rw-r-- 1 lxl lxl 6194 May 17 09:55 file.c
-rw-rw-r-- 1 lxl lxl 7117 May 17 09:55 generic.c
-rw-rw-r-- 1 lxl lxl 86447 May 17 09:55 hcd.c
-rw-rw-r-- 1 lxl lxl 17649 May 17 09:55 hcd-pci.c
-rw-rw-r-- 1 lxl lxl 165625 May 17 09:55 hub.c
-rw-rw-r-- 1 lxl lxl 4823 May 17 09:55 hub.h
-rw-rw-r-- 1 lxl lxl 3006 May 17 09:55 Kconfig
-rw-rw-r-- 1 lxl lxl 350 May 17 09:55 Makefile
-rw-rw-r-- 1 lxl lxl 61292 May 17 09:55 message.c
-rw-rw-r-- 1 lxl lxl 1801 May 17 09:55 notify.c
-rw-rw-r-- 1 lxl lxl 3383 May 17 09:55 otg_whitelist.h
-rw-rw-r-- 1 lxl lxl 12952 May 17 09:55 port.c
-rw-rw-r-- 1 lxl lxl 9363 May 17 09:55 quirks.c
-rw-rw-r-- 1 lxl lxl 25244 May 17 09:55 sysfs.c
-rw-rw-r-- 1 lxl lxl 32360 May 17 09:55 urb.c
-rw-rw-r-- 1 lxl lxl 6010 May 17 09:55 usb-acpi.c
-rw-rw-r-- 1 lxl lxl 32023 May 17 09:55 usb.c
-rw-rw-r-- 1 lxl lxl 6266 May 17 09:55 usb.h
同样关注阅读 kconfig makefile文件:
kconfig文件内容可自行查看。
我们看看makefile:
usbcore-y := usb.o hub.o hcd.o urb.o message.o driver.o
usbcore-y += config.o file.o buffer.o sysfs.o endpoint.o
usbcore-y += devio.o notify.o generic.o quirks.o devices.o
usbcore-y += port.o
usbcore-$(CONFIG_PCI) += hcd-pci.o
usbcore-$(CONFIG_ACPI) += usb-acpi.o
obj-$(CONFIG_USB) += usbcore.o
注意到其中的 CONFIG_PCI ----- 出现 PCI 接口配置选项,主要是因为USB的root hub包含在一个PCI设备中;
hcd hcd-pci : 顾名思义 就是 host controller driver。core中的连个文件 hcd.c hcd-pci.c 完成了 host controller 驱动的公共部分。
driver/host 目录中则实现了各种不同的host controller。
阅读(2111) | 评论(0) | 转发(2) |