手册页部分 1M: 系统管理命令

退出打印视图

更新时间: 2014 年 7 月
 
 

cfgadm_usb(1M)

名称

cfgadm_usb - USB 硬件特定的 cfgadm 命令

用法概要

/usr/sbin/cfgadm [-f] [-y | -n] [-v] -c function ap_id...
/usr/sbin/cfgadm -f [-y | -n] [-v] [-o hardware_options]
     -x hardware_function ap_id...
/usr/sbin/cfgadm -v [-a] [-s listing_option] 
     [-l [ap_id | ap_type...]]
/usr/sbin/cfgadm -v -h [ap_id]...

描述

通用串行总线 (Universal Serial Bus, USB) 硬件特定库 /usr/lib/cfgadm/usb.so.1 提供了通过 cfgadm(1M) 命令管理 USB 设备的功能。cfgadm 在连接点上运行。有关连接点的详细信息,请参见 cfgadm(1M)

对于 USB 管理,所支持的连接点仅为连接到 USB 总线的集线器端口。

连接点通过 ID (ap_id) 进行命名。USB 总线是分层的,因此 ap_id 也是分层的。USB 集线器端口的编号从 1n。所有 USB ap_id 均由以下格式的字符串组成:

usbN/A[.B[.C[...]]]

其中

N 是系统上的第 N 个 USB 主机控制器,
A 是根(顶部)集线器上的端口号 A
B 是插入到其上方的集线器的端口号 A 中的集线器的端口号 B
C 是插入到其上方集线器端口 #B 的集线器的端口 #C,依此类推。

例如,USB 控制器 0(唯一的控制器)的根集线器上的第一个端口具有以下逻辑 ap_id

usb0/1

同样,插入第一个 USB 控制器的根集线器上第一个端口中的第一个外部集线器上的第二个端口具有以下逻辑 ap_id


usb0/1.2

例如,如果 ap_idusb0/1.4.3.4,则表示插入集线器(插入集线器(插入系统上的第一个 USB 主机控制器的根集线器的端口 1)端口 4)端口 3 的集线器的端口 4

example# cfgadm -l
Ap_Id                Type         Receptacle   Occupant     Condition
usb0/1               USB-hub      connected    configured   ok
usb0/2               unknown      empty        unconfigured ok
usb0/1.1             USB-storage  connected    configured   ok
usb0/1.2             unknown      empty        unconfigured ok
usb0/1.3             unknown      empty        unconfigured ok
usb0/1.4             USB-device   connected    configured   ok

USB2.0 芯片具有一个 EHCI 主机 USB2.0 主机控制器和多个伴随 USB 1.x 主机控制器(OHCIUHCI 主机控制器)。

插入 USB2.0 设备后,它将在可能没有一对一映射到系统上外部物理端口号的 EHCI 逻辑端口上显示。插入 USB1.x 设备后,EHCI 主机控制器将该设备重新路由到伴随主机控制器,并且该设备将在伴随控制器的逻辑端口号上显示。

逻辑端口号到物理端口号的映射可以变得很复杂。例如:


% cfgadm
Ap_Id                Type         Receptacle   Occupant     Condition
c0                   scsi-bus     connected    configured   unknown
usb0/1               usb-mouse    connected    configured   ok
usb0/2               usb-kbd      connected    configured   ok
usb0/3               unknown      empty        unconfigured ok
usb0/4               usb-hub      connected    configured   ok
usb0/4.1             unknown      empty        unconfigured ok
usb0/4.2             unknown      empty        unconfigured ok
usb0/4.3             unknown      empty        unconfigured ok
usb0/4.4             usb-storage  connected    configured   ok
usb1/1               unknown      empty        unconfigured ok
usb1/2               unknown      empty        unconfigured ok
usb1/3               unknown      empty        unconfigured ok
usb2/1               unknown      empty        unconfigured ok
usb2/2               usb-device   connected    configured   ok
usb3/1               unknown      empty        unconfigured ok
usb3/2               unknown      empty        unconfigured ok
usb3/3               unknown      empty        unconfigured ok
usb3/4               unknown      empty        unconfigured ok
usb3/5               unknown      empty        unconfigured ok

