USB storage
From DD-WRT Wiki
Revision as of 15:02, 8 July 2007 (edit) Tjyang (Talk | contribs) (→kernel modules for filesystems) ← Previous diff |
Revision as of 15:05, 8 July 2007 (edit) (undo) Tjyang (Talk | contribs) (→autoload filesystem modules) Next diff → |
||
Line 150: | Line 150: | ||
=== autoload filesystem modules === | === autoload filesystem modules === | ||
Add to /jffs/etc/config/usb.startup (comment out lines you don't need to save memory) | Add to /jffs/etc/config/usb.startup (comment out lines you don't need to save memory) | ||
- | + | <pre> | |
- | + | /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 # | ||
+ | |||
+ | </pre> | ||
Revision as of 15:05, 8 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 / #
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