|
Documentation from June-2010
Table of Contents
The purpose of this document is to touch upon some of the major updates to the
TS-75XX/TS-4500 image which was release in June of 2010. It is available on the FTP site here:
ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/binaries/ts-images/2gbsd-eclipse-jun012010.dd.bz2
All components to this update, including sources and binaries, can be found within the TS-7500 FTP repository here:
ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/
The following is a changelog for the TS-75xx/TS-4500 for June 2010 release
DEBIAN:
* ppp utilities installed
* bluetooth utilities installed (bluez-libs-3.36, bluez-utils-3.36, passkey-agent, etc.)
* modules in /lib have been reduced in size by using 'objcopy --strip-unneeded'
* Debian upgraded with 'apt-get upgrade'
* usbutils installed (which included lsusb)
* Replaced buggy iputils-ping with inetutils-ping, fixing the freeze after 15 pings
* ALSA utilities included (alsa-base, alsa-utils)
* Added rt73usb to /etc/modprobe.d/blacklist due to instability issues
* Removed contents of /etc/resolv.conf due to slow enhanced rsyslogd startup times
* Included TS-75XX/TS-4500 OpenCore bitstreams in /boot
* Wireless support for Asus and IOGear dongles included
* Experimental utility 'install-wireless-usb' script included
* g_ether driver for IP over USB included and loaded by default through /etc/modules
* spictl and dmxctl utilities included
* canctl option '--server' included (SIGHUD safe)
* jed2vme installed
* gettemp for all TS-75XX/TS-4500 models included
* nandctl option '--stats' added
* Corrected ssh keys issue
KERNEL:
* ppp modules included (set by default in ts7500_defconfig)
* bluetooth modules included (set by default in ts7500_defconfig)
* alsa modules included (set by default in ts7500_defconfig)
* smsc9514 modules included (patch included in kernel sources and set by default in ts7500_defconfig)
* iptables modules included (set by default in ts7500_defconfig)
* unionfs modules included (patch included in kernel sources and set by default in ts7500_defconfig)
* usb slave modules g_ether and str8100_udc included (patch included in kernel sources and set by default in ts7500_defconfig)
* usb serial modules included (patch included in kernel sources and set by default in ts7500_defconfig)
* Kernel support for userspace IRQs included (patch included and applied in kernel sources)
* Kernel gettimeofday() patch included and applied to kernel as bug fix
INITRD:
* uname busybox command added
* chat busybox command added
* ar busybox command added
* linuxrc-usbroot script added
* linuxrc-sdroot-readonly script added
* linuxrc-sdroot compatible with TS-7550 (boot directly to XNAND)
* fixed environment issues with telnet
* many extra ts7500.subr subroutine scripts such as spi2sd, sd2spi, sd2nand, nand2sd, etc...
* smarter utilities to load FPGA without causing sdctl or nandctl issues (bitstreams can now be loaded at any time)
* check-usb-update has been improved to detect onboard usb hub
* linuxrc made universal to deal with all TS-75XX/TS-4500 models
* glibc compiled programs can now run in uclibc busybox environment
- busybox now requires special make flags (see 7500_readme in busybox sources)
* reset/multipurpose switch logic added to initrd
* xuartctl changed to not use --irq in linuxrc-* files
* Smarter NBD utilization in initrd
* Fixed buggy saves
* Added 'getenv' subroutine
* longer software watchdog in *ctl
* ts7500ctl --info
- Write $baseboard_model variable on 4500
Utility: ts7500.subr
ts7500:~# tshelp
usbload - Load USB kernel drivers
setdiopin <pin> <1,0,Z> - set DIO header pin 1-44
getdiopin <pin> - get DIO input state
setrelay <val> - turn on/off TS-752 relays according to 3-bit val
setout <val> - set 3-bit TS-752 output val
getin - return 8 bit TS-752 inputs
gettemp - return TS-752 temperature sensor in Celsius
save - save initrd back to boot device
nandsave, sdsave, spiflashsave, spiflash1save -
-----save initrd to a media (NAND, mSD or SPI flash)
sd2nand, nand2spiflash, spiflash2sd, etc -
-----copy initrd from one media to another
sbcTest - run TS production tests
exit - boot mSD card (if present) or filesystem mounted at /mnt/root
Utility: ts7500ctl
ts7500:~# ts7500ctl --help
Usage: ts7500ctl [OPTION] ...
Technologic Systems SBUS manipulation.
General options:
-a, --address=ADR SBUS address
-r, --peek16 16-bit SBUS read
-w, --poke16=VAL 16-bit SBUS write
-g, --getmac Display ethernet MAC address
-s, --setmac=MAC Set ethernet MAC address
-R, --reboot Reboot the board
-t, --getrtc Display RTC time/date
-S, --setrtc Set RTC time/date from system time
-i, --info Display board FPGA info
-e, --greenledon Turn green LED on
-b, --greenledoff Turn green LED off
-c, --redledon Turn red LED on
-d, --redledoff Turn red LED off
-D, --setdio=LVAL Set DIO output to LVAL
-O, --setdiodir=LVAL Set DIO direction to LVAL (1 - output)
-G, --getdio Get DIO input
-Z, --getdioreg Get DIO direction and output register values
-x, --random Get 16-bit hardware random number
-W, --watchdog Daemonize and set up /dev/watchdog
-A, --autofeed=SETTING Daemonize and auto feed watchdog
-n, --setrng Seed the kernel random number generator
-X, --resetswitchon Enable reset switch
-Y, --resetswitchoff Disable reset switch
-I, --extendedtempon Enable extended temp (200Mhz CPU)
-C, --extendedtempoff Disable extended temp (250Mhz CPU)
-l, --loadfpga=FILE Load FPGA bitstream from FILE
-T, --gettemp Print board temperature
-h, --help This help
Utility: sdctl
ts7500:~# sdctl --help
Usage: sdctl [OPTION] ...
Technologic Systems SD core manipulation.
General options:
-R, --read=N Read N blocks of SD to stdout
-W, --write=N Write N blocks to SD
-x, --writeset=BYTE Write BYTE as value (default 0)
-i, --writeimg=FILE Use FILE as file to write to SD
-t, --writetest Run write speed test
-r, --readtest Run read speed test
-n, --random=SEED Do random seeks for tests
-o, --noparking Disable write parking optimization
-z, --blocksize=SZ Use SZ bytes each sdread/sdwrite call
-E, --erasehint=SZ Use SZ bytes as erase hint
-b, --sdboottoken=TOK Use TOK as the boot token (to quicken init)
-a, --address=ADD Use ADD address instead of 0x13000000
-k, --seek=SECTOR Seek to 512b sector number SECTOR
-l, --lun=N Use N as numbered card slot (default 0)
-S, --scanluns Scan all LUNs for cards
-m, --nodma Don't use DMA
-d, --nbdserver=NBDSPEC Run NBD userspace block driver server
-I, --bind=IPADDR Bind NBD server to IPADDR
-Q, --stats Print NBD server stats
-P, --printmbr Print MBR and partition table
-M, --setmbr Write MBR from environment variables
-f, --foreground Run NBD server in foreground
-h, --help This help
Security/SD lock options:
-p, --password=PASS Use PASS as password
-c, --clear Remove password lock
-s, --set Set password lock
-u, --unlock Unlock temporarily
-e, --erase Erase entire device (clears password)
-w, --wprot Enable permanent write protect
When running a NBD server, NBDSPEC is a comma separated list of
devices and partitions for the NBD servers starting at port 7500.
e.g. "lun0:part1,lun1:disc" corresponds to 2 NBD servers, one at port
7500 serving the first partition of SD lun 0, and the other at TCP
port 7501 serving the whole disc device of SD lun #1.
Utility: nandctl
ts7500:~# nandctl --help
Usage: nandctl [OPTION] ...
Technologic Systems NAND flash manipulation.
General options:
-R, --read=N Read N blocks of flash to stdout
-W, --write=N Write N blocks to flash
-x, --writeset=BYTE Write BYTE as value (default 0)
-i, --writeimg=FILE Use FILE as file to write to NAND
-t, --writetest Run write speed test
-r, --readtest Run read speed test
-n, --random=SEED Do random seeks for tests
-z, --blocksize=SZ Use SZ bytes each read/write call
-k, --seek=SECTOR Seek to 512b sector number SECTOR
-e, --erase=NSECTORS Erase NSECTORS 512b sectors
-d, --nbdserver=NBDSPEC Run NBD userspace block driver server
-I, --bind=IPADDR Bind NBD server to IPADDR
-Q, --stats Print NBD server stats
-f, --foreground Run NBD server in foreground
-l, --lun=N Use chip number N
-X, --xnand Use XNAND RAID layer
-A, --autormw Use AUTORMW layer
-s, --stress=BLOCK Stress block BLOCK until it breaks
-H, --hwtest=BLOCK Hardware profile block BLOCK
-b, --break=SECTOR Erase sector SECTOR for testing
-I, --xnandinit=NSECT Initialize flash chip for XNAND RAID
-L, --listbb List all factory bad blocks
-a, --audit Check integrity of XNAND data
-Y, --yes Answer yes to all audit repairs
-N, --no Answer no to all audit repairs
-v, --verbose Be verbose (-vv for maximum)
-P, --printmbr Print MBR and partition table
-M, --setmbr Write MBR from environment variables
-h, --help This help
When running a NBD server, NBDSPEC is a comma separated list of
devices and partitions for the NBD servers starting at port 7525.
e.g. "lun0:part1,lun1:disc" corresponds to 2 NBD servers, one at port
7525 serving the first partition of chip #0, and the other at TCP
port 7526 serving the whole disc device of chip #1.
Utility: dmxctl
ts7500:~# dmxctl --help
Technologic Systems DMX application
-l | --listen=<seconds> capture DMX packets and print to stdout
-r | --replay=<file> play DMX events as specified in file
-a | --autosend sends DMX packets even when no new events occur
-c | --channels=<num> send the specified number of DMX channels
-s | --server=<port> run as a server. The default port is 7033.
-i | --client=<host:>port connect to the specified DMX server
-i | --client=dev connect to the specified UART device
-m | --demo play a demo sequence
Need to specify exactly one of --server, --client, or --device.
Utility: canctl
ts7500:~# canctl --help
Technologic Systems CAN controller manipulation.
-a | --address=ADR CAN register address
-b | --baud=BAUD CAN baud rate (7500 to 1000000)
-R | --peek8r CAN register read
-W | --poke8w=VAL CAN register write
-i | --txid=ID CAN TX packet ID
-T | --txrtr TX RTR packet
-d | --txdat=DAT TX packet with data DAT
-s | --server==<port> Daemonize and run as server
-D | --dump Receive and print all CAN packets
-0 | --btr0=BTR0 SJA1000 BTR0 bus timing reg val
-1 | --btr1=BTR1 SJA1000 BTR1 bus timing reg val
-t | --txtest Send TX test pattern
-r | --rxtest Do RX test
-p | --port=<host><:port> Talk to canctl server
Utility: spictl
ts7500:~# spictl --help
Technologic Systems SPI controller manipulation.
General options:
-c | --clock=frequency SPI clock frequency
-e | --edge=value set clock edge (positive for > 0, negative for < 0)
-w | --writestream=data write colon delimited hex octets to SPI
-d | --readwrite=data write colon delimited hex octets to SPI while reading to stdout
-r | --readstream=bytes read specified number of bytes from SPI to stdout
-o | --holdcs don't de-assert CS# when done
-l | --lun=id Talk to specified chip number
-s | --server=<port> Daemonize and run as server listening on port
-p | --port=<host><:port> Talk to spictl server
hex octets are hexadecimal bytes. for example,
this command reads 32 bytes of CS#1 SPI flash from address 8192:
./spictl -l 1 -w 0B:00:20:00:00 -r 32 <host><:port>
Certain Technologic System Single Board Computers (SBC)
contain both USB Host and USB Device ports. This section will
discuss the configuration and use of the Linux USB device gadgets (http://www.linux-usb.org/). The two
supported gadgets are 1) USB Mass Storage Device and 2) IP over USB
(A.K.A. USB Ethernet).
The USB Mass Storage Device Linux USB gadget will allow you to use your
SBC as a storage device, like a USB thumb drive, when connected to a host PC.
Subsequently, the SBC can access the saved data through the storage element
named usb_storage_file.
The IP over USB (A.K.A. USB Ethernet) Linux USB gadget will allow you to
connect to your SBC with a USB cable from a PC like you would with a CAT5
Ethernet cable. You will have access to the SBC via the TCP/IP connection
allowing you to use any networking utility (e.g. ping, ssh, ftp, http,
etc).
All software modules required for Linux are contained on recent SBCs
(those released with the May 18, 2010 or later software load). For Windows,
a driver interface configuration file (linux.inf) will need to
be downloaded and installed on the host PC. This procedure is described in
detail below.
Utilizing SBC as "USB Mass Storage Device"
The SBC must be setup prior to connection to a host PC. These steps
are outline below. These steps assume that the g_ether module is unloaded
(rmmod g_ether).
1.) Create a mount point and then mount the first partition of SD card where
the storage element exists.
* mkdir /mnt/vfat; mount /dev/nbd1 /mnt/vfat
2.) Install the g_file_storage driver with storage element details
* modprobe g_file_storage file=/mnt/vfat/usb_storage_file
After following these steps for preparing the SBC storage element, plug
the SBC into the host PC with a A to B USB Cable (ISB Cable). You will see
the newly mounted volume and should be able to access it.
When you have completed using the device on the Linux or Windows System,
you will need to eject volume using either umount on Linux,
or "Safely Remove Hardware" on Windows and then unplug the USB cable.
After transferring data from a host PC to the SBC through the USB Mass
Storage Device Linux gadget, you can access the data on the SBC by using
the following steps.
1.) Remove the g_file_storage driver allowing local access to storage element
* rmmod g_file_storage
2.) Create a mount point and then mount the storage element (assuming
"/dev/nbd1" is still mounted to "/mnt/vfat" from steps above)
* mkdir /mnt/usbdev
* mount -t vfat -o loop=/dev/loop0,offset=4096 /mnt/vfat/usb_storage_file /mnt/usbdev/
NOTE:
The kernel should already have support for loop block devices. If not, you will need to insert the loop.ko module with modprobe or insmod.
You can now locally access /mnt/usbdev.
When finished with the device, or to allow access via the USB Device
port, you must un-mount the device using:
umount /mnt/usbdev
Utilizing IP over USB (USB Ethernet) on SBC
The SBC must be setup prior to connection to a host PC. These steps are
outline below.
1.) Install the g_ether driver
* modprobe g_ether
2.) Assign an IP address to the new usb0 interface
* ifconfig usb0 192.168.42.20
NOTE:
The IP address in the above example may be any valid IP
address, but should typically not be on the same subnet as the Ethernet
network on the SBC (if connected), or the host computer to which the
SBC will be connected.
Connecting Linux Host to SBC via IP over USB
Most modern Linux distributions already have all of the required modules (i.e. usbnet.ko)
and utilities installed, so the setup steps are minimal. Simply plug in
the SBC after it has been prepared for IP over USB (see above) and observe
that a new interface has been added named usb0 or similar
(use dmesg | tail to verify). You can now assign an IP
address to that interface with ifconfig (e.g. ifconfig
usb0 192.168.42.21) and begin using the TCP/IP connection.
To test your connection, use ping 192.168.42.20.
You should also be able to login to the SBC using ssh ie. ssh
root@192.168.42.40.
NOTE:
The IP address above may be any valid IP address, but must be in
the same subnet as the IP address assigned to the SBC IP over USB connection above.
Connecting Windows XP Host to SBC via IP over USB
An additional driver interface configuration file called
linux.inf is required for IP over USB connection to a Windows
host. First, download this file onto the Windows PC and remember where you
placed it. Next, connect the SBC and Windows PC with the A to B USB cable
(ISB Cable). You should see the "Found New Hardware Wizard". Answer the
prompts as follows:
- Select Include this location in the search and choose the location of the driver you downloaded. Finish running the wizard.
- Go to the Control Panel and open "Network Connections". Right-click the new connection (labeled "Linux USB Ethernet/RNDIS Gadget") and click "Rename". Rename it to something useful such as "USB Network".
- Right-click on the newly labeled icon, and select properties.
- Under the properties General tab, select the item labeled Internet Protocol (TCP/IP)
- Select Use the following IP Address, and enter 192.168.42.21.
- Click OK; Click OK
You may now access the SBC via the TCP/IP connection. Use ping in the Command Prompt window to verify connectivity (e.g. ping 192.168.42.20).
NOTE:
Note that the IP address above may be any valid IP address, but must be in
the same subnet as the IP address assigned to the SBC IP over USB connection above.
Connecting Windows Vista Host to SBC via IP over USB
Not yet supported, but currently in progress.
Connecting Windows 7 Host to SBC via IP over USB
Not yet supported, but currently in progress.
Technologic Systems has introduced kernel and Debian support for USB audio adapters on the TS-75XX/TS-4500 series of boards. For the most part, it should be simply plug-n-play as the necessary modules are all included and installed automatically when the device is inserted. For example, the following is output from lsmod:
ts7500:~# lsmod
Module Size Used by
snd_usb_audio 48736 0
snd_pcm 48744 1 snd_usb_audio
snd_page_alloc 4264 1 snd_pcm
snd_usb_lib 9984 1 snd_usb_audio
snd_seq_midi 3072 0
snd_seq_midi_event 3424 1 snd_seq_midi
snd_rawmidi 12352 2 snd_usb_lib,snd_seq_midi
snd_seq_device 3176 2 snd_seq_midi,snd_rawmidi
snd_hwdep 3812 1 snd_usb_audio
snd_seq 33128 2 snd_seq_midi,snd_seq_midi_event
snd_timer 12708 2 snd_pcm,snd_seq
snd 27956 7 snd_usb_audio,snd_pcm,snd_rawmidi,snd_seq_device,snd_hwdep,snd_seq,snd_timer
soundcore 2916 1 snd
ohci_hcd 14372 0
usb_storage 23072 0
ehci_hcd 22028 0
usbcore 74268 5 snd_usb_audio,snd_usb_lib,ohci_hcd,usb_storage,ehci_hcd
sd_mod 15504 0
scsi_mod 55372 2 usb_storage,sd_mod
NOTE:
The essential "alsabase" package was removed from the Debian filesystem suited for the 256MB XNAND drives. You will need to install this if you wish to use USB audio adapters with XNAND products like the TS-7550.
The following is an example output from dmesg.
ts7500:~# dmesg
[ 75.310000] usb 2-2: new full speed USB device using str8100-ohci and address 2
[ 75.490000] usb 2-2: configuration #1 chosen from 1 choice
[ 83.400000] usbcore: registered new interface driver snd-usb-audio
The following is an example output from lsusb.
ts7500:~# lsusb
Bus 002 Device 002: ID 0d8c:0001 C-Media Electronics, Inc. Audio Device
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
The following is an example in actually using the USB audio adapter using alsaplay.
ts7500:~# aplay testaudio.wav
NOTE:
A test audio file can be created using the popular cross-platform program audacity. If you want to play other forms of audio, you'll need to pipe it through the sox layer.
Use the following steps as a guide to get a USB Bluetooth adapter to work
on the TS-75XX/TS-4500 series of boards.
- Plug in USB Bluetooth adapter
- Modules should load automatically, use the following for reference
ts7500:~# lsmod
Module Size Used by
hci_usb 8220 0
bluetooth 36172 1 hci_usb
g_ether 17744 0
str8100_udc 13476 1 g_ether
ohci_hcd 14372 0
usb_storage 23072 0
sd_mod 15504 0
scsi_mod 55372 2 usb_storage,sd_mod
ehci_hcd 22028 0
usbcore 74300 4 hci_usb,ohci_hcd,usb_storage,ehci_hcd
- Use the Bluetooth utilities to configure the Bluetooth adapter
- Use
hciconfig hci0 up to bring the interface up
- Use
hciconfig to view
- Use
hcitool scan to scan for bluetooth
- Use
hcitool info to get info about remote bluetooth device
- Use
hcitool inq to inquire the class and clock offsets of devices
- Use
l2ping to see if we can communicate with a remote bluetooth device (need modprobe rfcomm for this)
- Use
passkey-agent for connections requiring PIN
Here is an example script to get everything working (take from the TS-7500 Software Guide):
#######################
# BEGIN SCRIPT #
#######################
depmod
modprobe ohci-hcd # open HCI
#modprobe uhci-hcd # Intels HCI universal uses the PCI
modprobe bluetooth # load Bluez stack
modprobe hci_usb # load USB device handlers
/etc/init.d/bluetooth restart # startup hci0 bluetooth network device
hciconfig hci0 up
modprobe rfcomm
mknod -m 666 /dev/rfcomm0 c 216 0
mknod -m 666 /dev/rfcomm1 c 216 1
rfcomm bind 0 # serial BT connection
#######################
# END SCRIPT #
#######################
Shrinking Debian Filesystem for use with XNAND
Preparing Debian so it can fit on the 256MB XNAND flash. After running these commands, there is 52MB available.
apt-get remove pciutils alsabase bluez-audio dbus-x11 gcc g++ mysql-common perl apache2
apt-get autoremove
Installing Bluetooth Utilities
The 'bluez-libs-3.36' and 'bluez-utils-3.36' packages were downloaded from http://www.bluez.org/download/ and compiled manually. Then, the following additional steps were taken.
apt-get install bluetooth pkg-config libdbus-1-dev build-essential
cd /usr/share/doc/bluez-utils/examples
gunzip passkey-agent.c.gz
make
cp passkey-agent /usr/local/bin/
rm passkey-agent
gzip passkey-agent.c
Ping Fix
apt-get remove iputils-ping
apt-get install inetutils-ping
USB Sound
apt-get install inetutils-ping alsa-base alsa-utils usbutils
General Maintenance
apt-get upgrade; apt-get clean
The following packages will be upgraded:
apache2 apache2-mpm-worker apache2-utils apache2.2-common apt apt-utils
base-files bind9-host dbus dbus-x11 dhcp3-client dhcp3-common dpkg gnupg
gpgv gzip libapr1 libaprutil1 libbind9-40 libc6 libc6-dev libdns45 libexpat1
libgnutls26 libisc45 libisccc40 libisccfg40 libkrb53 liblwres40
libmysqlclient15off libnewt0.52 libpq5 libsasl2-2 libssl0.9.8 libvolume-id0
libxcb-xlib0 libxcb1 libxml2 linux-libc-dev login mysql-common openssl
passwd perl perl-base perl-modules tzdata udev wget whiptail x11-common
Blacklist rt73usb Driver
Required to prevent default rt73usb driver from loading which causes stability
issues.
echo "blacklist rt73usb" >> /etc/modprobe.d/blacklist
Shrink Kernel Modules
Dramatically reduce the size that the kernel modules take up. This is done
on a development PC with the crosstool objcopy command.
find . -type f -name '*.ko' | \
xargs -n 1 arm-uclibc-3.4.6/bin/arm-linux-objcopy --strip-symbols
This section provides the necessary steps for updating the XNAND
Drive of the TS-755x/TS-4500 series. Keep in mind that this section
will refer to a generic xnandimg.dd.gz file. Use the appropriate
image name for your update by referring to the images available on
the FTP server. For example, the June 1st, 2010 image is specifically
named "xnandimg-jun012010.dd.gz" and can be found on the FTP server here: ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/binaries/ts-images/xnandimg-jun012010.dd.gz
First, the appropriate xnandimg.dd.gz file must be downloaded and copied
to an accessible location that the TS-755x/TS-4500 can access while booted
to the initial ramdisk (initrd/fastboot) of the offboard SPI
flash, XNAND drive, or USB drive.* Possible locations are USB thumb drive,
microSD card, or network server (NFS, FTP, TFTP, SSH). Whichever the case
may be, use the following command to write the appropriate xnandimg.dd.gz
file to the XNAND drive:
gunzip -c /path/to/xnandimg.dd.gz | nandctl -z 131072 -XW 2048 -i -
* If you do not have an accessible location for the image readily available,
you can use a cute series of pipes to write the image to the XNAND drive
directly from Technologic Systems FTP server to the XNAND drive without
using USB flash drive or other storage medium with the following commands. Keep
in mind that if your network connection should drop or there are any download
problems, you risk being left with a corrupted XNAND image. Don't restart the
TS-755x/TS-4500 unless you feel confident that it copied okay!
1.) Get IP Address:
* udhcpc
2.) Specify FTP_URL variable with actual path and name of the xnandimg file:
* FTP_URL=ftp://ftp.embeddedarm.com/path/to/xnandimg.dd.gz
-- NOTE: For example, for the June 1st, 2010 XNAND image release use the following command:
* FTP_URL=ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/binaries/ts-images/xnandimg-jun012010.dd.gz
3.) Download file from ftp, pipe to gunzip, pipe to nandctl (single, one-liner command):
* wget $FTP_URL -O - | gunzip - | nandctl -z 131072 -XW 2048 -i -
|