Richard
2010-Jul-28 22:28 UTC
[Nut-upsuser] APC SmartUPS 2200XL + UDEV + USB = tcgetattr : Invalid argument
I need direction. I don't know what to google for anymore. I am unable to get my SmartUPS 2200XL to be recognized. My suspicions are that it's UDEV or Kernel related. I've updated the kernel to the highest version I feel comfortable with due to other things that run on the server, and I've updated UDEV a bit too. When I plug in the USB cable from the UPS into the server, I see the usb driver recognizing the UPS, but I don't see it assigning a device name. I added in a manually created udev rule and now the device appears, but it seems like the wrong driver is attached to the device. As this is my first time setting up NUT, I'm unsure if I'm configuring NUT incorrectly or if I have a USB/UDEV/Kernel issue. Does anyone have any suggestions or hints as to what I can search for next to solve this issue? I'm going to try the latest build from svn. ----------------------------- Here is what I have and what I've seen so far. I thought about pastebin'ing this but figured it might help the next person who is goggle'ing. Server OS: Slackware 12.0 Kernel Version: 2.6.25.20 UDEV version: 135 NUT version: 2.4.3 The following output is from ===== Log file output ==== ==> /var/log/messages <=Jul 28 12:26:09 swmweb kernel: usb 4-2: configuration #1 chosen from 1 choice ==> /var/log/syslog <=Jul 28 12:26:09 swmweb kernel: hub 1-0:1.0: unable to enumerate USB device on port 6 ==> /var/log/messages <=Jul 28 12:26:11 swmweb kernel: hiddev96: USB HID v1.10 Device [American Power Conversion Smart-UPS 2200 XL FW:690.19.D USB FW:7.4] on usb-0000:00:1d.2-2 ===== What I see in /proc ===== /proc/bus/usb/devices {lines 43-51} T: Bus=04 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0 D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=051d ProdID=0002 Rev= 0.06 S: Manufacturer=American Power Conversion S: Product=Smart-UPS 2200 XL FW:690.19.D USB FW:7.4 S: SerialNumber=JS1005032730 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 30mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid E: Ad=81(I) Atr=03(Int.) MxPS= 6 Ivl=100ms ===== what I see in /sys/block ===== # ls /sys/block hda/ loop2/ loop6/ ram1/ ram13/ ram3/ ram7/ sdb/ sdf/ hdb/ loop3/ loop7/ ram10/ ram14/ ram4/ ram8/ sdc/ loop0/ loop4/ md0/ ram11/ ram15/ ram5/ ram9/ sdd/ loop1/ loop5/ ram0/ ram12/ ram2/ ram6/ sda/ sde/ ===== What udevadm (udevinfo) sees ==== # udevadm info -a -p /sys/devices/pci0000:00/0000:00:1d.2 /usb4/4-2 Udevinfo starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/pci0000:00/0000:00:1d.2/usb4/4-2': KERNEL=="4-2" SUBSYSTEM=="usb" DRIVER=="usb" ATTR{configuration}=="1" ATTR{bNumInterfaces}==" 1" ATTR{bConfigurationValue}=="1" ATTR{bmAttributes}=="e0" ATTR{bMaxPower}==" 30mA" ATTR{urbnum}=="3668" ATTR{idVendor}=="051d" ATTR{idProduct}=="0002" ATTR{bcdDevice}=="0006" ATTR{bDeviceClass}=="00" ATTR{bDeviceSubClass}=="00" ATTR{bDeviceProtocol}=="00" ATTR{bNumConfigurations}=="1" ATTR{bMaxPacketSize0}=="8" ATTR{speed}=="1.5" ATTR{busnum}=="4" ATTR{devnum}=="2" ATTR{version}==" 1.10" ATTR{maxchild}=="0" ATTR{quirks}=="0x0" ATTR{authorized}=="1" ATTR{manufacturer}=="American Power Conversion" ATTR{product}=="Smart-UPS 2200 XL FW:690.19.D USB FW:7.4" ATTR{serial}=="JS1005032730" <snip the rest of the udevinfo tree walk> ===== The rule I made since no /dev/device was being created ==== # cat /etc/udev/rules.d/90-local-udev.rules #/dev/smartups UPS SUBSYSTEMS=="usb", ATTRS{manufacturer}=="American Power Conversion", ATTRS{product}=="Smart-UPS 2200 XL FW:690.19.D USB FW:7.4", ATTRS{serial}=="JS1005032730", NAME="apcusb", SYMLINK+="smartups", MODE="0660", GROUP="nut" ===== ups.conf ====# cat /etc/nut/ups.conf [2200XL] driver = apcsmart port = /dev/apcusb desc = "Main 2200 XP with battery pack" ===== This is what happens when apcsmart is executed ====# cd /usr/libexec/nut/ # ./apcsmart -a 2200XL Network UPS Tools - APC Smart protocol driver 2.03 (2.4.3) APC command table version 2.1 tcgetattr(/dev/apcusb): Invalid argument
Charles Lepple
2010-Jul-29 00:51 UTC
[Nut-upsuser] APC SmartUPS 2200XL + UDEV + USB = tcgetattr : Invalid argument
On Wed, Jul 28, 2010 at 6:28 PM, Richard <richard-nut at rain4us.net> wrote:> ===== ups.conf ====> # cat /etc/nut/ups.conf > > [2200XL] > ? ? ? driver = apcsmart > ? ? ? port = /dev/apcusb > ? ? ? desc = "Main 2200 XP with battery pack"Pretty much all of the USB-based APC UPSes work with the "usbhid-ups" driver. "apcsmart" is only used if you connect via the serial port. (The USB entries are towards the bottom of the APC section of the compatibility list, so maybe we can make that clearer.) You won't need the symlink, either - usbhid-ups has parameters to select an UPS by serial number, vendor ID, etc, and it ignores the value for "port". Check the man page for more details. -- - Charles Lepple