User Tools

Site Tools


midge:usb

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

midge:usb [2018/04/09 15:36] (current)
Line 1: Line 1:
 +====== USB Support ======
 +
 +===== Hardware =====
 +Some of the [[SupportedDevices]],​ e.g.  BR6104KP have usb plugs. On other devices like the BR6104K the USB stuff is not soldered in. You can add these parts using [[http://​spritesmods.com/?​art=sweexusb|this tutorial]]. Depending on the oscillator you added you have to change the power supply for the oscillator from +5V to +3.3V (Pin 2 on JP2) to make USB working. Error messages like ''​device nor accepting new address''​ point to this problem.
 +
 +===== USB storage devices =====
 +
 +==== Here list of USB-Flash compatible/​incompatible devices ====
 +
 +^      USB-Flash name                                ^ Result ^   ​Device ​   ^
 +| USB 2.0 Flash 1GB LG Silver ​                       | passed | BR-6104K(P) |
 +| USB 2.0 Flash 2GB LG Silver ​                       | passed | BR-6104K(P) |
 +| USB 2.0 Flash 1GB LG Mirror ​                       | passed | BR-6104K(P) |
 +| USB 2.0 Flash 2GB LG Mirror ​                       | passed | BR-6104K(P) |
 +| USB 2.0 Flash 2GB U-Drive Kingmax ​                 | passed | BR-6104K(P) |
 +| USB 2.0 Flash 2GB Transcend JetFlash T3, ts2gjft3k | fail   | BR-6104K(P) |
 +| USB 2.0 Flash 2GB Transcend JetFlash V30           | fail   | BR-6104K(P) BR-6214K(P) |
 +| USB 2.0 Flash 2GB A-Data "​myflash" ​                | passed | BR-6104K(P) BR-6214K(P) |
 +| USB 2.0 Flash 2GB pqi Cool Drive U339              | passed | BR-6214K ​   |
 +| USB 2.0 Flash 4GB Pretec i-Disk Tiny               | fail   | BR-6104K(P) |
 +| USB 2.0 Flash 256MB Kingston Data Traveler ​        | passed | BR-6104K(P) |
 +| USB 2.0 Flash 4GB Kingston Data Traveler 112       | passed | BR-6104K(P) |
 +| USB 2.0 Flash 16GB Kingston Data Traveler 101      | passed | BR-6104K(P) |
 +| USB 2.0 Flash 4GB Freecom Databar ​                 | passed | BR-6104K(P) |
 +| USB 2.0 Flash 8GB Apacer AH324                     | passed | BR-6104K(P) |
 +
 +
 +==== Preparing the USB stick ====
 +=== with a Linux PC ===
 +You can get additional //disk// space by plugging in an USB stick. But the for USB sticks common ''​VFAT''​ filesystem is not supported by midge at the moment (**why ?**). So you have to make a ext2 or ext3 filesystem on your stick first.
 +To make the filesystem, plug your stick into your Linux PC. Find out the device name of the partition on the usb stick by checking the difference between the output of the ''​mount''​ command (as root) before and after you plug in the stick. After the stick was plugged in, the should be an additional line like
 +<​code>​
 +/dev/sda1 on /media/sda1 type vfat (rw,​noexec,​nosuid,​nodev)
 +</​code>​
 +You device is ''/​dev/​sda1''​. ​
 +<note warning>
 +Double-check this because you can erase all data from your PCs harddisk, if you use the wrong device name.
 +</​note>​
 +Unmount it now as root:
 +<​code>​
 +umount /dev/sda1
 +</​code>​
 +<note warning>
 +All data on your stick will be lost in the next step!
 +</​note>​
 +You have been warned. Make the new filesystem:
 +<​code>​
 +mkfs.ext2 /dev/sda1
 +</​code>​
 +Dependeing on your stick size and speed this will take a while. If ready, plug out and in your stick. It should be mounted again. Copy now to it what you want.
 +
 +=== with a Windows PC ===
 +Please write down how to write an ext2 filesystem under Windows, if you own a Windows PC and you know how to do it.
 +
 +It is not a comlete solution, but it is a workaround:
 +You can use a Live-CD, these are really fast to download, don't touch your Harddisk and are easy to use. I prefer Ubuntu.
 +
 +Or you can use Ext2 IFS [[http://​www.fs-driver.org/​|External Link]].
 +
 +==== USB support on midge ====
 +=== USB not as root device ===
 +
 +Install the USB and ext2 modules (drivers) into your running midge:
 +<​code>​
 +ipkg install kmod-fs-ext2
 +ipkg install kmod-usb-core
 +ipkg install kmod-usb-ohci
 +ipkg install kmod-usb-shci
 +ipkg install kmod-usb-storage
 +</​code>​
 +
 +and load them into the running kernel:
 +<​code>​
 +insmod scsi_mod
 +insmod sd_mod
 +insmod ext2
 +insmod usbcore
 +insmod usb-storage
 +insmod usb-shci
 +</​code>​
 +
 +Type ''​dmesg''​ to see, that the kernel found your USB plugs:
 +<​code>​
 +SCSI subsystem driver Revision: 1.00
 +usb.c: registered new driver hub
 +Initializing USB Mass Storage driver...
 +usb.c: registered new driver usb-storage
 +USB Mass Storage support registered.
 +usb-shci.c: ​ Start Init AHCI_INIT
 +usb.c: new USB bus registered, assigned bus number 1
 +hub.c: USB hub found
 +hub.c: 2 ports detected
 +</​code>​
 +
 +Now plug in your USB stick and type ''​dmesg''​ again:
 +<​code>​
 +hub.c: new USB device HUB-2, assigned address 2
 +scsi0 : SCSI emulation for USB Mass Storage devices
 +  Vendor: TOSHIBA ​  ​Model:​ TransMemory ​      Rev: 1.04
 +  Type:   ​Direct-Access ​                     ANSI SCSI revision: 02
 +Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
 +SCSI device sda: 1001472 512-byte hdwr sectors (513 MB)
 +sda: Write Protect is off
 +Partition check:
 + /​dev/​scsi/​host0/​bus0/​target0/​lun0:​ p1
 +WARNING: USB Mass Storage data integrity not assured
 +USB Mass Storage device found at 2
 +</​code>​
 +
 +<note tip>
 +If you get an error like ''​device not accepting new address''​ on a device with self added USB plugs, try to connect the oscillator power supply pin to +3.3V (JP2 Pin 2) instead of +5V.
 +</​note>​
 +
 +Now mount the partition into the routers filesystem tree. You get the partition name from the ''​dmesg''​ output above:
 +<​code>​
 +mount /​dev/​scsi/​host0/​bus0/​target0/​lun0/​part1 /mnt
 +</​code>​
 +
 +The data from the USB stick should now appear in the folder ''/​mnt''​.
 +
 +Be shure that you have unmounted the partition and the sticks led has stopped to blink before you plug the stick out.
 +<​code>​
 +unmount /mnt
 +</​code>​
 +
 +<note warning>
 +Never plug out the stick without ''​unmount''​ or while the led is blinking.
 +</​note>​
 +
 +=== USB root device ===
 +== Kernel ==
 +First we need a kernel, which searchs for the root filesystem on the USB media. Assuming you have already [[Howtos|build a midge image]] make the following changes:
 +<​code>​
 +cd build_mipsel/​linux-2.4-adm5120/​linux-2.4.32/​
 +make menuconfig
 +</​code>​
 +<note warning>
 +You realy have to make the normal midge image first. Otherwise you will not find the directory above.
 +</​note>​
 +
 +In the appearing menu change the kernel command line
 +<​code>​
 +General setup  --->
 +     [*] Default bootloader kernel arguments
 +          Initial kernel command string:
 +</​code>​
 +from
 +<​code>​
 +root=/​dev/​mtdblock2 rootfstype=squashfs ro panic=10 console=/​dev/​ttyS0
 +</​code>​
 +to
 +<​code>​
 +root=/​dev/​scsi/​host0/​bus0/​target0/​lun0/​part1 rw panic=10 console=/​dev/​ttyS0
 +</​code>​
 +or whatever the partition on your USB stick is (see above). Then change the SCSI and USB support from **m** to ** * **, what meens that the drivers are direct in the kernel, no in lodable modules:
 +<​code>​
 + SCSI support ​ --->
 +     <​*>​ SCSI support
 +          <​*> ​  SCSI disk support
 +          (2) Maximum number of SCSI disks that can be loaded as modules
 + File systems ​ --->
 +     <​*>​ Ext3 journalling file system support
 +     <​*>​ Second extended fs support
 + USB support ​ --->
 +     <​*>​ Support for USB
 +          <​*> ​  OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
 +          <​*> ​  AHCI ADM5120 (USB 1.1) Host controller support (EXPERIMENTAL)
 +     <​*> ​  USB Mass Storage support
 +</​code>​
 +Exit menuconfig an say **yes** to the ''​Save''​-Question. Stay in this directory and download and apply the following patches:
 +
 +<​code>​
 +wget http://​schimmelnetz.de/​projekte/​eddi/​files/​do_mounts.c.diff
 +wget http://​schimmelnetz.de/​projekte/​eddi/​files/​usb-shci.c.diff
 +wget http://​schimmelnetz.de/​projekte/​eddi/​files/​usb-shci.h.diff
 +
 +patch -p0 < do_mounts.c.diff
 +patch -p0 < usb-shci.c.diff
 +patch -p0 < usb-shci.h.diff
 +</​code>​
 +
 +If you want another baudrate than 115200 for ''/​dev/​ttyS0'',​ change line 104 in ''​arch/​mips/​am5120/​serial.c''​. See also [[second_uart]].
 +
 +Only if you have the original, not the [[bootloader-with-tftp|extended bootloader]],​ apply the kernel entry patch:
 +<​code>​
 +wget http://​midge.vlad.org.ua/​tmp/​004-kernel-entry.patch
 +patch -p0 < 004-kernel-entry.patch
 +</​code>​
 +
 +Now make your usb-root kernel
 +<​code>​
 +make
 +</​code>​
 +
 +After complete, you find in the current directory a file ''​vmlinuz'',​ which is the new kernel. With the [[bootloader-with-tftp|extended bootloader]] you can load this kernel direct in the SDRAM of your router and run it from there for testing. To make this kernel persistent in the router it has to be loaded into the flash. But the bootloader accepts only images with csys header. So you have to add it with the ''​mksyshdr''​ command, which we have to download and build using the normal system compiler, not the [[crosscompiler]].
 +<​code>​
 +wget http://​midge.vlad.org.ua/​svn/​trunk/​openwrt-midge/​target/​linux/​image/​adm5120/​src/​mksyshdr.c
 +gcc mksyshdr.c -o mksyshdr && chmod 755 mksyshdr
 +./mksyshdr csys vmlinuz
 +cat csys vmlinuz > firmware.img
 +</​code>​
 +You can now flash ''​firmware.img''​ to your router.
 +
 +Change to the openwrt root directory.
 +<​code>​
 +cd ../../..
 +</​code>​
 +
 +<note tip>
 +If this all is to complicated,​ you can use the ready-to-run [[[http://​www.sunspot.co.uk/​Projects/​SWEEX/​files/​firmwares2007/​070204/​vmlinuz|usb-root-kernel]] provided by sunspot with his distro: [[http://​www.sunspot.co.uk/​Projects/​sweexproject.htm]] ​ - menu item 2 - 
 +</​note>​
 +
 +== root filesystem on USB media ==
 +
 +You need now a root file system on your USB media.
 +<note tip>
 +There is [[http://​www.sunspot.co.uk/​Projects/​SWEEX/​files/​stick_versions/​stick_070209.tar.gz|a ready to run filesystem]] in sunspots distro: [[http://​www.sunspot.co.uk/​Projects/​sweexproject.htm]] ​ - menu item 2 -. But use this filesystem only with sunspots kernel, not with a kernel generated like written above.
 +</​note>​
 +You can also build your own usb root filesystem. Or to be exact, you already have it. It was generated with the normal midge image. So just make an ext2 filesystem on your stick and mount in on your Linux PC as described above. Then put the filesystem on your stick:
 +<​code>​
 +cd /media/sda1 # or where your empty USB stick filesystem is mounted
 +(cd <​path-to-your-kamikaze-src>/​trunk/​openwrt/​build_mipsel/​linux-2.4-adm5120/​root && tar cBplf - . ) | tar xBpvf -
 +</​code>​
 +Before you unmount your stick, change on the stick filesystem in ''​etc/​midge.conf''​ the ''​MIDGE_TYPE''​ to ''​usb''​. You can also edit ''​etc/​resolv.conf'',​ ''​etc/​hostname'',​ ''​etc/​network/​interfaces''​ and ''​etc/​ipkg.conf''​ to your needs, but you can do this later in the router too.
 +
 +Unmount your stick, plug in into your router, boot the usb-root-kernel and be happy with midge on usb.
 +
 +<note tip>
 +It would be nice to have a filesystem, where ''/​tmp''​ and ''/​var ''​ are on a ramdisk, so that there is as less write access to the usb stick, as possible. If somebody has done that, please upload this filesystem to the wiki.
 +</​note>​
 +
 +===== USB to serial adapter =====
 +You an connect a modem, a mobile phone or another serial device to the USB ports with a common USB-RS232 adapter cable. Install the usb and usb-serial modules, if not already done above:
 +<​code>​
 +ipkg install kmod-usb-core
 +ipkg install kmod-usb-ohci
 +ipkg install kmod-usb-shci
 +ipkg install kmod-usb-serial
 +insmod usbcore
 +insmod usb-shci
 +insmod usbserial
 +</​code>​
 +Install the device specific modules:
 +<​code>​
 +ipkg install kmod-usb-serial-ftdi && insmod ftdi_sio # my USB-RS232 adapter cable
 +or
 +ipkg install kmod-usb-serial-pl2303 && insmod pl2303 # Siemens mobile phone cable
 +</​code>​
 +Connect your mobile phone with modem emulation or a real modem to the cable. Now there should be a device file like this:
 +
 +''​crw------- ​   1 root     ​root ​    ​188, ​  0 Jan  1  1970 /​dev/​usb/​tts/​0''​
 +
 +If yes you can now test it usin two shells on your router:
 +<​code>​
 +# In the first shell listen to the serial device, stop with Ctrl-C:
 +cat /​dev/​usb/​tts/​0 ​
 +
 +# In the second shell write something to the serial device:
 +echo AT > /​dev/​usb/​tts/​0
 +</​code>​
 +In the first shell now you should see
 +
 +''​AT''​
 +
 +''​OK''​
 +
 +That means, your modem answered ''​OK''​ to yout ''​AT''​. Be happy now.
 +
 +===== USB bluetooth adapter =====
 +has to be written...
 +
  
midge/usb.txt · Last modified: 2018/04/09 15:36 (external edit)