technologic systems logo
search icon
Contact Us | Customer Area |cart icon
  16525 East Laser Drive
Fountain Hills, AZ 85268
Phone (480) 837-5200
Fax (480) 837-5300
info@embeddedARM.com

Home > About > News > Documentation

 

TS-75XX/TS-4500 June 2010 Software Update

arrow

Documentation from June-2010


Table of Contents

Introduction

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/

Changelog

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

Updated TS Utilities

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>

USB Device Port Usage

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:

  1. Select Include this location in the search and choose the location of the driver you downloaded. Finish running the wizard.
  2. 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".
  3. Right-click on the newly labeled icon, and select properties.
  4. Under the properties General tab, select the item labeled Internet Protocol (TCP/IP)
  5. Select Use the following IP Address, and enter 192.168.42.21.
  6. 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.

USB Audio Adapter Usage

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.

USB Bluetooth Adapter Usage

Use the following steps as a guide to get a USB Bluetooth adapter to work on the TS-75XX/TS-4500 series of boards.

  1. Plug in USB Bluetooth adapter
  2. 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
       
  3. 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          #
   #######################

Commands Run to Prep Image

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

Updating XNAND with New Software Load

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 -