分享
 
 
 

如何在LINUX下实现硬件的自动检测(下)

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

本文是《如何在LINUX下实现硬件的自动检测》一文的下部分,作者将继续向我们讲述如何自动检测另外几种总线类型硬件设备。

5 .USB设备的自动检测

5.1 USB设备检测的一般过程

USB设备检测也是通过/proc目录下的USB文件系统进行的。为了使一个USB设备能够正常工作,必须要现在系统中插入USB桥接器模块。在检测开始时,一般要先检测是否存在/proc/bus/usb目录,若不存在则尝试插入USB桥接模块。

现在一般的USB桥接器模块有两种类型,UHCI和OHCI。在决定插入那一个桥接器模块时,可以察看/proc/pci文件来决定。打开此文件,您若发现USB节为 I/O at 0xHHHH格式(例如出现 I/O at 0xe000 [0xe01f]),HHHH为16进制数,则桥接器类型为UHCI。若是它为32 bit memory at 0xHH000000形式(例如出现32 bit memory at 0xee000000),HH为16进制数,则桥接器类型为OHCI。但是若您的桥接器类型不满足上述任何一种情况,唯一的解决办法就是您尝试插入这两种模块,直到成功为止。一般而言,UHCI类型的桥接器它的插入模块是uhci或usb-uhci(由内核版本决定);而对于OHCI类型的桥接器它的插入模块是ohci或usb-ohci。

您在正确的插入了桥接器模块之后,这时/proc文件系统下就会出现USB设备目录,不过这时这个目录是空的,没有任何文件。这时您就必须挂接usbdevfs文件系统,然后通过此文件系统检测连接的设备。在成功挂接usb文件系统之后,就会生成文件/proc/bus/usb/devices,/proc/bus/usb/drivers和目录/proc/bus/usb/busNo。挂接usbdevfs文件您可以通过如下操作实现:

mount -t usbdevfs none /proc/bus/usb

或在/etc/fstab上加入

none /proc/bus/usb usbdevfs defaults 0 0

然后通过/proc/bus/usb/devices文件的内容,您就可以获得连接的设备信息,包括设备标识和制造商标是等信息。

usb设备类型描述:

设备规范 设备类码 接口类码

应用程序特定 - 0xFE

声音接口 0x00 0x01

通信设备 0x02 -

CDC控制接口e - 0x02

CDC数据接口 - 0x0A

HID 0x00 0x03

HUB 0x09 0x09

批量存储设备 0x00 0x08

监视器 same as HID same as HID

电源设备 same as HID same as HID

物理设备 - 0x05

打印机 - 0x07

供应商特定 - 0xFF

表5-1 usb设备类码

5.2 usb文件系统简介

T = 总线拓扑结构(Lev, Prnt, Port, Cnt, 等),是指USB设备和主机之间的连接方式

B = 带宽 (仅用于USB主控制器)

D = 设备描述信息

P = 产品标识信息

S = 串描述符

C = 配置描述信息 (* 表示活动配置)

I = 接口描述信息

E = 终端点描述信息

一般格式:

d = 十进制数

x = 十六进制数

s = 字符串

拓扑信息

T:

Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=ddd MxCh=dd

|

|

|

|

|

|

|

|

|__最大子设备

|

|

|

|

|

|

|

|__设备速度(Mbps)

|

|

|

|

|

|

|__设备编号

|

|

|

|

|

|__这层的设备数

|

|

|

|

|__此设备的父连接器/端口

|

|

|

|__父设备号

|

|

|__此总线在拓扑结构中的层次

|

|__总线编号

|__拓扑信息标志

带宽信息

B:

Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd

|

|

|

|__同步请求编号

|

|

|__中断请求号

|

|__分配给此总线的总带宽

|__带宽信息标志

设备描述信息和产品标识信息

D:

Ver=x.xx Cls=xx(s) Sub=xx Prot=xx MxPS=dd #Cfgs=dd

P:

Vendor=xxxx ProdID=xxxx Rev=xx.xx

D:

Ver=x.xx Cls=xx(sssss) Sub=xx Prot=xx MxPS=dd #Cfgs=dd

|

|

|

|

|

|

|__配置编号

|

|

|

|

|

|______缺省终端点的最大包尺寸

|

|

|

|

|

|

|

|

|

|__设备协议

|

|

|

|__设备子类型

|

|

|__设备类型

|

|__设备USB版本

|__设备信息标志编号#1

P:

Vendor=xxxx ProdID=xxxx Rev=xx.xx

|

|

|

|__产品修订号

|

|

|__产品标识编码

|

|__制造商标识编码

|__设备信息标志编号#2

串描述信息

S:

Manufacturer=ssss

|

|__设备上读出的制造商信息

|__串描述信息

S:

Product=ssss

|

|__设备上读出的产品描述信息,对于USB主控制器此字段为"USB *HCI Root Hub"

|__串描述信息

S:

SerialNumber=ssss

|

|__设备上读出的序列号,对于USB主控制器它是一个生成的字符串,表示设备标识

|__串描述信息

配置描述信息

C:

#Ifs=dd Cfg#=dd Atr=xx MPwr=dddmA

|

|

|

|

|__最大电流(mA)

|

|

|

|__属性

|

|

|__配置编号

|

|__接口数

|__配置信息标志

接口描述信息(可为多个)

I:

If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=ssss

|

|

|

|

|

|

|

|__驱动名

|

|

|

|

|

|

|__接口协议

|

|

|

|

|

|__接口子类

|

|

|

|

|__接口类

|

|

|

|__中断点数

|

|

|__可变设置编号

|

|__接口编号

|__接口信息标志

终端点描述信息

E:

Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddms

E:

Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddms

|

|

|

|

|__间隔

|

|

|

|__终端点最大包尺寸

|

|

|__属性(终端点类型)

|

|__终端点地址(I=In,O=Out)

|__终端点信息标志

举个例子,这是在连接了一个USB键盘时的配置情况。

T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2

B: Alloc= 41/900 us ( 5%), #Int= 3, #Iso= 0

D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1

P: Vendor=0000 ProdID=0000 Rev= 0.00

S: Product=USB UHCI Root Hub

S: SerialNumber=e000

C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA

I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 3

D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1

P: Vendor=07e4 ProdID=a961 Rev= 0.01

S: Manufacturer=ALCOR

S: Product=Movado USB Keyboard

C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA

I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=255ms

T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0

D: Ver= 1.10 Cls=00(ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1

P: Vendor=07e4 ProdID=a961 Rev= 0.01

S: Manufacturer=ALCOR

S: Product=Movado USB Keyboard

C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr= 0mA

I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=hid

E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl= 10ms

I: If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=hid

E: Ad=82(I) Atr=03(Int.) MxPS= 4 Ivl=255ms

它的物理拓扑可用下图来表示:

对于Linux下的usb设备而言,T:(总线拓扑)行用于生成连接在hub上的设备的描述信息,I:(接口信息)行可用于决定每个设备所用的驱动程序,C:(配置信息)可用于列出设备使用最大电流。

对于Linux下的usb设备,您可以访问http://www.linux-usb.org获取更详细的信息。

6 并行设备的自动检测

6.1 并行设备检测的一般过程

在Linux下要实现连接在并口上的设备检测,要求设备必须是支持IEEE 1284协议的。对于不支持IEEE 1284通讯协议的并行设备,是无法完成自动检测的。同样在定制系统内核时,也必须在并行端

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有