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

Re: USB Memory key



Alex Tang wrote:
Hi folks.

I've got a working kickstart installation, however in the %post section, i would like to detect, mount, and write to a USB memory key.

However, I can't seem to detect the memory key properly. Does the standard anaconda kernel support USB? Is there something else I need to do?

Thanks

...alex...

In the USA we have Labor Day and many stores have Labor Day sales. I went and purchased an USB Thumb Drive and 9-in-1 Flash Media Reader/Writer. This was an interesting question so I had to answer it for myself. Hopefully, it will answer your questions too. More importantly, it also gave me a reason to finally buy these contraptions. ;-)


If you can find a device that is USB 2.0 and compatible with USB 1.1 and also complying with USB Storage Class specification version 1.0, then the device should work with Linux. The Memorex TravelDrive had this stated on the back of the blister pack. The packaging also said it would work with Linux 2.4.x and above. The PPA Internaltion http://www.ppa-usa.com/product_pages/cardreaders/2285.htm Media Reader did not mention Linux but it had all the same specs as the Memorex drive. Both drives correctly worked with a working FC2 machine as well as with Anaconda during install. Oh! I do not work or represent nor have I received any money for research from these companies! They were just the best value for the specifications above.

The difference between these two USB devices as per the salesperson is that the USB thumbdrive can be booted from by most modern motherboards. The USB thumbdrive is also supposed to be faster device. So says he...I don't know.

So far I can answer that the FC2 Anaconda kernel has USB support. At the Fedora Boot: prompt I hit enter. After I hit enter the kernel boots. Finally I briefly see the message "loading usb-storage driver" that is displayed by the Anaconda loader. After this I see the media test screen--"CD Found...To begin testing the CD media..." I hit enter and wait for the "Welcome" screen. At that point you can use the <Alt><Ctrl><F2> keys to access a bash prompt. The bash shell let me poke around.

I have already seen usb-storage drive message now I was curios what dmesg said. Here's the output:

<snip>
usbcore: registered new driver hiddev
usbcore: registered new driver hid
drivers/usb/input/hid-core.c: v2.0:USB HID core driver
<snip>
SCSI subsystem initialized
ohci_hcd: 2004 Feb 02 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI)
ohci_hcd: block sizes: ed 64 td 64
ohci_hcd 0000:00:02.2: OHCI Host Controller
ohci_hcd 0000:00:02.2: irq 10, pci mem e0831000
ohci_hcd 0000:00:02.2: new USB bus registered, assigned bus number 1
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 3 ports detected
ohci_hcd 0000:00:02.3: OHCI Host Controller
ohci_hcd 0000:00:02.3: irq 5, pci mem e0833000
ohci_hcd 0000:00:02.3: new USB bus registered, assigned bus number 2
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 3 ports detected
usb 1-1: new full speed USB device using address 2
usb 2-1: new full speed USB device using address 2
Initializing USB Mass Storage driver...
scsi0 : SCSI emulation for USB Mass Storage devices
  Vendor: Generic   Model: USB Storage-SMC   Rev: I03A
  Type:   Direct-Access                      ANSI SCSI revision: 02
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
  Vendor: Generic   Model: USB Storage-CFC   Rev: I03A
  Type:   Direct-Access                      ANSI SCSI revision: 02
SCSI device sdb: 250368 512-byte hdwr sectors (128 MB)
sdb: assuming Write Enabled
sdb: assuming drive cache: write through
 sdb: sdb1
Attached scsi removable disk sdb at scsi0, channel 0, id 0, lun 1
  Vendor: Generic   Model: USB Storage-MMC   Rev: I03A
  Type:   Direct-Access                      ANSI SCSI revision: 02
Attached scsi removable disk sdc at scsi0, channel 0, id 0, lun 2
  Vendor: Generic   Model: USB Storage-MSC   Rev: I03A
  Type:   Direct-Access                      ANSI SCSI revision: 02
Attached scsi removable disk sdd at scsi0, channel 0, id 0, lun 3
USB Mass Storage device found at 2
scsi1 : SCSI emulation for USB Mass Storage devices
  Vendor:           Model: Memorex TD 2B     Rev: PMAP
  Type:   Direct-Access                      ANSI SCSI revision: 02
SCSI device sde: 487424 512-byte hdwr sectors (250 MB)
sde: assuming Write Enabled
sde: assuming drive cache: write through
 sde: sde1
Attached scsi removable disk sde at scsi1, channel 0, id 0, lun 0
USB Mass Storage device found at 2
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
<snip>

