newbie doubt on USB device/peripheral

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

I'm new to USB device driver development. I've mostly done a few LKMs
(and an ethernet driver) on 2.6 kernels. And this too was sometime back
(around 1.5 yrs!)...so my knowledge on a few things might be rusty! :)

I'm working on an embedded board and would like to validate a few
assumptions here before proceeding to start work on them.

The board is a Compulab CM-X270L (PXA270). This board has USB master as
well as a slave port. It's currently running a patched 2.6.16 kernel
(the patch is from Compulab). It runs Compulab's Debian distribution
 - "Debian GNU/Linux 3.1".

We need to use the board as a USB slave to a machine which has a USB
master (root hub). This machine runs a proprietary OS and we do not
have access to it's source code and/or any other means to access it's
internals.

This proprietary OS supports the following USB classes:

* CDC-ACM: Full ACM specs

* CDC-ECM: The USB host side diver on the OS, only works with one
  particular USB-ethernet dongle (say chip-X). So I'm guessing the OS
  does not support the full ECM specs.

We need to use the board as a slave and test it's interoperability with
the host for the above mentioned USB classes.

I plan to do the following:

1) CDC-ACM: Compile the USB gadget serial driver as a LKM for the board.
   If the module loads successfully, connecting the slave port to the
   host should make it (the slave), enumerate successfully as an ACM
   device.

2) CDC-ECM: This one's a bit tricky! I understand that the ethernet is
   implemented in drivers/usb/gadget/ether.c. But, since the host side
   driver is written to work with a particular chipset, will it work
   "AS IS" with the ethernet gadget driver?
   Also, in case it doesn't work, can I tweak the gadget driver to make
   it work/enumerate correctly with the host? Basically I'll be "faking"
   the chip in s/w.

Also, how can I verify that the kernel has recognized the USB slave device?
During kernel configuration, we can choose gadget support as a module.
Is there a separate module that needs to be present for gadget support or
will individual gadget drivers themselves provide this functionality?

The following link states that the USB device functionality is not supported
in 2.6.16 kernels:

http://www.compulab.co.il/mediawiki/index.php5?title=Linux_Kernel_for_CM-X270#USB_device

But if I get the patches mentioned in the link and compile them as modules,
then can I enable the USB device functionality?

Another pain-point is the fact that I can't re-flash the kernel on the
Compulab board with a newer version (I think 2.6.24 has support for USB
device). This is because the board directly boots up the kernel and does
not stop at the prompt. I've followed the procedure mentioned here:

http://www.compulab.co.il/mediawiki/index.php5?title=Getting_started_with_Linux_on_CM-X270#Image_installation

but this doesn't seem to work, the bootloader (ARMMon) still boots the kernel
directly! :( Any clues as to how to circumvent this problem?

Any suggestions are welcome. Thanks for your time.

Regards,
-mandeep
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux