USB storage

From DD-WRT Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 15:52, 13 July 2007 (edit)
Rekoil (Talk | contribs)
(added hdparm information from wrt350n)
← Previous diff
Revision as of 06:50, 14 July 2007 (edit) (undo)
FrogMan (Talk | contribs)
m (Listing Contents)
Next diff →
Line 234: Line 234:
# list its contents # list its contents
ls -l /tmp/usb/2 ls -l /tmp/usb/2
 +
 +== If you're having trouble ==
 +If you still cannot get your USB drive to mount after following these instructions to the letter, you can try resetting the NVRAM. Do this by using the recovery utility to upload the bin/trx file meant for that purpose.
 +
 +NOTE: This has miraculously solved problems on an ASUS WL-500G Premium. Your mileage may vary, especially if you have a different router.
[[Category:English documentation]] [[Category:English documentation]]

Revision as of 06:50, 14 July 2007

Contents

Installation

Install USB Kernel modules

 ipkg install kmod-usb-uhci // this is for USB 1.1
 ipkg install kmod-usb-core
 ipkg install kmod-usb2
 ipkg install kmod-usb-storage

Manual installation and check

  • insert the modules one by one by following commands in a telnet session.
insmod /jffs/lib/modules/2.4.30/usbcore.o
insmod /jffs/lib/modules/2.4.30/ehci-hcd.o
insmod /jffs/lib/modules/2.4.30/scsi_mod.o
insmod /jffs/lib/modules/2.4.30/usb-storage.o
insmod /jffs/lib/modules/2.4.30/sd_mod.o

Check

  • See the enabling from dmesg output of a Linksys WRTSL54GS. A SanDisk Cruzer Micro 4G flash drive as recognized.
/ # dmesg
<snip>
<6>ehci_hcd 01:02.2: PCI device 1033:00e0
<6>ehci_hcd 01:02.2: irq 2, pci mem c0181000
<6>usb.c: new USB bus registered, assigned bus number 1
<6>ehci_hcd 01:02.2: USB 2.0 enabled, EHCI 1.00, driver 2003-Dec-29/2.4
<6>hub.c: USB hub found
<6>hub.c: 5 ports detected
<6>hub.c: new USB device 01:02.2-1, assigned address 2
<4>usb.c: USB device 2 (vend/prod 0x781/0x5406) is not claimed by any active driver.
<6>SCSI subsystem driver Revision: 1.00
<6>Initializing USB Mass Storage driver...
<6>usb.c: registered new driver usb-storage
<6>scsi0 : SCSI emulation for USB Mass Storage devices
<0>  Vendor: SanDisk   Model: U3 Cruzer Micro   Rev: 2.18
<0>  Type:   Direct-Access                      ANSI SCSI revision: 02
<0>  Vendor: SanDisk   Model: U3 Cruzer Micro   Rev: 2.18
<0>  Type:   CD-ROM                             ANSI SCSI revision: 02
<7>WARNING: USB Mass Storage data integrity not assured
<7>USB Mass Storage device found at 2
<6>USB Mass Storage support registered.
<0>Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
<0>SCSI device sda: 8015505 512-byte hdwr sectors (4104 MB)
<0>sda: Write Protect is off
<6>Partition check:
<6> /dev/scsi/host0/bus0/target0/lun0: p1 p2 p3
/ #

Create a startup script that loads the modules

Create a file, usb.startup in /jffs/etc/config/ directory

~ # mkdir /jffs/etc/config
~ # vi /jffs/etc/config/usb.startup

that contains this (press i once for insert mode):

#!/bin/sh
insmod /jffs/lib/modules/2.4.30/usbcore.o
insmod /jffs/lib/modules/2.4.30/ehci-hcd.o
insmod /jffs/lib/modules/2.4.30/scsi_mod.o
insmod /jffs/lib/modules/2.4.30/usb-storage.o
# remove the dash (#) from the line below if you use USB 1.1
#insmod /jffs/lib/modules/2.4.30/uhci.o
insmod /jffs/lib/modules/2.4.30/sd_mod.o

vi is ended using "ESC" and then :wq

make the script executable:

 chmod +x /jffs/etc/config/usb.startup

For DD-WRT v23 SP1 or below

add the follwing script to startup. It executes on every reboot all *.startup scripts located in /jffs/etc/config/

 console mode
 > ~ # nvram set rc_startup="
 > for I in `/bin/ls /jffs/etc/config/*.startup`
 > do
 >    sh $I &
 > done
 > "
 > ~ # nvram commit
 >
 web interface mode
 for I in `/bin/ls /jffs/etc/config/*.startup`
   do
     sh $I &
 done


This is it. Here's my dmesg from Asus WL-500gP

 dmesg
 SCSI subsystem driver Revision: 1.00
 Initializing USB Mass Storage driver...
 usb.c: registered new driver usb-storage
 USB Mass Storage support registered.
 uhci.c: USB Universal Host Controller Interface driver v1.1
 PCI: Enabling device 01:03.0 (0000 -> 0001)
 uhci.c: USB UHCI at I/O 0x100, IRQ 2
 usb.c: new USB bus registered, assigned bus number 2
 hub.c: USB hub found
 hub.c: 2 ports detected
 PCI: Enabling device 01:03.1 (0000 -> 0001)
 uhci.c: USB UHCI at I/O 0x120, IRQ 2
 usb.c: new USB bus registered, assigned bus number 3
 hub.c: USB hub found
 hub.c: 2 ports detected