Note that I attached both the 9-in-1 reader and the thumb drive to the system. There's your first obstacle to detecting the correct drive. I don't know how the kernel orders the device names for these storage devices. I don't recall the order I had these installed earlier in the day. Hence, I don't know if switching USB port that the devices were plugged into would make a difference. It appears that the "Initializing USB Mass Storage driver..." message is the key. Once that is displayed the kernel starts assigning device names. The Memorex drive received sde:sde1 while the 9-in-1 reader received four scsi device names, sda:sda1 through sdd:sdd1. If you have other scsi devices on the system, then this could complicate your detection code.

As an aside, this ordering of device names would affect your kickstart stanza. If you only had one usb-storage device on your system, then you would use

ks=hd:sda1/ks.cfg

to locate the kickstart file. However, in the example above with two readers on the system and five device names, I would use either

ks=hd:sdb1/ks.cfg

for the CompactFlash card or

ks=hd:sde1/ks.cfg

for the thumbdrive.

If just a thumbdrive is attached to an Anaconda kernel then you will see this in the dmesg output.

<snip>
Initializing USB Mass Storage driver...
scsi0 : SCSI emulation for USB Mass Storage devices
  Vendor:           Model: Memorex TD 2B     Rev: PMAP
  Type:   Direct-Access                      ANSI SCSI revision: 02
SCSI device sda: 487424 512-byte hdwr sectors (250 MB)
sda: assuming Write Enabled
sda: assuming drive cache: write through
 sda: sda1
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
USB Mass Storage device found at 2
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
<snip>

The thumbdrive now has a device name of sda:sda1.

If I use fdisk -l /dev/sda then I will see this output.

Disk /dev/sda: 249 MB, 249561088 bytes
16 heads, 32 sectors/track, 952 cylinders
Units = cylinders of 512 * 512 = 262144 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         952      243696    6  FAT16

(Note that when the 9-in-1 reader was attached, the fdisk output looked like this for a 128MB CompactFlash card.

fdisk -l /dev/sdb

Disk /dev/sdb: 128 MB, 128188416 bytes
8 heads, 32 sectors/track, 978 cylinders
Units = cylinders of 256 * 512 = 131072 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1         978      125168    6  FAT16 )

It appears that FAT16 is used on these devices for compatibility purposes. A CompactFlash card in the 9-in-1 reader/writer also shows as FAT16. I bet Microsoft saw a cash cow here and wanted to license FAT http://www.eweek.com/article2/0,1759,1569534,00.asp. Anyhow, the Anaconda kernel also recognizes FAT16. So you can mount the drive as

mkdir /tmp/td
mount /dev/sda1 /tmp/td

or

mkdir /tmp/td
mount -t vfat /dev/sda1 /tmp/td

I selected /tmp because Anaconda mounts other devices used in the install process under /tmp. It appears that /mnt is saved for the live hard drives that you will be updating or installing the distribution on.

Depending on where you create your mount point, in my case it is /tmp/td, then writing to the thumbdrive is as simple as

cp mylogfile.log /tmp/td

In bash you could use

dmesg > /tmp/td/dmesg.txt

In any scripting language you could just open a file on the mount point. In Python it may be something like this

   tdoutput = open(/tmp/td/tdoutput, 'w')
   tdoutput.write(...)
   tdoutput.close()

Your most pressing problem is selecting the correct scsi device name should multiple scsi devices be configured on your target install system. This could include cameras, thumbdrives, media readers, scanners, and gasp a parallel port zip drive. Let's not forget scsi hard drives or cd-rom drives. If you know your only scsi device is the thumbdrive, then /dev/sda1 is all you need.

If you are trying to make the Anaconda Kick Start file work on multiple machines, then one file may be helpful. This is the /tmp/scsidisks file. With both the 9-in-1 reader and the Memorex TravelDrive attached to the FC2 install target machine, the contents of the file looked like this

sda	usb-storage
sdb	usb-storage
sdc	usb-storage
sdd	usb-storage
sde	usb-storage

With just the Memorex TravelDrive, the file looked like this

sda usb-storage

If you are not doing something twisted like I did with two usb-storage devices attached to the PC, then you could just look for the usb-storage line. I checked that sed, awk, cut, bash, and python are available to you in the Anaconda runtime environment on FC2. A tab separates the device name and usb-storage literal string. I do not know how portable this approach would be from one Red Hat distro/version to the next. Other people may be able to provide you with another approach. With that said, "I leave the thrill and joy of discovering the rest of the solution to you."

Greg Morgan



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