在本例中,usb0 是板载 USB 1.x 主机控制器。usb1usb2 是伴随 OHCI USB1.x 主机控制器,usb3EHCI USB2.0 主机控制器。

下表中显示了此 USB2.0 芯片有些混乱的路由:


logical port number		physical port number
-------------------		--------------------
	usb1/1			internal port 1	
	usb1/2			external port 1
	usb1/3			external port 3
	
	usb2/1			internal port 2
	usb2/2			external port 2
	
	usb3/1			internal port 1
	usb3/2			internal port 2
	usb3/3			external port 1
	usb3/4			external port 2
	usb3/5			external port 3

遗憾的是,具体的路由通常只能通过实验确定。

USB 端口上的连接点插口状态含义如下:

connected(已连接)

USB 端口已通电且启用。USB 设备插入该端口中。该设备在逻辑上连接到 USB 总线。

disconnected(断开)

USB 端口已通电且启用。USB 设备插入到该端口中。该设备已在逻辑上与 USB 总线断开连接(使用 cfgadm –c disconnect 命令)。

empty(空)

USB 端口已通电,但没有插入任何设备。

USB 端口上的设备在 USB 端口的连接点插卡状态含义如下:

configured(已配置)

USB 端口上的 USB 设备已配置且可供 Solaris 使用。

unconfigured(未配置)

使用 cfgadm –c unconfigure 命令使 USB 端口上的 USB 设备显式脱机,或没有成功配置该设备而无法用于 Solaris(例如,没有驱动程序或设备存在问题)。

连接点状态含义如下:

ok(正常)

正常状态—可供使用。

FAILED(失败)

未使用。

failed(失败)

未使用。

unusable(不可用)

在设备已被应用程序打开的情况下,用户物理移除了该设备(可能有未完成的 I/O)。用户需要重新插入同一物理设备并正确关闭应用程序,然后再次移除该设备。此操作完成之前,端口不能配置其他插入的设备。

如果无法将原始设备重新插入端口,请参见在 Oracle Solaris 11.2 中管理设备 了解清除此连接点状态的说明。

unknown(未知)

未使用。

可以随时对 USB 设备进行热插拔,系统会检测该事件并采取相应的操作。

在从 USB 移除插口上的设备之前,不必将插口转换为 disconnected(断开)状态。但是,建议不要热移除当前正在使用的设备(如当前由卷管理器或某些其他应用程序打开的可移除磁盘)。

选项

cfgadm 可定义多种类型的操作。这些操作包括调用配置状态更改 (–c)、调用硬件特定函数 (–x) 以及获取配置管理帮助消息 (–h)。

如果上述任一操作失败,设备和连接点可能不会处于期望的状态。使用 cfgadm –l 命令可显示设备的当前状态。

有关其他所有选项的含义,可参见 cfgadm(1M) 中的定义。

支持以下选项:

–c function

以下通用命令是针对 USB 硬件特定库定义的。支持以下配置状态更改操作:

configure

如果已有 USB 设备插入端口,则此命令将尝试配置该设备并完成所有设置,使其可供 Solaris 使用。如果需要,此命令可执行暗示的 connect(与 disconnect 相反)。如果已经配置了该端口上的设备,则此命令不完成任何操作,而是返回错误消息。成功执行此命令后,该设备可供 Solaris 使用。

disconnect

ap_id 执行 unconfigure(如果不处于 unconfigured(未配置)),然后将插口转换为 disconnected(断开)状态,即使设备仍插在端口中。发出 cfgadm –c configure 命令或以物理方式热插入设备可使设备的插口状态恢复为 connected(已连接),并使其插卡状态恢复为 configured(已配置),前提是可以找到驱动程序且枚举和配置设备时未出现问题。

unconfigure