kernel modules for filesystems

Now to access FAT/EXT/XFS partitions you must install

 ipkg install kmod-vfat
/mnt # ipkg install kmod-vfat
ipkg_depends: Warning: kernel mentioned in dependency but no package found in //jffs/usr/lib/ipkg/lists

Downloading http://downloads.openwrt.org/whiterussian/packages/kmod-vfat_2.4.30-brcm-5_mipsel.ipk ...
Connecting to downloads.openwrt.org[195.56.146.238]:80
kmod-vfat_2.4.30-brc 100% |********************************************| 32018    --:--:-- ETA
Done.
ipkg_depends: Warning: kernel mentioned in dependency but no package found in //jffs/usr/lib/ipkg/lists
Unpacking kmod-vfat...Done.
Configuring kmod-vfat...Done.
/mnt #

  
  Check what got installed.
/mnt # ipkg files kmod-vfat
/jffs
/jffs/lib
/jffs/lib/modules
/jffs/lib/modules/2.4.30
/jffs/lib/modules/2.4.30/vfat.o
/jffs/lib/modules/2.4.30/fat.o
/jffs/etc
/jffs/etc/modules.d
/jffs/etc/modules.d/30-vfat
/mnt #

   
 ipkg install kmod-ext2
 ipkg install kmod-ext3
 ipkg install kmod-xfs

autoload filesystem modules

Add to /jffs/etc/config/usb.startup (comment out lines you don't need to save memory)

/mnt # cat /jffs/etc/config/usb.startup
#!/bin/sh
insmod /jffs/lib/modules/2.4.30/usbcore.o
insmod /jffs/lib/modules/2.4.30/ehci-hcd.o
insmod /jffs/lib/modules/2.4.30/scsi_mod.o
insmod /jffs/lib/modules/2.4.30/usb-storage.o
# remove the dash (#) from the line below if you use USB 1.1
#insmod /jffs/lib/modules/2.4.30/uhci.o
insmod /jffs/lib/modules/2.4.30/sd_mod.o
/mnt #


Now dmesg should show (The example below is from a 80 GB HD)

 Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
 SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
 Partition check:
 /dev/scsi/host0/bus0/target0/lun0

Multislot card reader

In order to use a multislot card reader, you must add the following parameter to the scsi_mod in the file /jffs/etc/modules.d/60-usb-storage:

scsi_mod max_scsi_luns=8

Usage

Mounting

mount /dev/scsi/host0/bus0/target0/lun0/part1 /mnt

You can also add the above line to /jffs/etc/config/usb.startup to mount the partition on reboot

Performance Testing

With help of the hdparm package you could test your performance. On an Asus WL-500gP(remium) without overclocking you will get

hdparm -tT /dev/scsi/host0/bus0/target0/lun0/part2
Timing cached reads:   188 MB in  2.04 seconds =  92.16 MB/sec
Timing buffered disk reads:   24 MB in  3.19 seconds =   7.52 MB/sec


Please note overclocking wouldn´t get you significant more performance on Asus WL-500gP(remium) Router.

On a WRTSL54G with 4G flash disk

/ # hdparm -tT /dev/scsi/host0/bus0/target0/lun0/part2

/dev/scsi/host0/bus0/target0/lun0/part2:
 Timing cached reads:   148 MB in  2.03 seconds =  72.91 MB/sec
 Timing buffered disk reads:   24 MB in  3.22 seconds =   7.45 MB/sec
/ #

On a WRT350N with 2GB SanDisk Cruzer Titanium flash disk

/ # hdparm -tT /dev/scsi/host0/bus0/target0/lun0/part1

/dev/scsi/host0/bus0/target0/lun0/part1:
 Timing cached reads:   196 MB in  2.01 seconds =  97.51 MB/sec
 Timing buffered disk reads:   28 MB in  3.04 seconds =   9.21 MB/sec
/ #

Listing Contents

ls -l /mnt
# multiple partitions
mkdir /tmp/usb
mkdir /tmp/usb/1
# wait to recognize devices properly
sleep 2
# mount first partition
/bin/mount /dev/scsi/host0/bus0/target0/lun0/part1 /tmp/usb/1
# list its contents
ls -l /tmp/usb/1
# second partition
mkdir /tmp/usb/2
mount /dev/scsi/host0/bus0/target0/lun0/part2 /tmp/usb/2
# list its contents
ls -l /tmp/usb/2

If you're having trouble

If you still cannot get your USB drive to mount after following these instructions to the letter, you can try resetting the NVRAM. Do this by using the recovery utility to upload the bin/trx file meant for that purpose.

NOTE: This has miraculously solved problems on an ASUS WL-500G Premium. Your mileage may vary, especially if you have a different router.