Fred Mobach
writes:
Theodore Kilgore, a long time Linux user and Linux Today reader,
has sent me a funny story. Funny, because the manufacturer
delivered only Windows support to this device which didn’t work at
all. And he got this device working under Linux without so much
problems. And that his son is impressed with Linux and what his
father can do with that. Have fun, Fred
Making the KB Gear Jamp3 Portable MP3 Player Work under Linux I often read comments on Linux websites and discussion groups to the effect that there are too many pieces of hardware out there which are unsupported under Linux. However, it can happen that a device which is supposed to work under Windows for some reason does not, but it is nevertheless possible to use the device under Linux. As an actual case history, I give some recent experiences with a KB Gear Jamp3, a portable mp3 player which connects to the computer via USB for downloading files. The device came with a brochure telling how to put batteries in it, how to plug it into a USB port, how to install the Windows software on the accompanying CD, and it also gave some basic specifications, for example that the device will store 16 megabytes of data, upgradable to 32 megabytes with an expansion card which can be ordered. I obtained this KB Gear Jamp3 from someone who had bought it for $49.95 from the local WalMart and could not make it work. It seems that the supporting software provided on the accompanying CD could not be made to function. Any attempt to copy files onto the Jamp3 device simply resulted in a lockup of the Windows machine, and any attempt to exit from the control program resulted in a forcible reboot. My 11-year-old son very much wanted it to work, and thus I decided that it would be interesting, educational, and character-building to try to set the device up under Linux. I knew nothing about the device other than what was in the glossy brochure and had no previous experience with USB devices or mp3 players, under Linux or any other operating system. I am not a computer professional by trade, and I do not consider myself a programmer. First, I realized that I would need USB kernel support for a USB device. Therefore, I recompiled the kernel, adding USB support. The fact that I had recently upgraded to a 2.4 kernel helped a lot at this stage. Naturally, I also read whatever seemed relevant in /usr/src/linux/Documentation/usb. It was recommended there to inspect the file /proc/bus/usb/devices. After I rebooted with my new kernel, with the mp3 player attached and turned on, I got the following output from "cat /proc/bus/usb/devices": T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI Root Hub S: SerialNumber=d800 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=084e ProdID=0004 Rev= 0.50 S: Manufacturer=STMicroelectronics S: Product=JamP3 Portable Player S: SerialNumber=0123456789ABCDEF C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI Root Hub S: SerialNumber=d400 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms This seemed promising but quite mysterious. The output was of a format explained in /usr/src/linux/Documentation/usb/proc_usb_info.txt, but a lot of the entries did not yet make sense. Especially, it seemed that one would need to decipher the line I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage I followed the leads in /usr/src/linux/Documentation/usb-help.txt, and I also did some Google searches for linux usb portable mp3 player jamp3, which turned up absolutely nothing, linux usb portable mp3 player, which turned up a number of hits, linux usb driver, and things like that. After following some false leads, I found a document called "Programming Guide for Linux USB Device Drivers," authored by Detlef Fliegl, <deti@fliegl.de>, which can be found at <http://usb.cs.tum/edu/usbdoc> I also found a list of USB ids, compiled by Vojtech Pavlik <vojtech@suse.cz>. The KB Gear Jamp3 was duly listed as 084e:0004 (no surprise at this point). More importantly, this document also contains a list of "known device classes, subclasses and protocols." There, I found that Class 08 is "Mass Storage," and Subclass 06 is "SCSI," and Protocol 50 is "Bulk (Zip)." Someone more experienced than myself would no doubt have known exactly what to do at this point. After some trial and error, I found out that I needed to install kernel support for SCSI, SCSI disk, and USB mass storage. After this, on rebooting with the new kernel and my Jamp3 plugged into the USB port and turned on, I got some bootup messages about the device, and "dmesg" gave more details, describing the device as "Transparent SCSI." I also got the following response to "cat /proc/scsi/scsi": Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: KBGear Model: JamP3 Player Rev: 0.93 Type: Direct-Access ANSI SCSI revision: 02 And "cat /proc/usb/drivers" gave: usbdevfs hub usb-storage It seemed at this point that the machine was happy indeed, but the Jamp3 would not yet sing and I still did not know what to do... I continued my internet searching, and I found two lists of USB devices known to work with Linux. One of these listed an Iomega mp3 player under "mass-storage" devices, and its driver was given as "usb-storage." The remarks said to mount the device as a vfat file system. With this hint, I tried mount -t vfat /dev/sda1 /mnt Success!!! I copied two mp3 files onto the Jamp3 player, and umounted it and disconnected it. It played them. I reconnected and remounted it and deleted one of the files and replaced it with another. No problems at all. And clearly it is possible to use the Jamp3 player, too, as a small portable storage device for any kind of files, too. Naturally, if the files are not mp3 files, they would make little sense if played. Summary: Though I was without any documentation supplied by the manufacturer, I had a device which uses industry standard protocols, in a completely standard manner. Installation of Linux support is in fact completely routine and trivial, once the user knows what to do. Doubtless, such statements are not true of all devices (the infamous winmodems and winprinters come to mind). However, it would seem that any device which uses industry standard protocols exclusively is therefore supported under Linux, even it doesn't seem to work under Windows. It makes one wonder how many other pieces of hardware are out there which fit into this interesting category. Still to be done: -- It remains to be seen what would happen if a memory add-on card were installed. The glossy brochure mentions something about "reformatting." It might be that under Linux the add-on card would be addressed as /dev/sda2, or as /dev/sdb1, or not at all. I can only speculate. -- Using modular support instead of compilation of support directly into the kernel (I was lazy and wanted a quick solution, if possible). -- That Windows program sure did look pretty and impressive. Too bad it didn't work. How prosaic it is to use a command line or the Midnight Commander to copy files back and forth to an external device. GUI is the wave of the future, and we are definitely behind the times if we don't have a GUI program for this. We may already have one, and the program just needs to be pasted together with the basic device support. I don't know. Me, I just wanted the thing to work. And my son knows how to use a CLI and the Midnight Commander, too. He was raised to respect such things and has not quite reached the rebellious teens, yet :-) Bottom line: Right now my son is pleased as punch that this thing works. He was already impressed with Linux, but now he is very impressed. And I am impressed with the efforts of those who provided the documentation which I found so useful. And I am grateful to the kernel developers who have put together the basic system, which simply does what it is supposed to do. Support for a new piece of hardware like this one is an opportunity, in a small way, to give something back. Theodore Kilgore <kilgota@banach.math.auburn.edu>