使插入端口中的设备不可供 Solaris 使用(使其脱机)。如果成功,cfgadm 会将该 ap_id 的插卡状态报告为 unconfigured(未配置)。向 ap_id 发出 configure 命令(如果成功)可使其插卡状态恢复为 configured(已配置,即联机),因为这会以物理方式将设备热插入端口。

–f

不支持。

–h ap_id

通过对任何 USB 连接点使用帮助选项可获取 USB 特定的帮助。

–l[v]

按照 cfgadm(1M) 中的描述使用 –l 选项。如果该选项与 –v 选项一起使用,Information 字段将包含以下 USB 特定信息:

  • Mfg:生产商字符串 (iManufacturer)

  • Product:产品字符串 (iProduct)

  • NConfigs:设备支持的配置总数 (bNumConfigurations)。

  • Config:十进制形式的当前配置设置(配置索引,非配置值)。

  • 当前配置的配置字符串描述符 (iConfiguration)

有关这些字段的描述,请参见通用串行总线规范。

–o hardware_options

只有硬件特定的命令 –x usb_config 支持硬件选项。有关可用选项的说明,请参见以下关于该命令的描述。

–s listing_options

可使用 select 子选项列出 USB 类的连接点。请参见 cfgadm(1M)

–x hardware_function

定义了以下硬件特定的函数:

usb_config –o config=n

此命令要求使用 –o 选项指定必需的 config 值。

ap_id 上的多配置 USB 设备的 USB 配置设置为配置索引 n。此后该设备都设置为此配置,而且在设备的重新引导、热移除和取消配置/配置中将一直保持此设置。

n 的有效值范围是 0 到 (Nconfigs -1)。可以通过先后执行 disconnectconfigure 来复位设备。configure 操作会将设备配置为新的配置设置。

如果上述任一步骤失败,则配置文件和设备将恢复为之前的状态,并显示错误消息。

usb_reset

执行设备的软件复位(重新枚举)。这等效于移除设备然后再次插入。如果集线器支持单个端口的关开机循环,则集线器上的端口将进行关开机循环。

如果连接的设备是集线器,则此函数将复位该集线器以及其作为根的树中的任何设备。

如果上述任一步骤失败,设备将恢复为之前的状态,并显示错误消息。

状态表:连接点状态与命令:

Valid states:
    empty/unconfigured         → no device connected

    disconnected/unconfigured  → logically disconnected,
                                  unavailable,
                                  devinfo node removed,
                                  device physically connected

    connected/unconfigured     → logically connected,
                                  unavailable,
                                  devinfo node present

    connected/configured       → connected, available

下表说明操作或命令导致的状态转换:

current state      operation           new state
-------------      ---------           ---------
empty/
unconfigured:
              device plugged in:     connected/configured or
                                     connected/unconfigured
                                     (if enumeration failed)
              device removed:        n/a
              cfgadm -c unconfigure: empty/unconfigured
              cfgadm -c configure:   empty/unconfigured
              cfgadm -c disconnect:  empty/unconfigured
                                     (no-op and error)

disconnected/
unconfigured:
              device plugged in:     n/a
              device removed:        empty/unconfigured
              cfgadm -c unconfigure: disconnected/unconfigured
              cfgadm -c configure:   connected/configured, or
                                     connected/unconfigured
                                     (if reenumeration failed)
             cfgadm -c disconnect:   disconnected/unconfigured

connected/unconfigured:
             device plugged in:      n/a
             device removed:         empty/unconfigured
             cfgadm -c unconfigure:  connected/unconfigured
             cfgadm -c configure:    connected/configured, or
                                     connected/unconfigured
                                     (if reenumeration failed)
             cfgadm -c disconnect:   disconnected/unconfigured

connected/configured:
             device plugged in:      n/a
             device removed:         empty/unconfigured or
                                     connected/configured,
                                     but with ap condition
                                     'unusable' if device
                                     was open when removed
             cfgadm -c unconfigure:  connected/unconfigured
             cfgadm -c configure:    connected/configured
             cfgadm -c disconnect:   disconnected/unconfigured

