设置方法

在sysfs的文件/sys/bus/usb/devices/<USB设备ID>/power/中进行设置。下面介绍其中的一些设置选项。

/sys/bus/usb/devices/<USB设备ID>/power/autosuspend

这个文件设置的是各个USB设备切换到自动待机为止的时间(秒)。标准设置值为2秒。USB设备处于空闲状态达到2秒以上时,内核就会自动使该设备待机。设置为0时,USB设备一旦空闲就尽快待机。设置为-1时,关闭自动待机。

值的更改通过下列命令来进行。


echo 5>/sys/bus/usb/devices/<USB设备ID>/power/autosuspend


小贴士:标准设置的2秒这个值是在/sys/module/usbcore/parameters/autosuspend中设置的。如果将/sys/modules/usbcore/parameters/autosuspend改为5,则新连接的USB设备的/sys/bus/usb/devices/<USB设备ID>/power/autosuspend的标准设置值也为5秒。/sys/modules/usbcore/parameters/autosuspend还可以通过内核启动参数usbcore.autosuspend=<值>来更改。

USB设备ID是指内核对USB设备添加的编号。下面是台式机的例子。编号为1~7。

$ls/sys/bus/usb/devices/


1-0:1.0 3-0:1.0 5-0:1.0 6-2 7-0:1.0 7-1:1.0 usb2 usb4 usb6

2-0:1.0 4-0:1.0 6-0:1.0 6-2:1.0 7-1 usb1 usb3 usb5 usb7


连接USB存储器后,就会输出如下所示的内核信息。


dmesg

……

usb 1-3:new high speed USB device using ehci_hcd and address 21检测到新的连接

usb 1-3:configuration#1 chosen from 1 choice

scsi25:SCSI emulation for USB Mass Storage devices

usb-storage:device found at 21

usb-storage:waiting for device to settle before scanning

usb-storage:device scan complete

scsi 25:0:0:0:Direct-Access BUFFALO USB Flash Disk 3.10 PQ:0

ANSI:0 CCS

sd 25:0:0:0:[sdb]2015232 512-byte hardware sectors(1032 MB)

sd 25:0:0:0:[sdb]Write Protect is off

sd 25:0:0:0:[sdb]Mode Sense:23 00 00 00

sd 25:0:0:0:[sdb]Assuming drive cache:write through

sd 25:0:0:0:[sdb]2015232 512-byte hardware sectors(1032 MB)

sd 25:0:0:0:[sdb]Write Protect is off

sd 25:0:0:0:[sdb]Mode Sense:23 00 00 00

sd 25:0:0:0:[sdb]Assuming drive cache:write through

sdb:unknown partition table

sd 25:0:0:0:[sdb]Attached SCSI removable disk

sd 25:0:0:0:Attached scsi generic sg2 type 0


这时的USB设备ID为1~3。下面是连接了CD-ROM驱动器时输出的内核信息的例子。USB设备ID为1~4。


dmesg

……

usb 1-4:new high speed USB device using ehci_hcd and address 22

usb 1-4:configuration#1 chosen from 1 choice

scsi26:SCSI emulation for USB Mass Storage devices

usb-storage:device found at 22

usb-storage:waiting for device to settle before scanning

usb-storage:device scan complete

scsi 26:0:0:0:CD-ROM GENERIC DVD-ROM B763B 1.00 PQ:0

ANSI:0

sr1:scsi3-mmc drive:24x/24x cd/rw xa/form2 cdda tray

sr 26:0:0:0:Attached scsi CD-ROM sr1

sr 26:0:0:0:Attached scsi generic sg3 type 5


这样连接USB设备后,输出内核信息,目录下就会变成下列内容。

设置方法 - 图1

此外,使用/sys/bus/usb/devices/<USB设备ID>/product、lsusb命令等也可以确认所连接的USB设备。


cat/sys/bus/usb/devices/5-2/product

USB Optical Mouse

$lsusb

……

Bus 005 Device 002:ID 0461:4d15 Primax Electronics, Ltd Dell Optical Mouse

……


在/sys/bus/usb/devices/<USB设备ID>/power/level中设置auto就可以启用自动待机功能。默认设置为on,因此需要使用下列命令改为auto。


echo auto>/sys/bus/usb/devices/<USB设备ID>/power/level


这样就启用了自动待机功能。但是这个功能比较难以确认。即使USB设备通过自动待机进入待机状态,从外表上也是看不出变化的。

其中USB激光鼠标是比较容易看出效果的一种设备。鼠标经过一定秒数后,背面LED的红光就会消失。这就是已待机的状态。这时鼠标也不会自动移动。单击鼠标的按钮才会自动恢复。LED也发出红光,鼠标就进入可使用状态。

键盘在经过一定秒数后也会自动待机,但从键盘的外观就看不出变化。按键后才会自动恢复。而在按下Numlock键、Shift+CapsLock键、ScreenLock键之一的状态下不会进入自动待机模式。

在USB存储器、CD-ROM设备、软盘驱动器等其他设备上也进行了尝试,但有一些设备内部事件发生频繁,不会进入自动待机模式。

想要确认是否进入自动待机模式,可以启用内核编译选项Device Driver→USB support→USB verbose debug message,重新编译内核,就可以通过内核信息确认自动待机和自动恢复。

/sys/bus/usb/devices/<USB设备ID>/power/level

在这个文件中设置on、auto。默认为on。到内核2.6.32为止还可以设置suspend。

如前所述,如果设置为auto,就可以启用USB设备的自动待机和自动恢复。

按下列方式设置,则对USB设备待机。


echo suspend>/sys/bus/usb/devices/<USB设备ID>/power/level


设备的LED熄灭,在操作系统上也识别不到设备。

指定为on时,就会向待机状态下的USB设备供电。与重新接上USB线时的运行情况相同。


echo on>/sys/bus/usb/devices/<USB设备ID>/power/level


/sys/bus/usb/devices/<USB设备ID>/power/connected_duration

/sys/bus/usb/devices/<USB设备ID>/power/active_duration

从内核2.6.25开始安装了connected_duration和active_duration。connected_duration为USB设备处于连接状态的总时间。单位为毫秒。active_duration为USB设备运行的总时间,也就是USB设备未待机的时间。单位也为毫秒。可以通过这些值来确认自动待机的效果或待机的时间。

下面是刻意待机约10秒的例子。active_duration的值比connect_duration小。


cd/sys/bus/usb/devices/2-1/power/

head*duration

==>active_duration<==

23100994

==>connected_duration<==

23100994

echo suspend>level;sleep 10;echo on>level

head*duration

==>active_duration<==

23124290比connected_duration还要少约10 000毫秒

==>connected_duration<==

23134371