Linux那些事儿 之 戏说USB(7)不一样的core
使用命令lsmod,看看它的输出,然后找这么个模块usbcore,不要说你找不到,我不会相信的。它是什么?它就是咱们这里要说的usb系统的核心,如果要在linux里使用usb,这个模块是必不可少的,另外,你应该在usbcore那一行的后面看到ehci_hcd或uhci_hcd这样的东东,它们就是前面说的usb host controller的驱动模块,你的usb设备要工作,合适的usb host controller模块也是必不可少的。不过,咱们这里的主角还是usbcore。
usb core负责实现一些核心的功能,为别的设备驱动程序提供服务,提供一个用于访问和控制USB硬件的接口,而不用去考虑系统当前存在哪种host controller。至于core、host controller和driver三者之间的关系,还是用ldd3的图来说明吧。
driver和host controller像不像core的两个保镖?没办法,这可是core啊。协议里也说了,host controller的驱动(HCD)必须位于USB软件的最下一层。HCD提供host controller硬件的抽象,隐藏硬件的细节,在host controller之下是物理的USB及所有与之连接的USB设备。而HCD只有一个客户,对一个人负责,就是咱们的USB core,USB core将用户的请求映射到相关的HCD,用户不能直接访问HCD。
咱们写USB驱动的时候,只能调用core的接口,core会将咱们的请求发送给相应的HCD,用得着咱们操心的只有这么一亩三分地,core为咱们完成了大部分的工作,linux的哲学是不是和咱们生活中不太一样那?
走到drivers/usb/core里去,使用ls瞧一瞧看一看,
buffer.c devices.c driver.c file.c hcd.c hub.c Kconfig message.c otg_whitelist.h quirks.c urb.c usb.c
config.c devio.c endpoint.c generic.c hcd-pci.c hub.h Makefile notify.c port.c sysfs.c usb-acpi.c usb.h
使用wc –l命令统计一下,将近两万行的代码,core不愧是core,为大家默默的做这么多事,人民的好公仆鞠躬尽瘁,我会用一颗感恩的心去深刻理解你的内心回报你的付出的。Linux背后的哲学是不是又和我们生活中不一样?
看看Makefile。
#
# Makefile for USB Core files and filesystem
#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.ousbcore-$(CONFIG_PCI) += hcd-pci.o
usbcore-$(CONFIG_ACPI) += usb-acpi.oobj-$(CONFIG_USB) += usbcore.o
Makefile可比Kconfig简略多了,所以看起来也更亲切点,咱们总是拿的money越多越好,看的代码越少越好。这里之所以会出现CONFIG_PCI,是因为通常USB的root hub包含在一个PCI设备中,前面也已经聊过了。hcd-pci 和 hcd 顾名而思义就知道是说host controller的,它们实现了host controller公共部分,按协议里的说法它们就是HCDI(HCD的公共接口),host目录下则实现了各种不同的host controller,咱们这里不怎么会聊到具体host controller的实现。
这么看来,好像大都需要关注的样子,没有减轻多少压力,不过这里本身就是usb core部分,是要做很多的事为咱们分忧的,所以多点也是可以理解的。
Linux那些事儿 之 戏说USB(7)不一样的core相关推荐
- Linux那些事儿 之 戏说USB(11)不一样的core
转载地址:http://blog.csdn.net/fudan_abc/article/details/1792367 "生活中肯定还有比睡觉更好玩的事情!"大小卡梅拉们一直都抱有 ...
- Linux那些事儿 之 戏说USB(19)设备
转载地址:http://blog.csdn.net/fudan_abc/article/details/1807800 第一眼看到struct usb_device这个结构,我仿佛置身于衡山路的酒吧里 ...
- 【转】Linux那些事儿 之 戏说USB(19)设备
第一眼看到struct usb_device这个结构,我仿佛置身于衡山路的酒吧里,盯着舞池里扭动的符号,眼神迷离. 交大里苟了几年,毕业了又是住在学校附近的徐虹北路上,沿着虹桥路走过去,到徐家汇不过1 ...
- Linux那些事儿 之 戏说USB(33)字符串描述符
关于字符串描述符,前面的前面已经简单描述过了,地位仅次于设备/配置/接口/端点四大描述符,那四大设备必须得支持,而字符串描述符对设备来说则是可选的. 这并不是就说字符串描述符不重要,对咱们来说,字符串 ...
- Linux那些事儿 之 戏说USB(28)设备的生命线(十一)
现在已经使用GET_DESCRIPTOR请求取到了包含一个配置里所有相关描述符内容的一堆数据,这些数据是raw的,即原始的,所有数据不管是配置描述符.接口描述符还是端点描述符都彼此的挤在一起,所以得想 ...
- Linux那些事儿 之 戏说USB(27)设备的生命线(十)
跟着设备的生命线走到现在,我算是明白了,什么东西的发展都是越往后越高级越复杂.再给张小表,看看现在和上次那张表出现的时候有什么变化. state USB_STATE_ADDRESS sp ...
- Linux那些事儿 之 戏说USB(25)设备的生命线(八)
回到struct usb_hcd,继续努力的往下看. 7行,又见kref,usb主机控制器的引用计数.struct usb_hcd也有自己专用的引用计数函数,看drivers/usb/core/hcd ...
- Linux那些事儿 之 戏说USB(22)设备的生命线(五)
下面接着看那三个基本点. 第一个基本点,usb_alloc_urb函数,创建urb的专用函数,为一个urb申请内存并做初始化,在drviers/usb/core/urb.c里定义. struct ur ...
- Linux那些事儿 之 戏说USB(15)设备
struct usb_device结构冗长而又杂乱 include/linux/usb.h struct usb_device {int devnum;char devpath[16];u32 rou ...
最新文章
- android l是哪个版本,从Android L及更高版本开始,setMobileDataEnabled方法不再可调用...
- 做一个”合格“的程序员(二)——学习管理
- 复数混频发射机原理与仿真
- Oracle:容器数据库简介
- Important table for Fiori launchpad Designer and configuration
- android linux kernel VS standard linux kernel
- Java装饰器模式详解
- 数据库中的DbUtils
- Linux下的两个经典宏定义【转】
- 斐讯K2刷华硕固件教程(最新)
- 基于Spring的MVC框架设计与实现
- win10系统重装步骤详解
- 根据GFF3文件统计外显子大小和数量以及内含子大小
- 懂我的人不需要我解释,不懂我的人我不需要解释。。
- oracle内部原理结构图,Oracle恢复内部原理(基础数据结构)
- 百度Ai studio上运行pytorch和tensorflow(转载)
- canvas制作在线画板
- AutoLisp学习笔记
- 变量——整型变量 浮点型变量 字符型变量
- 腾讯各事业群裁员比例没有网传30%那么高;郭明錤称苹果汽车团队已解散;Go 1.18 发布,正式支持泛型|极客头条