示例

示例 1 列出所有 USB 设备的状态

以下命令列出系统上所有 USB 设备的状态:


# cfgadm
Ap_Id           Type         Receptacle   Occupant     Condition
usb0/1          USB-hub      connected    configured   ok
usb0/2          unknown      empty        unconfigured ok
usb0/1.1        USB-storage  connected    configured   ok
usb0/1.2        unknown      empty        unconfigured ok
usb0/1.3        unknown      empty        unconfigured ok
usb0/1.4        USB-device connected    configured   ok

请注意,cfgadmap_id usb0/1.4 上的 USB-device 设备视为单个单元,因为它当前不能控制单个接口。

示例 2 列出没有插入任何设备的端口的状态

以下命令列出没有插入任何设备的端口的状态:

example# cfgadm -l usb0/1.3
Ap_Id           Type         Receptacle   Occupant     Condition
usb0/1.3        unknown      empty        unconfigured ok       
示例 3 列出插入设备的同一端口的状态

以下命令列出以物理方式插入成功配置的设备后,同一端口的状态:

example# cfgadm -l usb0/1.3
Ap_Id           Type         Receptacle   Occupant     Condition
usb0/1.3        USB-hub      connected    configured   ok
示例 4 取消对现有 USB 设备的配置

以下命令取消对连接到 usb0/1.3 的 USB 设备的配置,然后显示 ap_id 的状态:

example# cfgadm -c unconfigure usb0/1.3
Unconfigure the device: /devices/pci@0,0/pci8086,7112@7,2/hub@2:2.3
This operation suspends activity on the USB device
Continue (yes/no)?

Enter:

y

example# cfgadm -l usb0/1.3
Ap_Id           Type         Receptacle   Occupant     Condition
usb0/1.3        unknown      connected    unconfigured ok
示例 5 取消配置并在逻辑上断开现有 USB 设备

以下命令取消连接到 usb0/1.3 的 USB 设备的配置,并在逻辑上断开其连接:

example# cfgadm -c disconnect usb0/1.3
Disconnect the device: /devices/pci@0,0/pci8086,7112@7,2/hub@2:2.3
This operation suspends activity on the USB device 
Continue (yes/no)?

Enter:

y

example# cfgadm -l usb0/1.3
Ap_Id         Type         Receptacle     Occupant        Condition
usb0/1.3      unknown      disconnected   unconfigured    ok    

disconnect 暗示 cfgadm 首先执行 unconfigure。现在插口状态显示为 disconnected,即使设备在物理上仍处于连接状态。在这种情况下,以物理方式热插入或对 ap_id 使用 cfgadm –c configure 可以使其恢复联机。

示例 6 配置之前未配置的 USB 设备

以下命令配置之前连接到 usb0/1.3 的 USB 设备:

example # cfgadm -yc configure usb0/1.3
example# cfgadm -l usb0/1.3
Ap_Id           Type         Receptacle   Occupant     Condition
usb0/1.3        unknown      connected    configured   ok
示例 7 复位 USB 设备

以下命令复位 USB 设备:

example# cfgadm -x usb_reset usb0/1.3
Reset the device: /devices/pci@0,0/pci8086,7112@7,2/hub@2:2.3
This operation suspends activity on the USB device 
Continue (yes/no)?

Enter:

y
示例 8 显示有关 USB 设备的详细信息

以下命令显示有关 USB 设备的详细信息。该设备在 Information 字段中显示以下 USB 特定的信息:

  • 生厂商字符串:Iomega

  • 产品字符串:USB Zip 250

  • 支持的配置数:1

  • 当前活动的配置:0

  • 配置 0 的配置字符串描述符:缺省

example# cfgadm -lv  usb0/1.5
Ap_Id                 Receptacle   Occupant     Condition  Information
When         Type         Busy         Phys_Id
usb0/1.5     connected    configured   ok         Mfg:"Io
mega"  Product:"USB Zip 250"  NConfigs:1  Config:0 : Default
example# cfgadm -l -s "cols=ap_id:info" usb0/1.5
Ap_Id                         Information
usb0/1.5                      Mfg:"Iomega"  Product:"USB Zip 250"  
NConfigs:1  Config:0 : Default
示例 9 显示有关所有 USB 设备的详细信息

