USB Memory key
Greg Morgan
drkludge at cox.net
Wed Sep 8 04:24:23 UTC 2004
Alex,
I am glad to have helped. I am forwarding the email to the
kickstart-list because that may be the more appropriate place for this
kind-of question/answer than the anaconda-devel-list.
Greg
Alex Tang wrote:
> Wow Greg.
>
> This is great! Thanks for taking the time to do this, i'm sure it will
> be invaluable information (I haven't had time to process or check on all
> of this info, but i will today or tomorrow). I just wanted to say
> thanks very much for the volumes of information, and hopefully i'll have
> good information to respond with later. :)
>
> Thanks again.
>
> ...alex...
>
> Greg Morgan wrote:
>
>> 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
More information about the Kickstart-list
mailing list