Linux - HardwareThis forum is for Hardware issues.
Having trouble installing a piece of hardware? Want to know if that peripheral is compatible with Linux?
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I have Linux running on an embedded system. It is running kernel 2.4.21-1. I have plugged in two different pen/thumb/jump drives and neither one is recognized when plugged in before bootup or after bootup. Is there a way to tell if USB is installed/enabled? If it's not, can someone give me a step by step on how to enable it. Any instructions must be command line because display is done via the serial port. Thanks for any help!
Check the output of dmesg and see if there is any relevant output when you plug a USB device in. lsmod is a good idea also but I don't know the names of the 2.4 USB modules so I can't tell you what to look for.
I tried 'insmod usbcore' but this did not change my situation. It did add this to the end of 'dmesg'
Quote:
usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
Then I tried 'insmod usb-storage' and it add this to 'dmesg'
Quote:
Initializing USB Mass Storage driver...
usb.c: registered new driver usb-storage
USB Mass Storage support registered.
Then I tried 'insmod usb-uhci' and it added
Quote:
usb-uhci.c: $Revision: 1.275 $ time 23:30:41 Aug 26 2003
usb-uhci.c: High bandwidth mode enabled
usb-uhci.c: USB UHCI at I/O 0xffe0, IRQ 31
usb-uhci.c: Detected 2 ports
usb.c: new USB bus registered, assigned bus number 1
usb.c: kmalloc IF c6e2d4c0, numif 1
usb.c: new device strings: Mfr=0, Product=2, SerialNumber=1
usb.c: USB device number 1 default language ID 0x0
Product: USB UHCI Root Hub
SerialNumber: ffe0
hub.c: USB hub found
hub.c: 2 ports detected
hub.c: standalone hub
hub.c: ganged power switching
hub.c: global over-current protection
hub.c: Port indicators are not supported
hub.c: power on to power good time: 2ms
hub.c: hub controller current requirement: 0mA
hub.c: port removable status: RR
hub.c: local power source is good
hub.c: no over-current condition exists
hub.c: enabling power on all ports
usb.c: hub driver claimed interface c6e2d4c0
usb.c: kusbd: /sbin/hotplug add 1
usb.c: kusbd policy returned 0xfffffffe
usb-uhci.c: v1.275:USB Universal Host Controller Interface driver
Now whenever I plug in a usb storage device (thumb/pen/jump drive) I get a command line response that says
Quote:
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000280 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000280 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000280 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000280 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000280 is zero
usb.c: unable to get device descriptor (error=-90)
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000380 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000380 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000380 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000380 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000380 is zero
usb.c: unable to get device descriptor (error=-90)
and does not return the command prompt. After pressing ctr+C to get command prompt back, 'dmesg' says
Quote:
hub.c: port 1, portstatus 100, change 0, 12 Mb/s
hub.c: port 2, portstatus 101, change 1, 12 Mb/s
hub.c: port 2 connection change
hub.c: port 2, portstatus 101, change 1, 12 Mb/s
hub.c: port 2, portstatus 101, change 0, 12 Mb/s
hub.c: port 2, portstatus 101, change 0, 12 Mb/s
hub.c: port 2, portstatus 101, change 0, 12 Mb/s
hub.c: port 2, portstatus 101, change 0, 12 Mb/s
hub.c: port 2, portstatus 103, change 0, 12 Mb/s
hub.c: new USB device 00:06.2-2, assigned address 2
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000280 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000280 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000280 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000280 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000280 is zero
usb.c: unable to get device descriptor (error=-90)
hub.c: port 2, portstatus 103, change 0, 12 Mb/s
hub.c: new USB device 00:06.2-2, assigned address 3
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000380 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000380 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000380 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000380 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000380 is zero
usb.c: unable to get device descriptor (error=-90)
hub.c: port 1, portstatus 100, change 0, 12 Mb/s
hub.c: port 2, portstatus 101, change 0, 12 Mb/s
There are two different USB host controllers for USB 1.0/1.1, and one for USB 2.0.
Rather than explain it myself, let me post from my 2.6.17 kernel .config file:
Code:
OHCI HCD support (USB_OHCI_HCD)
The Open Host Controller Interface (OHCI) is a standard for accessing
USB 1.1 host controller hardware. It does more in hardware than Intel's
UHCI specification. If your USB host controller follows the OHCI spec,
say Y. On most non-x86 systems, and on x86 hardware that's not using a
USB controller from Intel or VIA, this is appropriate. If your host
controller doesn't use PCI, this is probably appropriate. For a PCI
based system where you're not sure, the "lspci -v" entry will list the
right "prog-if" for your USB controller(s): EHCI, OHCI, or UHCI.
To compile this driver as a module, choose M here: the
module will be called ohci-hcd.
UHCI HCD (most Intel and VIA) support (USB_UHCI_HCD)
The Universal Host Controller Interface is a standard by Intel for
accessing the USB hardware in the PC (which is also called the USB
host controller). If your USB host controller conforms to this
standard, you may want to say Y, but see below. All recent boards
with Intel PCI chipsets (like intel 430TX, 440FX, 440LX, 440BX,
i810, i820) conform to this standard. Also all VIA PCI chipsets
(like VIA VP2, VP3, MVP3, Apollo Pro, Apollo Pro II or Apollo Pro
133). If unsure, say Y.
To compile this driver as a module, choose M here: the
module will be called uhci-hcd.
EHCI HCD (USB 2.0) support (USB_EHCI_HCD)
The Enhanced Host Controller Interface (EHCI) is standard for USB 2.0
"high speed" (480 Mbit/sec, 60 Mbyte/sec) host controller hardware.
If your USB host controller supports USB 2.0, you will likely want to
configure this Host Controller Driver. At the time of this writing,
the primary implementation of EHCI is a chip from NEC, widely available
in add-on PCI cards, but implementations are in the works from other
vendors including Intel and Philips. Motherboard support is appearing.
EHCI controllers are packaged with "companion" host controllers (OHCI
or UHCI) to handle USB 1.1 devices connected to root hub ports. Ports
will connect to EHCI if the device is high speed, otherwise they
connect to a companion controller. If you configure EHCI, you should
probably configure the OHCI (for NEC and some other vendors) USB Host
Controller Driver or UHCI (for Via motherboards) Host Controller
Driver too.
You may want to read <file:Documentation/usb/ehci.txt>.
So on this computer:
Code:
root@silas:~# lspci -v
00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81) (prog-if 00 [UHCI])
Subsystem: ASUSTeK Computer Inc. A7V600/K8V-X motherboard
Flags: bus master, medium devsel, latency 64, IRQ 19
I/O ports at b400 [size=32]
Capabilities: [80] Power Management version 2
00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81) (prog-if 00 [UHCI])
Subsystem: ASUSTeK Computer Inc. A7V600/K8V-X motherboard
Flags: bus master, medium devsel, latency 64, IRQ 19
I/O ports at b800 [size=32]
Capabilities: [80] Power Management version 2
00:10.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81) (prog-if 00 [UHCI])
Subsystem: ASUSTeK Computer Inc. A7V600/K8V-X motherboard
Flags: bus master, medium devsel, latency 64, IRQ 19
I/O ports at c000 [size=32]
Capabilities: [80] Power Management version 2
00:10.3 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81) (prog-if 00 [UHCI])
Subsystem: ASUSTeK Computer Inc. A7V600/K8V-X motherboard
Flags: bus master, medium devsel, latency 64, IRQ 19
I/O ports at c400 [size=32]
Capabilities: [80] Power Management version 2
00:10.4 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 86) (prog-if 20 [EHCI])
Subsystem: ASUSTeK Computer Inc. A7V600/K8V-X motherboard
Flags: bus master, medium devsel, latency 64, IRQ 19
Memory at fdf00000 (32-bit, non-prefetchable) [size=256]
Capabilities: [80] Power Management version 2
The system is a MIP405 PowerPC which is a computer that is contained on a 4in. x 4in. board. The board is manufactured by MPL ( www.mpl.ch ). The user manual says that there are 2 USB 1.0 ports, does knowing this change anything?
Interesting gadget. I read "Also a Linux distribution is available for the MIP405."
Are you running that? If so I'd expect it to be configured right. Do they offer support?
Issue as root "lspci -v" and post it all in here, please. Another thing I see is
"Southbridge PIIX4E 82371 EB" -- which is Intel. If so, you need "USB_UHCI_HCD".
Plug in the device and then issue "dmesg | tail" and you should see it. Some output such as this:
I am running the version of Linux that came with the board, so I imagine that is the distribution you are speaking of. It appears that they don't have it configure correctly.
I tried looking at the /usr/src/linux-2.4.21-1-ppc/.config file, and this line is commented out: "# CONFIG_USB_EHCI_HCD is not set"
The mpl support told me to try "modprobe usb-ohci", but the module could not be found, and I discovered it is commented out in the .config file as well. I'm stilling waiting to hear back from them on what they suggest next.
Here are the commands you wanted:
root@localhost:/# lspci -v
00:06.0 Class 0601: 8086:7110 (rev 02)
Flags: bus master, medium devsel, latency 0, IRQ 28
00:06.1 Class 0101: 8086:7111 (rev 01) (prog-if 80 [Master])
Flags: bus master, medium devsel, latency 0, IRQ 28
I/O ports at 1000 [size=16]
00:06.2 Class 0c03: 8086:7112 (rev 01)
Flags: bus master, medium devsel, latency 128, IRQ 31
I/O ports at ffe0 [size=32]
00:06.3 Class 0680: 8086:7113 (rev 02)
Flags: medium devsel, IRQ 28
root@localhost:/# dmesg | tail
hub.c: port 2, portstatus 103, change 0, 12 Mb/s
hub.c: new USB device 00:06.2-2, assigned address 5
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000580 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000580 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000580 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000580 is zero
usb-uhci.c: uhci_submit_urb: pipesize for pipe 80000580 is zero
usb.c: unable to get device descriptor (error=-90)
hub.c: port 1, portstatus 100, change 0, 12 Mb/s
hub.c: port 2, portstatus 101, change 0, 12 Mb/s
EHCI is for USB 2.0, and the docs state the board has USB 1.1, so it's not needed.
Strange that "lspci -v" gives no more data...
What is the output of "cat /usr/src/linux-2.4.21-1-ppc/.config | grep -i usb" ?
This is beyond my knowledge, but if it were me, I'd try to compile a new kernel.
And I wouldn't bother with a 2.4 kernel -- get the latest stable 2.6 kernel. You didn't include your location in your UserCP, so I gave you an US ftp mirror.
USB Support: At the moment only the UHCI host controller is supported (PIP405, MIP405, MPC5200); define CONFIG_USB_UHCI to enable it. define CONFIG_USB_KEYBOARD to enable the USB Keyboard and define CONFIG_USB_STORAGE to enable the USB storage devices.
Please keep us updated, especially with what your tech support says.
root@localhost:/# cat /usr/src/linux-2.4.21-1-ppc/.config | grep -i usb
# CONFIG_INPUT_IFORCE_USB is not set
# USB support
CONFIG_USB=m
CONFIG_USB_DEBUG=y
CONFIG_USB_DEVICEFS=y
CONFIG_USB_BANDWIDTH=y
# CONFIG_USB_EHCI_HCD is not set
CONFIG_USB_UHCI=m
# CONFIG_USB_UHCI_ALT is not set
# CONFIG_USB_OHCI is not set
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_MIDI is not set
CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_DEBUG is not set
CONFIG_USB_STORAGE_DATAFAB=y
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_ISD200=y
CONFIG_USB_STORAGE_DPCM=y
CONFIG_USB_STORAGE_HP8200e=y
CONFIG_USB_STORAGE_SDDR09=y
CONFIG_USB_STORAGE_SDDR55=y
CONFIG_USB_STORAGE_JUMPSHOT=y
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
CONFIG_USB_HID=m
CONFIG_USB_HIDINPUT=y
CONFIG_USB_HIDDEV=y
CONFIG_USB_KBD=m
CONFIG_USB_MOUSE=m
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
CONFIG_USB_DC2XX=m
CONFIG_USB_MDC800=m
CONFIG_USB_SCANNER=m
CONFIG_USB_MICROTEK=m
CONFIG_USB_HPUSBSCSI=m
CONFIG_USB_PEGASUS=m
CONFIG_USB_RTL8150=m
CONFIG_USB_KAWETH=m
CONFIG_USB_CATC=m
CONFIG_USB_CDCETHER=m
CONFIG_USB_USBNET=m
# CONFIG_USB_USS720 is not set
# USB Serial Converter support
CONFIG_USB_SERIAL=m
# CONFIG_USB_SERIAL_DEBUG is not set
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_WHITEHEAT=m
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
CONFIG_USB_SERIAL_EMPEG=m
CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_VISOR=m
CONFIG_USB_SERIAL_IPAQ=m
CONFIG_USB_SERIAL_IR=m
CONFIG_USB_SERIAL_EDGEPORT=m
CONFIG_USB_SERIAL_EDGEPORT_TI=m
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KEYSPAN=m
CONFIG_USB_SERIAL_KEYSPAN_USA28=y
CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
CONFIG_USB_SERIAL_KEYSPAN_USA19=y
CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
CONFIG_USB_SERIAL_MCT_U232=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_PL2303=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_XIRCOM=m
CONFIG_USB_SERIAL_OMNINET=m
CONFIG_USB_RIO500=m
CONFIG_USB_AUERSWALD=m
# CONFIG_USB_TIGL is not set
# CONFIG_USB_BRLVGER is not set
CONFIG_USB_LCD=m
CONFIG_BLUEZ_HCIUSB=m
CONFIG_BLUEZ_USB_SCO=y
CONFIG_BLUEZ_USB_ZERO_PACKET=y
I've tried to compile a new kernel with the modules I want in it, but I did not really know what I was doing. Appearantly the steps are similar but not excatly the same as a regular box. To be honest, I've only been using Linux for a few months so all of this is a little bit over my head. The only reason I am working on this is because nobody else that I am working with has any experience with Linux. This website ( http://www.mpl.ch/t2722.html ) gives information on compiling a kernel for the MIP405, but I'm still not quite sure how to do it. I think I set the .config file how I want then run "make dep" then "make clean" then "make uImage" but I'm not sure after that. When I originally installed the OS, the file system went on /dev/hda5 and a copy of the kernel image went into the the /boot directory. I then had to do something to load the kernel onto /dev/hda1 using a command like "dd if=/boot/(don't remember the file name) of=/dev/hda1". I can't find the manual for doing this online and the paper version is back in the office. If you could help me get a step by step, I would appreciate it.
I also don't know how to download a newer version of the kernel because I am not use to not having a gui to work from. I could download the kernel and burn it to a cd and hook a cd drive up to the board or do ssh to a machine that has gui and do "scp", but I'm sure there is a way to do it via the command line since I have internet on the MIP405.
I can ssh into the board from my home, so if you respond tonight, I will try any of your suggestions
I briefly read the kernel instructions in your link, and don't want to comment too much. No experience with PPC, and I'd not want to cause you to hose that system.
If you have the program wget, an easy way to get the kernel is to issue "wget ftp://ftp.us.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.bz2" or substitute the path to the kernel you desire. Previously I was thinking of using a 2.6 kernel, rather than a 2.4. You build them quite differently, and IMO Kwan Lowe has an excellent Kernel Rebuild Guide.
If you're willing to take some risk, perhaps following that guide and adapting from an i386 architecture to PPC would work. Meaning, where Kwan has i386 you need to think ppc.
I believe the dd command would be "dd if=/boot/<kernel-image-name> of=/dev/hda1" if that's all there was. You can "ls -lh /boot/" after you install the kernel to see it's name. Never used uImage, which probably has to do with that Universal Bootloader .
Tech support told me that USB support is unstable in this kernel and I should compile a new one using kernel 2.4.31 and the patch from ftp://ftp.mpl.ch/pub/temp/linux-2.4....p405.patch.bz2 . I downloaded the kernel and patch onto another linux machine because wget was unrecognized by the MIP405. I transfered the files over ssh to the board and untared the kernel to /usr/src then used "cp linux-2.4.31-pip405mip405.patch /usr/src/linux/.config". Then I issued the command "make dep uImage modules" as the instructions for compiling stated. After answering an hour worth of questions (which I didn't completely know the answers to), the kernel started to compile.
I've gotten a few errors, but I think I've figured them out. The instructions for compiling say to use a cross-compiler. Is that so you can compile on another computer that is faster? The processor on the MIP405 is only 266MHz I think. How do you get/make a cross-compiler?
I need to read your post more carefully. But in order to keep from having to answer so many questions, you could have first copied your present kernel's .config file to the new kernel source directory, like this:
so that your sources start our with the old .config file.
Next you would run "make oldconfig" and answer any questions that came up. You can hit the ? at each one to see what it's about, and if you don't know, it's usually okay to enter for the default. If you're not comfortable with that, you could always say N to new questions.
Then you would run "make menuconfig" and just change the USB or whatever else support said to change. Then you could patch and continue with "make mrproper" or whatever their next step was.
If you got through that compile okay, and have both kernels to boot, then just go ahead and see how it works. But if you have any problems, it's safe enough to start over.
If you do start over, there are some instructions you'll want before you do...
Last edited by Bruce Hill; 06-23-2006 at 01:53 AM.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.