以下命令显示有关系统上所有 USB 设备的详细信息:

example# cfgadm -l -s "select=class(usb),cols=ap_id:info"
Ap_Id                         Information 
usb0/1                        Mfg:<undefined>  Product:<undefined>  
NConfigs:1  Config:0 <no cfg str descr>
usb0/2             
usb0/1.1                      Mfg:<undefined>  Product:<undefined>  
NConfigs:1  Config:0 <no cfg str descr>
usb0/1.2         
usb0/1.3         
usb0/1.4                      Mfg:"Wizard"  Product:"Modem/ISDN"  
NConfigs:3  Config:1 : V.90 Analog Modem
usb0/1.5                      Mfg:"Iomega"  Product:"USB Zip 250"  
NConfigs:1  Config:0 : Default
usb0/1.6                      Mfg:"SOLID YEAR"  Product:"SOLID YEAR 
USB"NConfigs:1  Config:0 <no cfg str descr>
usb0/1.7

仅包含 ap_id 的行表示空端口。可以过滤出这些端口。以下示例仅列出连接有设备的 USB ap_id 以及有关这些设备的信息。

example# cfgadm -l -s "select=class(usb),cols=ap_id:info" | grep Mfg
usb0/1                        Mfg:<undefined>  Product:<undefined>  
NConfigs:1  Config:0 <no cfg str descr>
usb0/1.1                      Mfg:<undefined>  Product:<undefined>  
NConfigs:1  Config:0 <no cfg str descr>
usb0/1.4                      Mfg:"Wizard"  Product:"Modem/ISDN"  
NConfigs:3  Config:1 : V.90 Analog Modem
usb0/1.5                      Mfg:"Iomega"  Product:"USB Zip 250"  
NConfigs:1  Config:0 : Default
usb0/1.6                      Mfg:"SOLID YEAR"  Product:"SOLID YEAR USB" 
Config:0 <no cfg str descr>
示例 10 列出有关多配置 USB 设备的信息

以下示例列出有关多配置 USB 设备的信息。

请注意 NConfigs 字段:该设备可用的配置有 0120 到 (NConfigs-1))。

example# cfgadm -l -s "cols=ap_id:info" usb0/1.4
Ap_Id                         Information
usb0/1.4                      Mfg:"Wizard"  Product:"Modem/ISDN"  
NConfigs:3  Config:1 V.90 Analog Modem"
示例 11 设置多配置 USB 设备的当前配置

以下示例设置多配置 USB 设备的当前配置:

example# cfgadm -o config=2 -x usb_config usb0/1.4
Setting the device: /devices/pci@1f,2000/usb@1/device@3
to USB configuration 2
This operation suspends activity on the USB device
Continue (yes/no)? 

Enter:

y

USB configuration changed successfully.

相同类型的多个设备位于同一总线时,应该检查设备路径以确保引用的是正确的设备实例。在 Information 字段提供了该信息。

文件

/usr/lib/cfgadm/usb.so.1

用于管理通用 USB 设备的硬件特定库

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/library

另请参见

cfgadm(1M)config_admin(3CFGADM)attributes(5)scsa2usb(7D)usba(7D)

通用串行总线 1.1 规范 (www.usb.org)

在 Oracle Solaris 11.2 中管理设备

附注

cfgadm(1M) 无法取消配置、断开、复位或更改当前由任何应用程序打开的任何 USB 设备的配置。如果分层结构中有某个设备由应用程序打开,则也无法在集线器上执行这些操作。有关取消对当前正在使用的 USB 海量存储设备的配置的信息,请参见 scsa2usb(7D)

只有超级用户才能对连接点执行任何函数。但是,如果只是列出连接点,那么非超级用户也可完成。