Ubuntu

lsusb : Fix or remove -t option

Reported by Erik de Castro Lopo on 2007-11-01
50
This bug affects 2 people
Affects Status Importance Assigned to Milestone
usbutils (Debian)
Fix Released
Unknown
usbutils (Gentoo Linux)
Fix Released
Low
usbutils (Ubuntu)
Low
Unassigned

Bug Description

In Gutsy, the /proc/bus/usb tree has been removed (for seemingly good reason, see https://bugs.launchpad.net/ubuntu/+source/kvm/+bug/156085/comments/6), but the lsusb command doesn't work quite right without access to the file /proc/bus/usb/devices.

In particular the "lsusb -t" command gives:

cannot open /proc/bus/usb/devices, No such file or directory

Since (according to the above comment) /proc/bus/usb is broken, lsusb should have the -t option fixed or removed.

Related branches

ciskje (ferrara) wrote :

Confirmed

Brian Pitts (bpitts) wrote :

Confirmed

Martijn vdS (martijn) wrote :

Confirmed

Changed in usbutils:
status: New → Confirmed
Xiaofan Chen (xiaofanc) wrote :

This bug seems to still exist in Ubuntu 8.04.

I think it is better to patch usbutils (lsusb) to remove the "-t" option.

mcuee@ubuntu804:~$ uname -a
Linux ubuntu804 2.6.24-16-generic #1 SMP Thu Apr 10 13:23:42 UTC 2008 i686 GNU/Linux
mcuee@ubuntu804:~$ lsusb -t
cannot open /proc/bus/usb/devices, No such file or directory (2)

Changed in usbutils:
importance: Undecided → Low
milestone: none → ubuntu-8.10

I am new here so please be patient if I make some mistakes.
I have followed Xiaofan suggestion and removed the -t option completely from lsusb source code and attached is the .diff file generated as a result. Is this the correct procedure for patching a package or not?
Thanks
Ahmed

Here is the .debdiff file

Colin: can you please take a look at it?

Henry (hua-zhang) wrote :

From https://bugs.launchpad.net/ubuntu/+source/kvm/+bug/156085/comments/6, we can see, it's truned to use /dev/bus/usb, why not turn to use this one as a fix?

I thought of using /dev/bus/usb, but the entire directory structure has changed. there is no devices file anymore. so using /dev/bus/usb will require us to change the source code of lsusb quite alot, which I thought should be discussed with upstream first. At the moment I am working on the changes when I finish them I will let upstream have a look.

Interesting, /proc/bus/usb on my Ubuntu 8.04 workstation is an empty
directory eventho' I have several USB devices connected...

On Mon, 2008-06-30 at 03:33 +0000, Henry wrote:
> From
> https://bugs.launchpad.net/ubuntu/+source/kvm/+bug/156085/comments/6, we
> can see, it's truned to use /dev/bus/usb, why not turn to use this one
> as a fix?
>

Oliver Grawert (ogra) wrote :

you likely would want /sys/bus/usb instaed ...

Colin Watson (cjwatson) wrote :

I don't think I'm happy about just removing the -t option, so I'd rather not apply this patch. There should be time in the intrepid cycle to fix it properly, shouldn't there?

If you first mount usbfs e.g. with the following command lsusb -t works fine.

sudo mount -t usbfs none /proc/bus/usb

Oliver Grawert (ogra) wrote :

please try to use sysfs for a proper fix rather than reintroducing the obsolete usbfs, i would love to work on it but am very short on time for intrepid to take extra actions atm. if someone wants to produce a proper patch i'd be willing to review and merge it though.

I might be able to produce a prober patch, but I'm still new and don't know
my way around, and I have no working linux machine at the moment. when I get
back next week I will try to help the best way I can.

On 7/24/08, Oliver Grawert <email address hidden> wrote:
>
> please try to use sysfs for a proper fix rather than reintroducing the
> obsolete usbfs, i would love to work on it but am very short on time for
> intrepid to take extra actions atm. if someone wants to produce a proper
> patch i'd be willing to review and merge it though.
>
> --
> lsusb : Fix or remove -t option
> https://bugs.launchpad.net/bugs/159189
> You received this bug notification because you are a direct subscriber
> of the bug.
>
> Status in "usbutils" source package in Ubuntu: Confirmed
>
> Bug description:
> In Gutsy, the /proc/bus/usb tree has been removed (for seemingly good
> reason, see
> https://bugs.launchpad.net/ubuntu/+source/kvm/+bug/156085/comments/6), but
> the lsusb command doesn't work quite right without access to the file
> /proc/bus/usb/devices.
>
> In particular the "lsusb -t" command gives:
>
> cannot open /proc/bus/usb/devices, No such file or directory
>
> Since (according to the above comment) /proc/bus/usb is broken, lsusb
> should have the -t option fixed or removed.
>

Changed in usbutils:
assignee: nobody → ahmedelhassairi
status: Confirmed → In Progress

Attached is a patch that uses the sysfs structure I haven't throughly tested as I don't have a usb hub to connect directly to my laptop.
Please take a look and let me know of any thing is required from me.

Changed in usbutils:
assignee: ahmedelhassairi → nobody
status: In Progress → Confirmed
Colin Watson (cjwatson) wrote :

Please try to make sure to follow the coding style of the surrounding code. usbutils seems to be largely in the Linux kernel's style, so I had to clean up quite a few things in order to be free enough of distractions to read the actual code changes:

  * various whitespace changes, e.g. consistent use of tabs for indentation
  * write comments as C89-style /* ... */ rather than C++/C99-style //...
  * consistent brace style

I reverted your le16_to_cpu changes, which seemed quite unnecessary.

Your formatting is, to say the least, extremely misleading. updateusblist has code that looks like this:

        if (!(bus = malloc(sizeof(struct usbbusnode))))
                lprintf(0, "Out of memory\n");
                bus->busnum = busnum;
...

This looks just like you forgot to put a brace after the if, but actually it seems to be intentional! Please be disciplined about indentation levels to avoid confusion; good editors can often help with this.

I factored out a bit of duplicate code near the end of findtree.

Don't redeclare file_select locally in treedump.

You misspelled "struct dirent" as "struct direct". This produced a compiler warning:

  ../lsusb.c:2777: warning: passing argument 3 of ‘scandir’ from incompatible pointer type

The recursion case for level in findtree doesn't work right; you need to increment it in the recursive call to findtree, not just before exiting the function (which achieves nothing since it's passed by value).

The condition for path construction in findtree needs to be level >= 1, not level >= 2. (I noticed this by comparing lsusb output before and after this change.)

Other than that, this seems to work well, thanks, and I've uploaded this. I've attached the final debdiff here, and I suggest you read over it for future reference.

Launchpad Janitor (janitor) wrote :

This bug was fixed in the package usbutils - 0.73-8ubuntu2

---------------
usbutils (0.73-8ubuntu2) intrepid; urgency=low

  * Apply patch from Ahmed Elhasairi <email address hidden>, somewhat
    modified by me, to fix 'lsusb -t' (LP: #159189):
    - Remove dependency on usbfs.
    - Add support for sysfs.

 -- Colin Watson <email address hidden> Tue, 02 Sep 2008 18:20:06 +0100

Changed in usbutils:
status: Confirmed → Fix Released

The usbfs mount point /proc/bus/usb is deprecated.
The -t option of lsusb (from sys-apps/usbutils package) relies on /proc/bus/usb/devices.

Ubuntu guys have developed a patch to make -t work even without usbfs.
The patch is pretty new, and has been just released:
https://bugs.launchpad.net/ubuntu/+source/usbutils/+bug/159189

Maybe Gentoo people could benefit from such patch, so I'm opening this bug here (and also because if more people revise/test such patch, better for everyone). Of course, the best thing is to have such patch approved and applied upstream.

Thanks for the suggestion, assigning to maintainers.

Ricky Campbell (cyberdork33) wrote :

Confirming fix in usbutils_0.73-8ubuntu2

Changed in usbutils:
status: Unknown → New
Changed in usbutils:
status: Unknown → Confirmed
Bremm (bremm) wrote :

$ lsusb -t
2-6:1.2: No such file or directory
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/10p, 12M
    |__ Port 2: Dev 2, If 0, Class=HID, Driver=usbhid, 1.5M
    |__ Port 9: Dev 26, If 0, Class=HID, Driver=usbhid, 1.5M
    |__ Port 10: Dev 25, If 0, Class=HID, Driver=usbhid, 1.5M
    |__ Port 10: Dev 25, If 1, Class=HID, Driver=usbhid, 1.5M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/10p, 480M

$ dpkg-query -W usbutils
usbutils 0.82-0ubuntu1

Reproduced with 9.10

3-1:1.2: No such file or directory
3-1:1.3: No such file or directory
3-2:1.0: No such file or directory
/: Bus 07.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M

Werner van Staden (venzen) wrote :

$ lsusb -t

Works for me since 10.04

Changed in usbutils (Gentoo Linux):
importance: Unknown → Low
Changed in usbutils (Debian):
status: New → Fix Released

latest version uses sysfs

Changed in usbutils (Gentoo Linux):
status: Confirmed → Fix Released
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.