UHCI爱情是什么么意思?》

UHCI是什么意思?》刚看一个字母,不知道是什么意思啊,请教大家哦!^_^_作业帮
UHCI是什么意思?》刚看一个字母,不知道是什么意思啊,请教大家哦!^_^
UHCI是什么意思?》刚看一个字母,不知道是什么意思啊,请教大家哦!^_^
好像与电脑有关吧,呵呵,不知道!
查了一下,应该是驱动程序的增强功能。4266人阅读
写一下UHCI吧,也顺便怀念一下Intel,以及Intel的那几个女同事们,好久没联系了,你们可好?&
UHCI是Intel提出来的.虽然离开Intel一年多了,但我总觉得也许有一天我还会回到Intel.所以关于Intel的东西,我多少会关注一下.我挺怀念Intel的,虽然钱也不多,但是那时候毕竟刚毕业,对钱的问题也没想太多.
UHCI全名Universal Host Controller Interface,它是一种USB主机控制器的接口规范,江湖中把遵守它的硬件称为UHCI主机控制器.在Linux中,把这种硬件叫做HC,或者说Host Controller,而把与它对应的软件叫做HCD.即HC Driver.Linux中这个HCD所对应的模块叫做uhci-hcd.
当我们看一个模块的时候,首先是看Kconfig和Makefile文件.在drivers/usb/host/Kconfig文件中:
&&& 161 config USB_UHCI_HCD
&&& 162&&&&&&&& tristate &UHCI HCD (most Intel and VIA) support&
&&& 163&&&&&&&& depends on USB && PCI
&&& 164&&&&&&&& ---help---
&&& 165&&&&&&&&&& The Universal Host Controller Interface is a standard by Intel for
&&& 166&&&&&&&&&& accessing the USB hardware in the PC (which is also called the USB
&&& 167&&&&&&&&&& host controller). If your USB host controller conforms to this
&&& 168&&&&&&&&&& standard, you may want to say Y, but see below. All recent boards
&&& 169&&&&&&&&&& with Intel PCI chipsets (like intel 430TX, 440FX, 440LX, 440BX,
&&& 170&&&&&&&&&& i810, i820) conform to this standard. Also all VIA PCI chipsets
&&& 171&&&&&&&&&& (like VIA VP2, VP3, MVP3, Apollo Pro, Apollo Pro II or Apollo Pro
&&& 172&&&&&&&&&& 133). If unsure, say Y.
&&& 174&&&&&&&&&& To compile this driver as a module, choose M here: the
&&& 175&&&&&&&&&& module will be called uhci-hcd.
众里寻他千百度之后,我发现了上面这段文字,注意那句depends on USB && PCI.这句话的意思就是说这个选项是依赖于另外两个选项,CONFIG_USB和CONFIG_PCI,很显然这两个选项代表着Linux中usb的核心代码和pci的核心代码.
UHCI作为USB主机控制器的接口,它依赖于usb核心这很正常,但为何它也依赖于pci核心呢?理由很简单,UHCI主机控制器本身通常是PCI设备,即通常它会插在PCI插槽里,或者直接就集成在主板上.但总之,大多数的UHCI主机控制器是连在PCI总线上的.所以,很无奈的是,写UHCI驱动程序就不得不了解一点PCI设备驱动程序.
先用lspci命令看一下,
localhost:/usr/src/linux-2.6.22.1/drivers/usb/host # lspci | grep USB
00:1d.0 USB Controller: Intel Corporation Enterprise Southbridge UHCI USB #1 (rev 09)
00:1d.1 USB Controller: Intel Corporation Enterprise Southbridge UHCI USB #2 (rev 09)
00:1d.2 USB Controller: Intel Corporation Enterprise Southbridge UHCI USB #3 (rev 09)
00:1d.7 USB Controller: Intel Corporation Enterprise Southbridge EHCI USB (rev 09)
比如在我的计算机里,就有三个UHCI主机控制器,以及另一个主机控制器,EHCI主机控制器,它们都是pci设备.
接着我们来看Makefile.
localhost:/usr/src/linux-2.6.22.1/drivers/usb/host # cat Makefile
# Makefile for USB Host Controller Drivers
ifeq ($(CONFIG_USB_DEBUG),y)
&&&&&&& EXTRA_CFLAGS&&&&&&&&&&& += -DDEBUG
obj-$(CONFIG_PCI)&&&&&&&&&&&&&& += pci-quirks.o
obj-$(CONFIG_USB_EHCI_HCD)&&&&& += ehci-hcd.o
obj-$(CONFIG_USB_ISP116X_HCD)&& += isp116x-hcd.o
obj-$(CONFIG_USB_OHCI_HCD)&&&&& += ohci-hcd.o
obj-$(CONFIG_USB_UHCI_HCD)&&&&& += uhci-hcd.o
obj-$(CONFIG_USB_SL811_HCD)&&&& += sl811-hcd.o
obj-$(CONFIG_USB_SL811_CS)&&&&& += sl811_cs.o
obj-$(CONFIG_USB_U132_HCD)&&&&& += u132-hcd.o
很显然,我们要的就是与CONFIG_USB_UHCI_HCD对应的uhci-hcd.o这个模块.而与uhci-hcd.o最相关的就是与之同名的C文件.这是它的源文件.在drivers/usb/host/uhci-hcd.c的最后7行,我们看到:
&&& 969 module_init(uhci_hcd_init);
&&& 970 module_exit(uhci_hcd_cleanup);
&&& 972 MODULE_AUTHOR(DRIVER_AUTHOR);
&&& 973 MODULE_DESCRIPTION(DRIVER_DESC);
&&& 974 MODULE_LICENSE(&GPL&);
正如每个女人都应该有一支口红,每个模块都应该有两个宏,它们是module_init和module_exit,分别用来初始化和注销自己.而这两行代码的意思就是说uhci_hcd_init这个函数将会在你加载这个模块的时候被调用,uhci_hcd_cleanup则是将会在你卸载这个模块的时候被执行.
所以我们没有办法,只能从uhci_hcd_init开始我们的故事.
&&& 917 static int __init uhci_hcd_init(void)
&&& 919&&&&&&&& int retval = -ENOMEM;
&&& 921&&&&&&&& printk(KERN_INFO DRIVER_DESC & & DRIVER_VERSION &%s/n&,
&&& 922&&&&&&&&&&&&&&&&&&&&&&&& ignore_oc ? &, overcurrent ignored& : &&);
&&& 924&&&& &&&&if (usb_disabled())
&&& 925&&&&&&&&&&&&&&&& return -ENODEV;
&&& 927&&&&&&&& if (DEBUG_CONFIGURED) {
&&& 928&&&&&&&&&&&&&&&& errbuf = kmalloc(ERRBUF_LEN, GFP_KERNEL);
&&& 929&&&&&&&&&&&&&&&& if (!errbuf)
&&& 930&&&&&&&&&&&&&&&&&&&&&&&& goto errbuf_
&&& 931&&&&&&&&&&&&&&&& uhci_debugfs_root = debugfs_create_dir(&uhci&, NULL);
&&& 932&&&&&&&&&&&&&&&& if (!uhci_debugfs_root)
&&& 933&&&&&&&&&&&&&&&&&&&&&&&& goto debug_
&&& 934&&&&&&&& }
&&& 936&&&&&&&& uhci_up_cachep = kmem_cache_create(&uhci_urb_priv&,
&&& 937&&&&&&&&&&&&&&&& sizeof(struct urb_priv), 0, 0, NULL, NULL);
&&& 938&&&&&&&& if (!uhci_up_cachep)
&&& 939&&&&&&&&&&&&&&&& goto up_
&&& 941&&&&&&&& retval = pci_register_driver(&uhci_pci_driver);
&&& 942&&&&& &&&if (retval)
&&& 943&&&&&&&&&&&&&&&& goto init_
&&& 945&&&&&&&& return 0;
&&& 947 init_failed:
&&& 948&&&&&&&& kmem_cache_destroy(uhci_up_cachep);
&&& 950 up_failed:
&&& 951&&&&&&&& debugfs_remove(uhci_debugfs_root);
&&& 953 debug_failed:
&&& 954&&&&&&&& kfree(errbuf);
&&& 956 errbuf_failed:
&&& 958&&&&&&&&
我不知道这个函数算不算我们迄今为止最有技术含量的一个函数.我甚至怀疑,以前写代码的哥们喜欢用冗长的函数来吓唬我,后来,通过我像祥林嫂般的不断&&呐喊&&,他们也开始&&彷徨&&,他们也开始&&友邦惊诧&&,他们发现,那种冗长的代码就像雷锋塔一样,迟早要倒掉的.所以他们修正了自己写代码的风格,也算是&&从百草园到三味书屋&&了吧,只可惜,我在复旦荒废了四年光阴,毕业后文化程度远不及&&孔乙己&&,充其量也就是&&少年闰土&&的水准.所以,眼前这个函数,对我来说,只能说,简约,而不简单.莫非&难道&写代码的哥们都穿了利郎商务男装?要不就是他们都是陈道明的粉丝.
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场您还未登陆,请登录后操作!
微号是131211.请求解答.谢谢!
您的举报已经提交成功,我们将尽快处理,谢谢!
直接用邮箱账号或者登录名登陆即可 [如果我的回答对您有帮助 请点击"好评"支持下 谢谢]
大家还关注摘自:usb协议
& 最近在做一个usb总线控制器的驱动,用的是一个韩国厂家的.基本上是CPU bus -&芯片-&usb设备.
& 因此我做的驱动类似于uhci ehci ohci的驱动.
& 完全是个人理解,如果有错,可以私聊.
& uhci ehci ohci以及我做的hcdxxx都属于总线控制器的驱动,就是与cpu总线接口的usb控制器驱动.
EHCI是有Intel等几个厂商研发,兼容OHCI& UHCI&遵循USB2.0规范。
OHCI主要为非PC系统上以及带有SiShe ALi芯片组的PC主板上的USB芯片
UHCI大多为Intel和Via主板上的USB控制器芯片。UHCI的硬件电路比OHCI简单,成本第,但驱动复杂。但他们都是由USB1.1规格的。
架构基本上是:urb-&hcd/ehci-&driver-&device
urb就是驱动应用层,在这一层创建urb,注册urb回调之类的工作,在这一层用来区分什么设备endpoint.
hcd/ehci这一层,就是add设备,还有操作总线寄存器,实现usb的数据IN/out-&data-&ACK三步曲,当然数据出错时,会有NAK,或者stall,而不是ACK.这一层不区分端点的类别,比如说bulkin的设备有四个设备,但这一层不做区分.
driver这一层,就是调用回调了,实际上这一层是不存在的,但是由于hcd/echi这一层把接口回调函数注册给下层用了,因此我添加了这一层,方便理解.
在这一层,什么中断调用,主机通过queue来下发数据,都是在这里面实现.
就写到这里吧,以后有时间把usb core分析一下.
作者:张亮校
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场}

我要回帖

更多关于 爱情是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信