[oe] [PATCH 4/6] Add recipes for building TS75xx userspace utilities

UDel V2G Team v2g.udel at gmail.com
Wed Mar 30 14:07:08 UTC 2011


Support for building the following userspace utilities is provided:
* canctl
* dioctl
* dmxctl
* jed2vme
* sdctl
* ts7500ctl
* spiflashctl
* xuartctl

The original source for these utilities is:

ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7550-linux/sources/

This commit includes a minimal set of patches for building these utilities
with EABI and the latest kernel

Signed-off-by: UDel V2G Team <v2g.udel at gmail.com>
---
 recipes/ts7500/canctl_0.0.1.bb               |   29 ++
 recipes/ts7500/dioctl_0.0.1.bb               |   53 +++
 recipes/ts7500/dmxctl_0.0.1.bb               |   23 +
 recipes/ts7500/files/group                   |   22 +
 recipes/ts7500/files/linuxrc-fastboot        |  156 +++++++
 recipes/ts7500/files/linuxrc-nandmount       |  148 ++++++
 recipes/ts7500/files/linuxrc-sdmount         |  136 ++++++
 recipes/ts7500/files/linuxrc-sdroot          |  179 ++++++++
 recipes/ts7500/files/linuxrc-sdroot-readonly |  188 ++++++++
 recipes/ts7500/files/linuxrc-usbroot         |  163 +++++++
 recipes/ts7500/files/passwd                  |    9 +
 recipes/ts7500/files/ts-utils.patch          |   68 +++
 recipes/ts7500/files/ts7500.subr             |  633 ++++++++++++++++++++++++++
 recipes/ts7500/spictl_0.0.1.bb               |   26 +
 recipes/ts7500/ts-initrd_0.0.1.bb            |   46 ++
 recipes/ts7500/ts-utils_0.0.1.bb             |   60 +++
 recipes/ts7500/ts7500_0.0.1.bb               |    7 +
 17 files changed, 1946 insertions(+), 0 deletions(-)
 create mode 100644 recipes/ts7500/canctl_0.0.1.bb
 create mode 100644 recipes/ts7500/dioctl_0.0.1.bb
 create mode 100644 recipes/ts7500/dmxctl_0.0.1.bb
 create mode 100644 recipes/ts7500/files/group
 create mode 100644 recipes/ts7500/files/linuxrc-fastboot
 create mode 100644 recipes/ts7500/files/linuxrc-nandmount
 create mode 100644 recipes/ts7500/files/linuxrc-sdmount
 create mode 100644 recipes/ts7500/files/linuxrc-sdroot
 create mode 100644 recipes/ts7500/files/linuxrc-sdroot-readonly
 create mode 100644 recipes/ts7500/files/linuxrc-usbroot
 create mode 100644 recipes/ts7500/files/passwd
 create mode 100644 recipes/ts7500/files/ts-utils.patch
 create mode 100644 recipes/ts7500/files/ts7500.subr
 create mode 100644 recipes/ts7500/spictl_0.0.1.bb
 create mode 100644 recipes/ts7500/ts-initrd_0.0.1.bb
 create mode 100644 recipes/ts7500/ts-utils_0.0.1.bb
 create mode 100644 recipes/ts7500/ts7500_0.0.1.bb

diff --git a/recipes/ts7500/canctl_0.0.1.bb b/recipes/ts7500/canctl_0.0.1.bb
new file mode 100644
index 0000000..7bf8f15
--- /dev/null
+++ b/recipes/ts7500/canctl_0.0.1.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "TS 7500 canctl scripts"
+PR = "r0"
+DEPENDS = ""
+SRC_URI = " \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/canctl.tar.gz \
+"
+
+SRC_URI[md5sum] = "322da336b9e49aeb532bf2aa9e6d8f56"
+SRC_URI[sha256sum] = "91e22495b912e971630e87fb82620c6b1f0ce1c983f31e2fd1171b1e9ef6ff37"
+
+S = "${WORKDIR}/canctl"
+
+do_compile () {
+	   ${CC}${CFLAGS} -g -DOMIT_BOARDID -c -o canctl.o canctl.c 
+	   ${CC}${CFLAGS} -g -DOMIT_BOARDID -c -o sock.o sock.c
+	   ${CC}${CFLAGS} -g -DOMIT_BOARDID -c -o peekpoke.o peekpoke.c
+	   ${CC}${CFLAGS} -g -DOMIT_BOARDID -c -o ts.o ts.c
+	   ${CC}${CFLAGS} -g -DOMIT_BOARDID -c -o cavium.o cavium.c
+	   ${CC}${CFLAGS} -g -DOMIT_BOARDID -c -o prosoft.o prosoft.c
+	   ${CC}${CFLAGS} -g -DOMIT_BOARDID -c -o opt.o opt.c
+	   ${CC}${CFLAGS} -g -DOMIT_BOARDID ${LDFLAGS} -o canctl canctl.o sock.o peekpoke.o ts.o cavium.o prosoft.o opt.o
+}
+
+do_install () {
+	   install -d ${D}${base_sbindir}/
+	   install -m 0755 ${S}/canctl ${D}${base_sbindir}/
+}
+
+FILES_${PN} = "${base_sbindir}/canctl"
diff --git a/recipes/ts7500/dioctl_0.0.1.bb b/recipes/ts7500/dioctl_0.0.1.bb
new file mode 100644
index 0000000..4fa032e
--- /dev/null
+++ b/recipes/ts7500/dioctl_0.0.1.bb
@@ -0,0 +1,53 @@
+DESCRIPTION = "TS 7500 dioctl Scripts"
+PR = "r0"
+DEPENDS = ""
+SRC_URI = " \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/dioctl-latest.tar.gz \
+"
+
+SRC_URI[md5sum] = "4d93e6075913732dd4bcf2f71b2b967f"
+SRC_URI[sha256sum] = "f9e22cb5ae3cab49f702207bdcd67ef340ab18bb808777337453362494566d52"
+
+S = "${WORKDIR}/dioctl"
+
+do_compile () {
+	   # Compile the files
+	   ${CC}${CFLAGS} -g -Os -c -o dioctl.o dioctl.c
+	   ${CC}${CFLAGS} -g -Os -c -o diomain.o diomain.c
+	   ${CC}${CFLAGS} -g -Os -c -o dioserv.o dioserv.c
+	   ${CC}${CFLAGS} -g -Os -c -o lock.o lock.c
+	   ${CC}${CFLAGS} -g -Os -c -o ring.o ring.c
+	   ${CC}${CFLAGS} -g -Os -c -o server.o server.c
+	   ${CC}${CFLAGS} -g -Os -c -o sock.o sock.c
+	   ${CC}${CFLAGS} -g -Os -c -o watch.o watch.c
+	   ${CC}${CFLAGS} -g -Os -c -o waitq.o waitq.c
+	   ${CC}${CFLAGS} -g -Os -c -o file.o file.c
+	   ${CC}${CFLAGS} -g -Os -c -o opt.o opt.c	   
+	   ${CC}${CFLAGS} -g -Os -c -o peekpoke.o peekpoke.c
+	   ${CC}${CFLAGS} -g -Os -c -o ts.o ts.c
+	   ${CC}${CFLAGS} -g -Os -c -o ts75xx.o ts75xx.c
+	   ${CC}${CFLAGS} -g -Os -c -o ts4200.o ts4200.c
+	   ${CC}${CFLAGS} -g -Os -c -o ts4500.o ts4500.c
+	   ${CC}${CFLAGS} -g -Os -c -o ts4800.o ts4800.c
+	   ${CC}${CFLAGS} -g -Os -c -o dioname.o dioname.c
+	   ${CC}${CFLAGS} -g -Os -c -o cavium.o cavium.c	 
+	   
+	   # Now build the binaries
+	   ${CC}${CFLAGS} -g ${LDFLAGS} -o dioctl  dioctl.o diomain.o dioserv.o lock.o ring.o server.o sock.o watch.o waitq.o file.o opt.o peekpoke.o ts.o ts4500.o ts4200.o cavium.o dioname.o ts4800.o ts75xx.o
+	   ${AR} rcs libdioctl.a dioctl.o opt.o sock.o dioname.o
+	   ${CC}${CFLAGS} -shared ${LDFLAGS} -Wl,-soname,libdioctl.so.1 -o ${S}/libdioctl.so.1.0.1  dioctl.o opt.o sock.o dioname.o
+	   ${CC}${CFLAGS} ${LDFLAGS} diotest1.c -L${S} -ldioctl -o diotest1
+	   ${CC}${CFLAGS} ${LDFLAGS} diotest2.c -L${S} -ldioctl -lpthread -o diotest2
+	   ${CC}${CFLAGS} ${LDFLAGS} diotest3.c -L${S} -ldioctl -o diotest3
+}
+
+do_install () {
+	   install -d ${D}${base_sbindir}/
+	   install -m 0755 ${S}/dioctl ${D}${base_sbindir}/
+	   install -m 0755 ${S}/diotest1 ${D}${base_sbindir}/
+	   install -m 0755 ${S}/diotest2 ${D}${base_sbindir}/
+	   install -m 0755 ${S}/diotest3 ${D}${base_sbindir}/
+	   install -d ${D}${base_libdir}/
+	   install -m 0755 ${S}/libdioctl.a ${D}${base_libdir}/
+	   install -m 0755 ${S}/libdioctl.so.1.0.1 ${D}${base_libdir}/
+}
diff --git a/recipes/ts7500/dmxctl_0.0.1.bb b/recipes/ts7500/dmxctl_0.0.1.bb
new file mode 100644
index 0000000..8ee7c1f
--- /dev/null
+++ b/recipes/ts7500/dmxctl_0.0.1.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "TS 7500 dmxctl Utility Script"
+PR = "r0"
+DEPENDS = ""
+SRC_URI = " \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/dmxctl.tar.gz \
+"
+SRC_URI[md5sum] = "76c0c5b8b232f9c9da377d593b46fb6d"
+SRC_URI[sha256sum] = "2c39b8e7777ffed48ecf65cce0d3d9067ab4c9f7a647a7d2156e961964ca63e6"
+
+S = "${WORKDIR}/dmx"
+
+do_compile () {
+	   ${CC}${CFLAGS} -g -c -o file.o file.c
+	   ${CC}${CFLAGS} -g -c -o sock.o sock.c
+	   ${CC}${CFLAGS} -g -c -o opt.o opt.c 
+	   ${CC}${CFLAGS} -g -c -o dmxctl.o dmxctl.c
+	   ${CC}${CFLAGS} -g ${LDFLAGS} -o dmxctl dmxctl.o sock.o file.o opt.o
+}
+
+do_install () {
+	   install -d ${D}${base_sbindir}/
+	   install -m 0755 ${S}/dmxctl ${D}${base_sbindir}/
+}
diff --git a/recipes/ts7500/files/group b/recipes/ts7500/files/group
new file mode 100644
index 0000000..863273e
--- /dev/null
+++ b/recipes/ts7500/files/group
@@ -0,0 +1,22 @@
+bin:x:1:daemon
+console:x:21:
+daemon:x:2:
+ftp:x:49:
+kmem:x:9:
+lock:x:54:
+man:x:62:
+nobody:x:65533:
+nogroup:x:65534:nobody
+ntp:!:103:
+public:x:32:
+root:x:0:
+shadow:x:15:
+sshd:!:65:
+sys:x:3:
+trusted:x:42:
+tty:x:5:
+utmp:x:22:
+uucp:x:14:
+wheel:x:10:
+www:x:8:
+users:x:100:
diff --git a/recipes/ts7500/files/linuxrc-fastboot b/recipes/ts7500/files/linuxrc-fastboot
new file mode 100644
index 0000000..259793f
--- /dev/null
+++ b/recipes/ts7500/files/linuxrc-fastboot
@@ -0,0 +1,156 @@
+#!/bin/sh
+
+export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/mnt/root/bin:/mnt/root/sbin:/mnt/root
+mount -t proc proc /proc
+mount -t sysfs sysfs /sys
+mount -t devpts devpts /dev/pts
+  
+ifconfig lo 127.0.0.1 up
+route add -net 127.0.0.0 netmask 255.0.0.0 lo
+xuartctl --server
+
+# If the RESET switch is being pushed, 
+# set the CONSOLE to the DB9 port (/dev/pts/#)
+eval `ts7500ctl --getdio`
+let dio9="(dio >> 9) & 0x1"
+XCONSOLE=0
+
+if [ "$dio9" == "1" ]; then
+  export CONSOLE=/dev/ttyS0
+else
+  eval `xuartctl --server --port 0 </dev/null 2>&1`
+  if [ "$ttyname" == "" ]; then
+    export CONSOLE=/dev/ttyS0
+  else
+    export CONSOLE=$ttyname
+    XCONSOLE=1
+    # If the RESET switch is being pushed, wait until released
+    while [ "$dio9" == "0" ]; do
+    	eval `ts7500ctl --getdio`
+    	let dio9="(dio >> 9) & 0x1"
+    done
+  fi
+fi
+                
+let x=`devmem 0x79000040`
+sec=$((x / 100000))
+tenths=$((x % 100000 / 1000))
+export BOOTTIME=`printf "%d.%02d" $sec $tenths`
+
+setconsole $CONSOLE
+stty -F $CONSOLE ospeed 115200 sane > /dev/null 2>&1
+hostname ts7500                                   
+ts7500ctl --resetswitchon --setrng --getrtc --autofeed 2 -d
+ts7500ctl --loadfpga=ts7500_bitstream.vme.gz
+
+# Get the model # and boot device (NAND, mSD, SPI flash)
+eval `ts7500ctl --info`
+export bootdev model
+
+# If this is a 4500/8200, we need to set DIO-7 HIGH
+# (EN_USB_5V) for the USB's to work
+if [ "$model" = "0x4500" ]; then
+	eval `ts7500ctl --getdioreg`
+	let diodir="diodir | (1<<7)"
+	let dio_out="dio_out | (1<<7)"
+	ts7500ctl --setdio $dio_out --setdiodir $diodir
+fi
+
+# If there is a USB drive, mount it
+# If it has 'tsinit', execute it
+# (this allows software auto-update)                                
+devmem 0xc8000004 32 0x106
+devmem 0xcc000060 32 0x1
+let x=`devmem 0xcc000068`
+let y=`devmem 0xcc000064`
+x=$(((x | y) & 0x1))
+if [ "$x" -eq 1 ]; then
+  (
+        ts7500ctl --redledon
+	mount -t tmpfs tmpfs /lib/modules
+	tar -x -z -f /modules.tar.gz -C /
+	modprobe scsi_mod
+	modprobe sd_mod
+	modprobe usbcore
+	modprobe ehci_hcd
+	modprobe usb_storage
+	modprobe smsc95xx
+	modprobe ohci_hcd
+	umount /lib/modules
+	x=0
+	while [ "$x" -lt 150 -a ! -e /sys/block/sda ]; do
+		x=$((x+1))
+		sleep .1
+	done
+	mount -o ro /dev/sda1 /mnt/usbdev
+	if [ -x /mnt/usbdev/tsinit ]; then 
+		/mnt/usbdev/tsinit <$CONSOLE >$CONSOLE 2>&1
+	fi
+	umount /mnt/usbdev
+	ts7500ctl --redledoff
+  ) &
+fi
+
+(
+  mount -t tmpfs none /dev/shm
+  ifconfig eth0 192.168.0.50
+  telnetd
+  mount -t tmpfs tmpfs /tmp
+
+  # If booted from NAND, mount NAND's Linux partition
+  # If booted from mSD, mount mSD's Linux partition
+    
+  # Model: 7550, 7551, etc. (NOT 7500) -- these boards have NAND
+  if [ "$model" != "0x7500" ]; then
+    nandctl -X -z 131072 --nbdserver lun0:disc,lun0:part1,lun0:part2,lun0:part3,lun0:part4
+    nbd-client 127.0.0.1 7525 /dev/nbd0
+    nbd-client 127.0.0.1 7526 /dev/nbd1
+    nbd-client 127.0.0.1 7527 /dev/nbd2
+    nbd-client 127.0.0.1 7528 /dev/nbd3
+    nbd-client 127.0.0.1 7529 /dev/nbd4
+    if [ "$bootdev" == "0x0" ]; then
+      mount -oro /dev/nbd3 /mnt/root
+    fi
+  fi
+ 
+  # Model: 7500 or 7551, 7552, etc.  (NOT 7550) -- these boards have mSD
+  if [ "$model" != "0x7550" ]; then
+    eval `sdctl -z 65536 --nbdserver lun0:disc,lun0:part1,lun0:part2,lun0:part3,lun0:part4 2>&1`
+    if [ "$cardsize_sectors" == "0" ]; then
+      killall sdctl >> $CONSOLE 2>&1
+    else
+      nbd-client 127.0.0.1 7500 /dev/nbd5
+      nbd-client 127.0.0.1 7501 /dev/nbd6
+      nbd-client 127.0.0.1 7502 /dev/nbd7
+      nbd-client 127.0.0.1 7503 /dev/nbd8
+      nbd-client 127.0.0.1 7504 /dev/nbd9
+      if [ "$bootdev" == "0x1" ]; then
+        mount -oro /dev/nbd9 /mnt/root
+      fi
+    fi
+  fi
+
+  # Software auto-update  
+  if [ -x /mnt/root/tsinit ]; then
+    /mnt/root/tsinit $XCONSOLE < $CONSOLE > $CONSOLE 2>&1
+  fi
+  
+) </dev/null >/dev/null 2>&1 &
+
+(
+  export ENV=/shinit
+  exec setsid cttyhack /bin/sh -i
+) <$CONSOLE >$CONSOLE 2>&1
+wait
+
+if [ -e /mnt/root/linuxrc ]; then
+  killall busybox telnetd >/dev/null 2>&1
+
+  cd /mnt/root
+  #pivot_root . ./initrd
+  #./bin/mount -n --move ./initrd/sys ./sys
+  #./bin/mount -n --move ./initrd/proc ./proc
+  /bin/mount -t proc none /mnt/root/proc
+  /bin/mount -t sysfs none /mnt/root/sysfs 
+  exec /usr/sbin/chroot /mnt/root /linuxrc < .$CONSOLE > .$CONSOLE 2>&1
+fi
diff --git a/recipes/ts7500/files/linuxrc-nandmount b/recipes/ts7500/files/linuxrc-nandmount
new file mode 100644
index 0000000..d6f8ef4
--- /dev/null
+++ b/recipes/ts7500/files/linuxrc-nandmount
@@ -0,0 +1,148 @@
+#!/bin/sh
+
+export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/mnt/root/bin:/mnt/root/sbin:/mnt/root
+mount -t proc proc /proc
+mount -t sysfs sysfs /sys
+mount -t devpts devpts /dev/pts
+  
+ifconfig lo 127.0.0.1 up
+route add -net 127.0.0.0 netmask 255.0.0.0 lo
+xuartctl --server
+
+# If the RESET switch is being pushed, 
+# set the CONSOLE to the DB9 port (/dev/pts/#)
+eval `ts7500ctl --getdio`
+let dio9="(dio >> 9) & 0x1"
+XCONSOLE=0
+
+if [ "$dio9" == "1" ]; then
+  export CONSOLE=/dev/ttyS0
+else
+  eval `xuartctl --server --port 0 </dev/null 2>&1`
+  if [ "$ttyname" == "" ]; then
+    export CONSOLE=/dev/ttyS0
+  else
+    export CONSOLE=$ttyname
+    XCONSOLE=1
+    # If the RESET switch is being pushed, wait until released
+    while [ "$dio9" == "0" ]; do
+    	eval `ts7500ctl --getdio`
+    	let dio9="(dio >> 9) & 0x1"
+    done
+  fi
+fi
+                
+let x=`devmem 0x79000040`
+sec=$((x / 100000))
+tenths=$((x % 100000 / 1000))
+export BOOTTIME=`printf "%d.%02d" $sec $tenths`
+
+setconsole $CONSOLE
+stty -F $CONSOLE ospeed 115200 sane > /dev/null 2>&1
+hostname ts7500                                   
+ts7500ctl --resetswitchon --setrng --getrtc --autofeed 2 -d
+ts7500ctl --loadfpga=ts7500_bitstream.vme.gz
+
+# Get the model # and boot device (NAND, mSD, SPI flash)
+eval `ts7500ctl --info`
+export bootdev model
+
+# If this is a 4500/8200, we need to set DIO-7 HIGH
+# (EN_USB_5V) for the USB's to work
+if [ "$model" = "0x4500" ]; then
+	eval `ts7500ctl --getdioreg`
+	let diodir="diodir | (1<<7)"
+	let dio_out="dio_out | (1<<7)"
+	ts7500ctl --setdio $dio_out --setdiodir $diodir
+fi
+
+# If there is a USB drive, mount it
+# If it has 'tsinit', execute it
+# (this allows software auto-update)                                
+devmem 0xc8000004 32 0x106
+devmem 0xcc000060 32 0x1
+let x=`devmem 0xcc000068`
+let y=`devmem 0xcc000064`
+x=$(((x | y) & 0x1))
+if [ "$x" -eq 1 ]; then
+  (
+        ts7500ctl --redledon
+	mount -t tmpfs tmpfs /lib/modules
+	tar -x -z -f /modules.tar.gz -C /
+	modprobe scsi_mod
+	modprobe sd_mod
+	modprobe usbcore
+	modprobe ehci_hcd
+	modprobe usb_storage
+	modprobe smsc95xx
+	modprobe ohci_hcd
+	umount /lib/modules
+	x=0
+	while [ "$x" -lt 150 -a ! -e /sys/block/sda ]; do
+		x=$((x+1))
+		sleep .1
+	done
+	mount -o ro /dev/sda1 /mnt/usbdev
+	if [ -x /mnt/usbdev/tsinit ]; then 
+		/mnt/usbdev/tsinit <$CONSOLE >$CONSOLE 2>&1
+	fi
+	umount /mnt/usbdev
+	ts7500ctl --redledoff
+  ) &
+fi
+
+(
+  mount -t tmpfs none /dev/shm
+  ifconfig eth0 192.168.0.9
+  telnetd
+  mount -t tmpfs tmpfs /tmp
+
+  # If 7500, mount mSD; else mount NAND
+  if [ "$model" = "0x7500" ]; then
+    	eval `sdctl -z 65536 --nbdserver lun0:disc,lun0:part1,lun0:part2,lun0:part3,lun0:part4 2>&1`
+    	if [ "$cardsize_sectors" == "0" ]; then
+      		killall sdctl >> $CONSOLE 2>&1
+    	else
+      		nbd-client 127.0.0.1 7500 /dev/nbd5
+      		nbd-client 127.0.0.1 7501 /dev/nbd6
+      		nbd-client 127.0.0.1 7502 /dev/nbd7
+      		nbd-client 127.0.0.1 7503 /dev/nbd8
+      		nbd-client 127.0.0.1 7504 /dev/nbd9
+      		if [ "$bootdev" == "0x1" ]; then
+        		mount -oro /dev/nbd9 /mnt/root
+      		fi
+      	fi
+  else
+    	nandctl -X -z 131072 --nbdserver lun0:disc,lun0:part1,lun0:part2,lun0:part3,lun0:part4
+    	nbd-client 127.0.0.1 7525 /dev/nbd0
+    	nbd-client 127.0.0.1 7526 /dev/nbd1
+    	nbd-client 127.0.0.1 7527 /dev/nbd2
+    	nbd-client 127.0.0.1 7528 /dev/nbd3
+    	nbd-client 127.0.0.1 7529 /dev/nbd4
+      	mount -oro /dev/nbd3 /mnt/root
+  fi
+ 
+
+  # Software auto-update  
+  if [ -x /mnt/root/tsinit ]; then
+    /mnt/root/tsinit $XCONSOLE < $CONSOLE > $CONSOLE 2>&1
+  fi
+  
+) </dev/null >/dev/null 2>&1 &
+
+(
+  export ENV=/shinit
+  exec setsid cttyhack /bin/sh -i
+) <$CONSOLE >$CONSOLE 2>&1
+wait
+
+if [ -e /mnt/root/sbin/init ]; then
+  killall busybox telnetd >/dev/null 2>&1
+
+  cd /mnt/root
+  pivot_root . ./initrd
+  ./bin/mount -n --move ./initrd/sys ./sys
+  ./bin/mount -n --move ./initrd/proc ./proc
+  exec ./usr/sbin/chroot . ./sbin/init < .$CONSOLE > .$CONSOLE 2>&1
+fi
+
diff --git a/recipes/ts7500/files/linuxrc-sdmount b/recipes/ts7500/files/linuxrc-sdmount
new file mode 100644
index 0000000..f642320
--- /dev/null
+++ b/recipes/ts7500/files/linuxrc-sdmount
@@ -0,0 +1,136 @@
+#!/bin/sh
+
+export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/mnt/root/bin:/mnt/root/sbin:/mnt/root
+mount -t proc proc /proc
+mount -t sysfs sysfs /sys
+mount -t devpts devpts /dev/pts
+  
+ifconfig lo 127.0.0.1 up
+route add -net 127.0.0.0 netmask 255.0.0.0 lo
+xuartctl --server
+
+# If the RESET switch is being pushed, 
+# set the CONSOLE to the DB9 port (/dev/pts/#)
+eval `ts7500ctl --getdio`
+let dio9="(dio >> 9) & 0x1"
+XCONSOLE=0
+
+if [ "$dio9" == "1" ]; then
+  export CONSOLE=/dev/ttyS0
+else
+  eval `xuartctl --server --port 0 </dev/null 2>&1`
+  if [ "$ttyname" == "" ]; then
+    export CONSOLE=/dev/ttyS0
+  else
+    export CONSOLE=$ttyname
+    XCONSOLE=1
+    # If the RESET switch is being pushed, wait until released
+    while [ "$dio9" == "0" ]; do
+    	eval `ts7500ctl --getdio`
+    	let dio9="(dio >> 9) & 0x1"
+    done
+  fi
+fi
+                
+let x=`devmem 0x79000040`
+sec=$((x / 100000))
+tenths=$((x % 100000 / 1000))
+export BOOTTIME=`printf "%d.%02d" $sec $tenths`
+
+setconsole $CONSOLE
+stty -F $CONSOLE ospeed 115200 sane > /dev/null 2>&1
+hostname ts7500                                   
+ts7500ctl --resetswitchon --setrng --getrtc --autofeed 2 -d
+ts7500ctl --loadfpga=ts7500_bitstream.vme.gz
+
+# Get the model # and boot device (NAND, mSD, SPI flash)
+eval `ts7500ctl --info`
+export bootdev model
+
+# If this is a 4500/8200, we need to set DIO-7 HIGH
+# (EN_USB_5V) for the USB's to work
+if [ "$model" = "0x4500" ]; then
+	eval `ts7500ctl --getdioreg`
+	let diodir="diodir | (1<<7)"
+	let dio_out="dio_out | (1<<7)"
+	ts7500ctl --setdio $dio_out --setdiodir $diodir
+fi
+
+# If there is a USB drive, mount it
+# If it has 'tsinit', execute it
+# (this allows software auto-update)                                
+devmem 0xc8000004 32 0x106
+devmem 0xcc000060 32 0x1
+let x=`devmem 0xcc000068`
+let y=`devmem 0xcc000064`
+x=$(((x | y) & 0x1))
+if [ "$x" -eq 1 ]; then
+  (
+        ts7500ctl --redledon
+	mount -t tmpfs tmpfs /lib/modules
+	tar -x -z -f /modules.tar.gz -C /
+	modprobe scsi_mod
+	modprobe sd_mod
+	modprobe usbcore
+	modprobe ehci_hcd
+	modprobe usb_storage
+	modprobe smsc95xx
+	modprobe ohci_hcd
+	umount /lib/modules
+	x=0
+	while [ "$x" -lt 150 -a ! -e /sys/block/sda ]; do
+		x=$((x+1))
+		sleep .1
+	done
+	mount -o ro /dev/sda1 /mnt/usbdev
+	if [ -x /mnt/usbdev/tsinit ]; then 
+		/mnt/usbdev/tsinit <$CONSOLE >$CONSOLE 2>&1
+	fi
+	umount /mnt/usbdev
+	ts7500ctl --redledoff
+  ) &
+fi
+
+(
+  mount -t tmpfs none /dev/shm
+  ifconfig eth0 192.168.0.9
+  telnetd
+  mount -t tmpfs tmpfs /tmp
+
+  # Always mount mSD, if present
+  eval `sdctl -z 65536 --nbdserver lun0:disc,lun0:part1,lun0:part2,lun0:part3,lun0:part4 2>&1`
+  if [ "$cardsize_sectors" == "0" ]; then
+	killall sdctl >> $CONSOLE 2>&1
+  else
+ 	nbd-client 127.0.0.1 7500 /dev/nbd5
+ 	nbd-client 127.0.0.1 7501 /dev/nbd6
+ 	nbd-client 127.0.0.1 7502 /dev/nbd7
+ 	nbd-client 127.0.0.1 7503 /dev/nbd8
+ 	nbd-client 127.0.0.1 7504 /dev/nbd9
+      	mount -oro /dev/nbd9 /mnt/root
+  fi
+ 
+
+  # Software auto-update  
+  if [ -x /mnt/root/tsinit ]; then
+    /mnt/root/tsinit $XCONSOLE < $CONSOLE > $CONSOLE 2>&1
+  fi
+  
+) </dev/null >/dev/null 2>&1 &
+
+(
+  export ENV=/shinit
+  exec setsid cttyhack /bin/sh -i
+) <$CONSOLE >$CONSOLE 2>&1
+wait
+
+if [ -e /mnt/root/sbin/init ]; then
+  killall busybox telnetd >/dev/null 2>&1
+
+  cd /mnt/root
+  pivot_root . ./initrd
+  ./bin/mount -n --move ./initrd/sys ./sys
+  ./bin/mount -n --move ./initrd/proc ./proc
+  exec ./usr/sbin/chroot . ./sbin/init < .$CONSOLE > .$CONSOLE 2>&1
+fi
+
diff --git a/recipes/ts7500/files/linuxrc-sdroot b/recipes/ts7500/files/linuxrc-sdroot
new file mode 100644
index 0000000..be0e715
--- /dev/null
+++ b/recipes/ts7500/files/linuxrc-sdroot
@@ -0,0 +1,179 @@
+#!/bin/sh
+
+export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/mnt/root/bin:/mnt/root/sbin:/mnt/root
+export INIT=sbin/init.sysvinit
+mount -t proc proc /proc
+mount -t sysfs sysfs /sys
+  
+ifconfig lo 127.0.0.1 up
+route add -net 127.0.0.0 netmask 255.0.0.0 lo
+xuartctl --server
+
+# If the RESET switch is being pushed,
+# set the CONSOLE to the DB9 port (/dev/pts/#)
+eval `ts7500ctl --getdio`
+let dio9="(dio >> 9) & 0x1"
+XCONSOLE=0
+
+if [ "$dio9" == "1" ]; then
+  export CONSOLE=/dev/ttyS0
+else
+  eval `xuartctl --server --port 0 </dev/null 2>&1`
+  if [ "$ttyname" == "" ]; then
+    export CONSOLE=/dev/ttyS0
+  else
+    export CONSOLE=$ttyname
+    XCONSOLE=1
+    # If the RESET switch is being pushed, wait until released
+    while [ "$dio9" == "0" ]; do
+	    eval `ts7500ctl --getdio`
+	    let dio9="(dio >> 9) & 0x1"
+    done
+  fi
+fi
+                
+setconsole $CONSOLE
+stty -F $CONSOLE ospeed 115200 sane > /dev/null 2>&1
+stty -F /dev/ttyS1 ospeed 115200 sane > /dev/null 2>&1          
+hostname ts7500    
+echo "Loading initrd..." > $CONSOLE
+ts7500ctl --resetswitchon --setrng --getrtc --autofeed 2 -d > $CONSOLE
+ts7500ctl --loadfpga=/ts7500/ts7500_bitstream.vme.gz > $CONSOLE
+
+# Get the model # and boot device (NAND, mSD, SPI flash)
+eval `ts7500ctl --info`
+export bootdev model
+
+# If this is a 4500/8200, we need to set DIO-7 HIGH                             
+# (EN_USB_5V) for the USB's to work
+if [ "$model" = "0x4500" ]; then                                                
+	eval `ts7500ctl --getdioreg`
+	let diodir="diodir | (1<<7)"
+	let dio_out="dio_out | (1<<7)"
+	ts7500ctl --setdio $dio_out --setdiodir $diodir
+fi
+                                
+# If there is a USB drive, mount it
+# If it has 'tsinit', execute it
+# (this allows software auto-update)
+echo "Checking for a USB drive..." > $CONSOLE
+devmem 0xc8000004 32 0x106
+devmem 0xcc000060 32 0x1
+let x=`devmem 0xcc000068`
+let y=`devmem 0xcc000064`
+x=$(((x | y) & 0x1))
+if [ "$x" -eq 1 ]; then
+  (
+      echo "USB Drive found! Loading modules..." > $CONSOLE                               
+        ts7500ctl --redledon
+	mount -t tmpfs tmpfs /lib/modules
+	tar -x -z -f /modules.tar.gz -C /
+	modprobe scsi_mod
+	modprobe sd_mod
+	modprobe usbcore
+	modprobe ehci_hcd
+	modprobe usb_storage
+        modprobe smsc95xx                                  
+        modprobe ohci_hcd
+	umount /lib/modules
+	x=0
+	while [ "$x" -lt 150 -a ! -e /sys/block/sda ]; do
+		x=$((x+1))
+		sleep .1
+	done
+	mount -o ro /dev/sda1 /mnt/usbdev
+	if [ -x /mnt/usbdev/tsinit ]; then 
+	    echo "Loading auto init script from USB drive!" > $CONSOLE
+		/mnt/usbdev/tsinit <$CONSOLE >$CONSOLE 2>&1
+	fi
+	umount /mnt/usbdev
+	ts7500ctl --redledoff
+  ) &
+fi
+
+(
+  # If booted from NAND, mount NAND's Linux partition
+  # If booted from mSD, mount mSD's Linux partition
+    
+  # Model: 7550, 7551, etc. (NOT 7500) -- these boards have NAND
+  if [ "$model" != "0x7500" ]; then
+    nandctl -X -z 131072 --nbdserver lun0:disc,lun0:part1,lun0:part2,lun0:part3,lun0:part4
+    nbd-client 127.0.0.1 7525 /dev/nbd0
+    nbd-client 127.0.0.1 7526 /dev/nbd1
+    nbd-client 127.0.0.1 7527 /dev/nbd2
+    nbd-client 127.0.0.1 7528 /dev/nbd3
+    nbd-client 127.0.0.1 7529 /dev/nbd4
+    if [ "$bootdev" == "0x0" ]; then
+      mount -oro /dev/nbd3 /mnt/root
+    fi
+  fi
+  
+  # Model: 7500 or 7551, 7552, etc.  (NOT 7550) -- these boards have mSD
+  if [ "$model" != "0x7550" ]; then
+    echo "Mounting sdcard..." > $CONSOLE                               
+    eval `sdctl -z 65536 --nbdserver lun0:disc,lun0:part1,lun0:part2,lun0:part3,lun0:part4 > $CONSOLE 2>&1`
+    if [ "$cardsize_sectors" == "0" ]; then
+      killall sdctl >> $CONSOLE 2>&1
+    else
+      nbd-client 127.0.0.1 7500 /dev/nbd5
+      nbd-client 127.0.0.1 7501 /dev/nbd6
+      nbd-client 127.0.0.1 7502 /dev/nbd7
+      nbd-client 127.0.0.1 7503 /dev/nbd8
+      nbd-client 127.0.0.1 7504 /dev/nbd9
+      if [ "$bootdev" == "0x1" ]; then	  
+          mount -oro /dev/nbd8 /mnt/root
+	  mount -oro /dev/nbd9 /mnt/root/var
+      fi
+    fi
+  fi
+  echo "   > Done loading SD Card!" > $CONSOLE
+  # Software auto-update
+  if [ -x /mnt/root/tsinit ]; then
+    /mnt/root/tsinit $XCONSOLE < $CONSOLE > $CONSOLE 2>&1
+  fi
+  
+) </dev/null >/dev/null 2>&1 
+
+if [ -e /mnt/root/notrootfs -o -e /mnt/root/fastboot -o ! -e /mnt/root/$INIT  ]; then
+  if [ -e /mnt/root/fastboot ]; then
+    echo ">> File 'fastboot' found. Booting to initrd instead..." > $CONSOLE
+  else
+    echo ">> SD Card failed. Booting to initrd..." > $CONSOLE
+  fi
+
+  (                                                                             
+    mount -t devpts devpts /dev/pts
+    mount -t tmpfs none /dev/shm
+    ifconfig eth0 192.168.0.50
+    telnetd
+    mount -t tmpfs tmpfs /tmp
+  ) </dev/null >/dev/null 2>&1
+
+  (
+    let x=`devmem 0x79000040`
+    sec=$((x / 100000))
+    tenths=$((x % 100000 / 1000))
+    export BOOTTIME=`printf "%d.%02d" $sec $tenths`
+    export ENV=/shinit
+    exec setsid cttyhack /bin/sh -i
+  ) <$CONSOLE >$CONSOLE 2>&1
+  wait
+fi
+
+if [ -e /mnt/root/$INIT  ]; then
+  killall busybox telnetd >/dev/null 2>&1
+  #cd /mnt/root
+  #pivot_root . ./initrd
+  #./bin/mount -n --move ./initrd/sys ./sys
+  #./bin/mount -n --move ./initrd/proc ./proc
+  echo "Mounting filesystems read/write..." > $CONSOLE
+  /bin/mount -o remount,rw /mnt/root                                            
+  /bin/mount -o remount,rw /mnt/root/var  
+  echo "Done!" > $CONSOLE
+  /bin/mount -t proc none /mnt/root/proc
+  /bin/mount -t sysfs none /mnt/root/sys 
+  /bin/mount -o bind /dev /mnt/root/dev
+  /bin/mkdir /mnt/root/dev/pts
+  /bin/mount -o bind /dev/pts /mnt/root/dev/pts
+  exec /usr/sbin/chroot /mnt/root /$INIT < .$CONSOLE > .$CONSOLE 2>&1
+fi
diff --git a/recipes/ts7500/files/linuxrc-sdroot-readonly b/recipes/ts7500/files/linuxrc-sdroot-readonly
new file mode 100644
index 0000000..baa9f38
--- /dev/null
+++ b/recipes/ts7500/files/linuxrc-sdroot-readonly
@@ -0,0 +1,188 @@
+#!/bin/sh
+
+export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/mnt/root/bin:/mnt/root/sbin:/mnt/root
+export INIT=sbin/init.sysvinit
+mount -t proc proc /proc
+mount -t sysfs sysfs /sys
+  
+ifconfig lo 127.0.0.1 up
+route add -net 127.0.0.0 netmask 255.0.0.0 lo
+xuartctl --server
+
+# If the RESET switch is being pushed,
+# set the CONSOLE to the DB9 port (/dev/pts/#)
+eval `ts7500ctl --getdio`
+let dio9="(dio >> 9) & 0x1"
+XCONSOLE=0
+
+if [ "$dio9" == "1" ]; then
+  export CONSOLE=/dev/ttyS0
+else
+  eval `xuartctl --server --port 0 </dev/null 2>&1`
+  if [ "$ttyname" == "" ]; then
+    export CONSOLE=/dev/ttyS0
+  else
+    export CONSOLE=$ttyname
+    XCONSOLE=1
+    # If the RESET switch is being pushed, wait until released
+    while [ "$dio9" == "0" ]; do
+	    eval `ts7500ctl --getdio`
+	    let dio9="(dio >> 9) & 0x1"
+    done
+  fi
+fi
+                
+setconsole $CONSOLE
+stty -F $CONSOLE ospeed 115200 sane > /dev/null 2>&1
+stty -F /dev/ttyS1 ospeed 115200 sane > /dev/null 2>&1          
+hostname ts7500    
+echo "Loading initrd..." > $CONSOLE
+ts7500ctl --resetswitchon --setrng --getrtc --autofeed 2 -d > $CONSOLE
+ts7500ctl --loadfpga=/ts7500/ts7500_bitstream.vme.gz > $CONSOLE
+
+# Get the model # and boot device (NAND, mSD, SPI flash)
+eval `ts7500ctl --info`
+export bootdev model
+
+# If this is a 4500/8200, we need to set DIO-7 HIGH                             
+# (EN_USB_5V) for the USB's to work
+if [ "$model" = "0x4500" ]; then                                                
+	eval `ts7500ctl --getdioreg`
+	let diodir="diodir | (1<<7)"
+	let dio_out="dio_out | (1<<7)"
+	ts7500ctl --setdio $dio_out --setdiodir $diodir
+fi
+                                
+# If there is a USB drive, mount it
+# If it has 'tsinit', execute it
+# (this allows software auto-update)
+echo "Checking for a USB drive..." > $CONSOLE
+devmem 0xc8000004 32 0x106
+devmem 0xcc000060 32 0x1
+let x=`devmem 0xcc000068`
+let y=`devmem 0xcc000064`
+x=$(((x | y) & 0x1))
+if [ "$x" -eq 1 ]; then
+  (
+      echo "USB Drive found! Loading modules..." > $CONSOLE                               
+        ts7500ctl --redledon
+	mount -t tmpfs tmpfs /lib/modules
+	tar -x -z -f /modules.tar.gz -C /
+	modprobe scsi_mod
+	modprobe sd_mod
+	modprobe usbcore
+	modprobe ehci_hcd
+	modprobe usb_storage
+        modprobe smsc95xx                                  
+        modprobe ohci_hcd
+	umount /lib/modules
+	x=0
+	while [ "$x" -lt 150 -a ! -e /sys/block/sda ]; do
+		x=$((x+1))
+		sleep .1
+	done
+	mount -o ro /dev/sda1 /mnt/usbdev
+	if [ -x /mnt/usbdev/tsinit ]; then 
+	    echo "Loading auto init script from USB drive!" > $CONSOLE
+		/mnt/usbdev/tsinit <$CONSOLE >$CONSOLE 2>&1
+	fi
+	umount /mnt/usbdev
+	ts7500ctl --redledoff
+  ) &
+fi
+
+(
+  # If booted from NAND, mount NAND's Linux partition
+  # If booted from mSD, mount mSD's Linux partition
+    
+  # Model: 7550, 7551, etc. (NOT 7500) -- these boards have NAND
+  if [ "$model" != "0x7500" ]; then
+    nandctl -X -z 131072 --nbdserver lun0:disc,lun0:part1,lun0:part2,lun0:part3,lun0:part4
+    nbd-client 127.0.0.1 7525 /dev/nbd0
+    nbd-client 127.0.0.1 7526 /dev/nbd1
+    nbd-client 127.0.0.1 7527 /dev/nbd2
+    nbd-client 127.0.0.1 7528 /dev/nbd3
+    nbd-client 127.0.0.1 7529 /dev/nbd4
+    if [ "$bootdev" == "0x0" ]; then
+      mount -oro /dev/nbd3 /mnt/root
+    fi
+  fi
+  
+  # Model: 7500 or 7551, 7552, etc.  (NOT 7550) -- these boards have mSD
+  if [ "$model" != "0x7550" ]; then
+    echo "Mounting sdcard..." > $CONSOLE                               
+    eval `sdctl -z 65536 --nbdserver lun0:disc,lun0:part1,lun0:part2,lun0:part3,lun0:part4 > /dev/null 2>&1`
+    if [ "$cardsize_sectors" == "0" ]; then
+      killall sdctl >> $CONSOLE 2>&1
+    else
+      nbd-client 127.0.0.1 7500 /dev/nbd5
+      nbd-client 127.0.0.1 7501 /dev/nbd6
+      nbd-client 127.0.0.1 7502 /dev/nbd7
+      nbd-client 127.0.0.1 7503 /dev/nbd8
+      nbd-client 127.0.0.1 7504 /dev/nbd9
+      if [ "$bootdev" == "0x1" ]; then	 
+	  mkdir /mnt/root.ro /mnt/root.var
+          mount -oro /dev/nbd8 /mnt/root.ro
+	  mount -oro /dev/nbd9 /mnt/root.var
+      fi
+    fi
+  fi
+  
+  # Software auto-update
+  if [ -x /mnt/root.ro/tsinit ]; then
+    /mnt/root.ro/tsinit $XCONSOLE < $CONSOLE > $CONSOLE 2>&1
+  fi
+  
+) </dev/null >/dev/null 2>&1 
+
+if [ -e /mnt/root.ro/notrootfs -o -e /mnt/root.ro/fastboot -o ! -e /mnt/root.ro/$INIT ]; then
+  if [ -e /mnt/root.ro/fastboot ]; then
+    echo ">> File 'fastboot' found. Booting to initrd instead..." > $CONSOLE
+  else
+    echo ">> SD Card failed. Booting to initrd..." > $CONSOLE
+  fi
+
+  (                                                                             
+    mount -t devpts devpts /dev/pts
+    mount -t tmpfs none /dev/shm
+    ifconfig eth0 192.168.0.50
+    telnetd
+    mount -t tmpfs tmpfs /tmp
+  ) </dev/null >/dev/null 2>&1
+
+  (
+    let x=`devmem 0x79000040`
+    sec=$((x / 100000))
+    tenths=$((x % 100000 / 1000))
+    export BOOTTIME=`printf "%d.%02d" $sec $tenths`
+    export ENV=/shinit
+    exec setsid cttyhack /bin/sh -i
+  ) <$CONSOLE >$CONSOLE 2>&1
+  wait
+fi
+
+if [ -e /mnt/root.ro/$INIT ]; then
+  killall busybox telnetd >/dev/null 2>&1
+  #cd /mnt/root
+  #pivot_root . ./initrd
+  #./bin/mount -n --move ./initrd/sys ./sys
+  #./bin/mount -n --move ./initrd/proc ./proc
+  echo "Mounting unionfs..." > $CONSOLE
+  /bin/mkdir /mnt/root.ro /mnt/root.rw /mnt/root.var
+  /bin/mount -o remount,rw /mnt/root.var 
+  /bin/mount -t tmpfs root.rw /mnt/root.rw
+  /bin/mount -t unionfs -o dirs=/mnt/root.rw=rw:/mnt/root.var=rw:/mnt/root.ro=ro unionfs /mnt/root/
+  /bin/chmod 755 /mnt/root
+  /bin/mkdir /mnt/root/ro /mnt/root/rw /mnt/root/vardir
+  /bin/mount --move /mnt/root.ro /mnt/root/ro
+  /bin/mount --move /mnt/root.rw /mnt/root/rw
+  /bin/mount --move /mnt/root.var /mnt/root/vardir
+  echo "Done mounting unionfs!" > $CONSOLE
+
+  /bin/mount -t proc none /mnt/root/proc
+  /bin/mount -t sysfs none /mnt/root/sys 
+  /bin/mount -o bind /dev /mnt/root/dev
+  /bin/mkdir /mnt/root/dev/pts
+  /bin/mount -o bind /dev/pts /mnt/root/dev/pts
+  exec /usr/sbin/chroot /mnt/root /$INIT < .$CONSOLE > .$CONSOLE 2>&1
+fi
diff --git a/recipes/ts7500/files/linuxrc-usbroot b/recipes/ts7500/files/linuxrc-usbroot
new file mode 100644
index 0000000..c210884
--- /dev/null
+++ b/recipes/ts7500/files/linuxrc-usbroot
@@ -0,0 +1,163 @@
+#!/bin/sh
+
+export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/mnt/root/bin:/mnt/root/sbin:/mnt/root
+mount -t proc proc /proc
+mount -t sysfs sysfs /sys
+  
+ifconfig lo 127.0.0.1 up
+route add -net 127.0.0.0 netmask 255.0.0.0 lo
+xuartctl --server
+
+eval `ts7500ctl --getdio`
+let dio9="(dio >> 9) & 0x1"
+XCONSOLE=0
+
+# If the RESET switch is being pushed,
+# set the CONSOLE to the DB9 port (/dev/pts/#)
+if [ "$dio9" == "1" ]; then
+  export CONSOLE=/dev/ttyS0
+else
+  eval `xuartctl --server --port 0 </dev/null 2>&1`
+  if [ "$ttyname" == "" ]; then
+    export CONSOLE=/dev/ttyS0
+  else
+    export CONSOLE=$ttyname
+    XCONSOLE=1
+    # If the RESET switch is being pushed, wait until released
+    while [ "$dio9" == "0" ]; do
+	  eval `ts7500ctl --getdio`
+	  let dio9="(dio >> 9) & 0x1"
+    done
+  fi
+fi
+                
+setconsole $CONSOLE
+stty -F $CONSOLE ospeed 115200 sane > /dev/null 2>&1
+hostname ts7500                                   
+ts7500ctl --resetswitchon --setrng --getrtc --autofeed 2 -d
+ts7500ctl --loadfpga=ts7500_bitstream.vme.gz
+
+# Get the model # and boot device (NAND, mSD, SPI flash)
+eval `ts7500ctl --info`
+export bootdev model
+
+# If this is a 4500/8200, we need to set DIO-7 HIGH
+# (EN_USB_5V) for the USB's to work
+if [ "$model" = "0x4500" ]; then
+	eval `ts7500ctl --getdioreg`
+	let diodir="diodir | (1<<7)"
+	let dio_out="dio_out | (1<<7)"
+	ts500ctl --setdio $dio_out --setdiodir $diodir
+fi
+ 
+# If there is a USB drive, mount it
+# If it has 'tsinit', execute it
+# (this allows software auto-update)                                
+devmem 0xc8000004 32 0x106
+devmem 0xcc000060 32 0x1
+let x=`devmem 0xcc000068`
+let y=`devmem 0xcc000064`
+x=$(((x | y) & 0x1))
+if [ "$x" -eq 1 ]; then
+  (
+  	echo "Booting from USB device ... " > $CONSOLE
+        ts7500ctl --redledon
+	mount -t tmpfs tmpfs /lib/modules
+	tar -x -z -f /modules.tar.gz -C /
+	modprobe scsi_mod
+	modprobe sd_mod
+	modprobe usbcore
+	modprobe ehci_hcd
+	modprobe usb_storage
+        modprobe smsc95xx                                  
+        modprobe ohci_hcd
+	umount /lib/modules
+	x=0
+	while [ "$x" -lt 150 -a ! -e /sys/block/sda ]; do
+		x=$((x+1))
+		sleep .1
+	done
+	mount -o ro /dev/sda4 /mnt/root
+
+	ts7500ctl --redledoff
+  ) 
+fi
+
+(
+  # If booted from NAND, mount NAND's Linux partition
+  # If booted from mSD, mount mSD's Linux partition
+    
+  # Model: 7550, 7551, etc. (NOT 7500) -- these boards have NAND
+  if [ "$model" != "0x7500" ]; then
+    nandctl -X -z 131072 --nbdserver lun0:disc,lun0:part1,lun0:part2,lun0:part3,lun0:part4
+    nbd-client 127.0.0.1 7525 /dev/nbd0
+    nbd-client 127.0.0.1 7526 /dev/nbd1
+    nbd-client 127.0.0.1 7527 /dev/nbd2
+    nbd-client 127.0.0.1 7528 /dev/nbd3
+    nbd-client 127.0.0.1 7529 /dev/nbd4
+    if [ "$bootdev" == "0x0" ]; then
+      mkdir /mnt/nand_root
+      mount -oro /dev/nbd3 /mnt/nand_root
+    fi
+  fi
+  
+  # Model: 7500 or 7551, 7552, etc.  (NOT 7550) -- these boards have mSD 
+  if [ "$model" != "0x7550" ]; then
+    eval `sdctl -z 65536 --nbdserver lun0:disc,lun0:part1,lun0:part2,lun0:part3,lun0:part4 2>&1`
+    if [ "$cardsize_sectors" == "0" ]; then
+      killall sdctl >> $CONSOLE 2>&1
+    else
+      nbd-client 127.0.0.1 7500 /dev/nbd5
+      nbd-client 127.0.0.1 7501 /dev/nbd6
+      nbd-client 127.0.0.1 7502 /dev/nbd7
+      nbd-client 127.0.0.1 7503 /dev/nbd8
+      nbd-client 127.0.0.1 7504 /dev/nbd9
+      if [ "$bootdev" == "0x1" ]; then
+        mount /mnt/sd_root 
+        mount -oro /dev/nbd9 /mnt/sd_root
+      fi
+    fi
+  fi
+  
+  # Software auto-update
+  if [ -x /mnt/root/tsinit ]; then
+    /mnt/root/tsinit $XCONSOLE < $CONSOLE > $CONSOLE 2>&1
+  fi
+  
+) </dev/null >/dev/null 2>&1 
+
+if [ -e /mnt/root/notrootfs -o -e /mnt/root/fastboot -o ! -e /mnt/root/sbin/init ]; then
+  if [ -e /mnt/root/fastboot ]; then
+    echo ">> File 'fastboot' found. Booting to initrd instead..." > $CONSOLE
+  else
+    echo ">> USB Drive failed. Booting to initrd..." > $CONSOLE
+  fi
+
+  (                                                                             
+    mount -t devpts devpts /dev/pts
+    mount -t tmpfs none /dev/shm
+    ifconfig eth0 192.168.0.50
+    telnetd
+    mount -t tmpfs tmpfs /tmp
+  ) </dev/null >/dev/null 2>&1
+
+  (
+    let x=`devmem 0x79000040`
+    sec=$((x / 100000))
+    tenths=$((x % 100000 / 1000))
+    export BOOTTIME=`printf "%d.%02d" $sec $tenths`
+    export ENV=/shinit
+    exec setsid cttyhack /bin/sh -i
+  ) <$CONSOLE >$CONSOLE 2>&1
+  wait
+fi
+
+if [ -e /mnt/root/sbin/init ]; then
+  killall busybox telnetd 
+  cd /mnt/root
+  pivot_root . ./initrd
+  ./bin/mount -n --move ./initrd/sys ./sys
+  ./bin/mount -n --move ./initrd/proc ./proc
+  exec ./usr/sbin/chroot . ./sbin/init < .$CONSOLE > .$CONSOLE 2>&1
+fi
+
diff --git a/recipes/ts7500/files/passwd b/recipes/ts7500/files/passwd
new file mode 100644
index 0000000..0891d68
--- /dev/null
+++ b/recipes/ts7500/files/passwd
@@ -0,0 +1,9 @@
+root::0:0:root:/home/root:/bin/sh
+daemon:*:1:1:daemon:/usr/sbin:/bin/sh
+bin:*:2:2:bin:/bin:/bin/sh
+sys:*:3:3:sys:/dev:/bin/sh
+sync:*:4:65534:sync:/bin:/bin/sync
+man:*:6:12:man:/var/cache/man:/bin/sh
+proxy:*:13:13:proxy:/bin:/bin/sh
+nobody:*:65534:65534:nobody:/nonexistent:/bin/sh
+v2g::500:500:UD-V2G GIV-User,,,:/home/v2g:/bin/sh
diff --git a/recipes/ts7500/files/ts-utils.patch b/recipes/ts7500/files/ts-utils.patch
new file mode 100644
index 0000000..b337a7d
--- /dev/null
+++ b/recipes/ts7500/files/ts-utils.patch
@@ -0,0 +1,68 @@
+diff -rupN old/jed2vme.c new/jed2vme.c
+--- old/jed2vme.c	2011-03-09 11:34:07.000000000 -0500
++++ new/jed2vme.c	2011-03-09 11:34:38.000000000 -0500
+@@ -18,6 +18,7 @@
+  */
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <string.h>
+ #include <assert.h>
+ 
+ static unsigned char preamble[] = {
+diff -rupN old/sdctl.c new/sdctl.c
+--- old/sdctl.c	2011-03-09 11:51:29.000000000 -0500
++++ new/sdctl.c	2011-03-09 11:34:10.000000000 -0500
+@@ -16,6 +16,7 @@
+  *  WITHOUT THE PRIOR WRITTEN CONSENT OF TECHNOLOGIC SYSTEMS  COULD
+  *  SUBJECT THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
+  */
++#include <errno.h>
+ #include <assert.h>
+ #include <string.h>
+ #include <fcntl.h>
+@@ -82,7 +83,11 @@ static volatile unsigned int *cvspiregs,
+ #define MEM_GETPGD       _IOR(0xaa, 1, unsigned long)
+ #ifndef PPC
+ #define __NR_cacheflush __ARM_NR_cacheflush
+-static inline _syscall3(int,cacheflush,unsigned long,beg,unsigned long,end,int,flags);
++// static inline _syscall3(int,cacheflush,unsigned long,beg,unsigned long,end,int,flags);
++static inline int cacheflush (unsigned long beg, unsigned long end, int flags)
++{
++  return syscall(__NR_cacheflush, beg, end, flags);
++}
+ #endif
+ 
+ static int devmem, devkmem;
+diff -rupN old/spiflashctl.c new/spiflashctl.c
+--- old/spiflashctl.c	2011-03-09 11:34:07.000000000 -0500
++++ new/spiflashctl.c	2011-03-09 11:37:00.000000000 -0500
+@@ -17,6 +17,7 @@
+  *  SUBJECT THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
+  */
+ 
++#include <errno.h>
+ #include <assert.h>
+ #include <string.h>
+ #include <fcntl.h>
+diff -rupN old/ts7500ctl.c new/ts7500ctl.c
+--- old/ts7500ctl.c	2011-03-09 11:52:15.000000000 -0500
++++ new/ts7500ctl.c	2011-03-09 11:34:10.000000000 -0500
+@@ -16,6 +16,7 @@
+  *  WITHOUT THE PRIOR WRITTEN CONSENT OF TECHNOLOGIC SYSTEMS  COULD
+  *  SUBJECT THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
+  */
++#include <errno.h>
+ #include <assert.h>
+ #include <string.h>
+ #include <fcntl.h>
+diff -rupN old/xuartctl.c new/xuartctl.c
+--- old/xuartctl.c	2011-03-09 11:34:07.000000000 -0500
++++ new/xuartctl.c	2011-03-09 11:40:47.000000000 -0500
+@@ -18,6 +18,7 @@
+  * CRIMINAL AND CIVIL LIABILITY.
+  */
+ 
++#include <limits.h>
+ #include <sys/socket.h>
+ #include <stdio.h>
+ #include <stdlib.h>
diff --git a/recipes/ts7500/files/ts7500.subr b/recipes/ts7500/files/ts7500.subr
new file mode 100644
index 0000000..b2ee180
--- /dev/null
+++ b/recipes/ts7500/files/ts7500.subr
@@ -0,0 +1,633 @@
+warn1="WARNING: do NOT power-down while saving/copying!"
+img="[kernel+initrd]"
+
+# ----------------------------------------------------------
+# Display the given number in binary format
+printbin() {
+# NOTE: assume only 7 digits, since getdio() only seem to give 7
+#       will only print the first 7 digits either way
+
+	digits="1 2 3 4 5 6 7"
+	# Loop thru the given hex digits
+	for digit in $digits; do
+		num=`echo $1 | cut -c${digit}`
+		if 	[ "$num" = "a" ]; then num="10"
+		elif 	[ "$num" = "b" ]; then num="11"
+		elif 	[ "$num" = "c" ]; then num="12"
+		elif 	[ "$num" = "d" ]; then num="13"
+		elif 	[ "$num" = "e" ]; then num="14"
+		elif 	[ "$num" = "f" ]; then num="15"
+		fi
+
+		# Loop thru the 4 binary digits:
+		# AND with 0x8 to get the MSB, display it
+		# SHIFT left, do the next digit
+		loops="1 2 3 4 "
+		for loop in $loops; do
+			bin=$((num&0x8));
+			if [ "$bin" = "0" ]; then 
+				echo -n "0"
+			else 
+				echo -n "1" 
+			fi
+			num=$((num<<1))
+		done
+		echo -n " "	
+	done	
+	# echo	
+}
+
+
+cvtime() {
+	local x sec tenths
+	let x=`devmem 0x79000040`
+	sec=$((x / 100000))
+	tenths=$((x % 100000 / 1000))
+	printf "%d.%02d" $sec $tenths
+	
+# Return the value read from mem
+return $x
+}
+
+
+usbload() {
+	mount -t tmpfs tmpfs /lib/modules
+	tar -x -z -f /modules.tar.gz -C /
+	modprobe scsi_mod
+	modprobe sd_mod
+	modprobe usbcore
+	modprobe ehci_hcd
+	modprobe usb_storage
+	umount /lib/modules
+}
+
+
+save() {
+	# Determine the boot device used:
+	# 	media		dev
+	#--------------------
+	# NAND/SPI-0	0 (NOTE: must determine model also!)
+	# mSD			1
+	# SPI-1			2
+	#--------------------
+	# 
+	local dev=`ts7500ctl -i | grep bootdev | cut -d= -f2 | cut -c3-`
+	if [ $dev -eq 0 ]; then
+		# Determine the model
+		local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+		if [ $model -eq 7500 ]; then
+			flashsave
+		else
+			nandsave
+		fi
+	elif [ $dev -eq 1 ]; then
+		sdsave
+	elif [ $dev -eq 2 ]; then
+		flash1save
+	fi
+}
+
+
+sdsave() {
+	echo "$warn1"
+	echo -n "Saving [initrd] to mSD ... "
+	mount -o remount,ro /
+	sdctl -W 32 -k part3 -z 65536 -i /dev/ram0 >/dev/null 2>&1
+	mount -o remount,rw /
+	echo "done"
+}
+
+
+nandsave() {
+	echo "$warn1"
+	echo -n "Saving [initrd] to NAND ... "
+	mount -o remount,ro /
+	nandctl -W 16 -k part2 -z 131072 -X -i /dev/ram0 >/dev/null 2>&1
+	mount -o remount,rw /
+	echo "done"
+}
+
+
+flashsave() {
+# Determine the model
+# If this is NOT a 7500, skip
+local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+if [ "$model" -ne 7500 ]; then
+	echo "TS-${model} does NOT have ON-board FLASH -- ABORTING"
+	echo "('flash1save' = save to OFF-board FLASH)"
+	echo "('nandsave'   = save to NAND)"
+	return
+fi
+
+	echo "$warn1"
+	echo -n "Saving [initrd] to ON-board FLASH ... "
+	mount -o remount,ro /
+	spiflashctl -W 32 -k part2 -z 65536 -i /dev/ram0 > /dev/null 2>&1
+	mount -o remount,rw /
+	echo "done"
+}
+
+
+flash1save() {
+	echo "$warn1"
+	echo -n "Saving [initrd] to OFF-board FLASH ... "
+	mount -o remount,ro /
+	spiflashctl -l 1 -W 32 -k part2 -z 65536 -i /dev/ram0 > /dev/null 2>&1
+	mount -o remount,rw /
+	echo "done"
+}
+
+
+flashallsave() {
+	flashsave
+	flash1save
+}
+	
+
+# ----------------------------------------------------------
+# Copy from micro SD
+sd2flash() {
+# Determine the model
+# If this is a 7550 or 7551, skip (NO micro SD on these boards)
+local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+if [ "$model" -eq 7550 -o $model -eq 7551 ]; then
+	echo "TS-${model} does NOT have micro SD -- ABORTING"
+	echo "(Try: flash2flash, nand2flash)"
+	return
+fi
+
+	echo "$warn1"
+	echo -n "Copying $img mSD --> ON-board FLASH ..."
+	sdctl -R 32 -z 65536 -k part2 > /tmp/image 2>/dev/null
+	spiflashctl -W 32 -z 65536 -k part1 -i /tmp/image > /dev/null 2>&1
+	rm /tmp/image
+	wait
+	
+	sdctl -R 32 -z 65536 -k part3 > /tmp/image 2>/dev/null
+	spiflashctl -W 32 -z 65536 -k part2 -i /tmp/image > /dev/null 2>&1
+	rm /tmp/image
+	echo "done"
+}
+
+sd2flash1() {
+# Determine the model
+# If this is a 7550 or 7551, skip (NO micro SD on these boards)
+local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+if [ "$model" -eq 7550 -o $model -eq 7551 ]; then
+	echo "TS-${model} does NOT have micro SD -- ABORTING"
+	echo "(Try: flash2flash, nand2flash)"
+	return
+fi
+
+	echo "$warn1"
+	echo -n "Copying $img mSD --> OFF-board FLASH ..."
+	sdctl -R 32 -z 65536 -k part2 > /tmp/image 2>/dev/null
+	spiflashctl -l 1 -W 32 -z 65536 -k part1 -i /tmp/image > /dev/null 2>&1
+	rm /tmp/image
+	wait
+	
+	sdctl -R 32 -z 65536 -k part3 > /tmp/image 2>/dev/null
+	spiflashctl -l 1 -W 32 -z 65536 -k part2 -i /tmp/image > /dev/null 2>&1
+	rm /tmp/image
+	echo "done"
+}
+
+
+sd2nand() {
+# Determine the model
+# If this is a 7550 or 7551, skip (NO micro SD on these boards)
+local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+if [ "$model" -eq 7550 -o "$model" -eq 7551 ]; then
+	echo "TS-${model} does NOT have micro SD -- ABORTING"
+	echo "(Try: flash2nand)"
+	return
+fi
+
+	echo "$warn1"
+	echo -n "Copying $img mSD --> NAND ... "
+	sdctl -R 32 -z 65536 -k part2 > /tmp/image 2>/dev/null
+	nandctl -W 16 -z 131072 -k part1 -X -i /tmp/image > /dev/null 2>&1
+	# sdctl -R 4095 -z 512 -k kernel > /tmp/image 2>/dev/null
+	# nandctl -W 4095 -z 512 -k kernel -X -i /tmp/image > /dev/null 2>&1
+	rm /tmp/image
+	wait
+	
+	sdctl -R 32 -z 65536 -k part3 > /tmp/image 2>/dev/null
+	nandctl -W 16 -z 131072 -k part2 -X -i /tmp/image >/dev/null 2>&1
+	rm /tmp/image
+	echo "done"
+}
+
+# ----------------------------------------------------------
+# Copy from FLASH
+flash2flash() {
+# Determine the model
+# If this is NOT a 7500, skip (only the 7500 has ON-board FLASH)
+local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+if [ "$model" -ne 7500 ]; then
+	echo "TS-${model} does NOT have ON-board FLASH -- ABORTING"
+	echo "(Try: sd2flash, nand2flash)"
+	return
+fi
+
+	# Determine the boot media, so we can copy from there
+	local dev=`ts7500ctl -i | grep bootdev | cut -d= -f2 | cut -c3-`
+	echo "$warn1"
+	if [ $dev -eq 0 ]; then
+		echo -n "Copying $img ON-board FLASH --> OFF-board FLASH ... "
+		spiflashctl -R 64 -z 65536 > /tmp/image 2>/dev/null
+		spiflashctl -l 1 -W 64 -z 65536 -i /tmp/image > /dev/null 2>&1
+	elif [ $dev -eq 2 ]; then
+		echo -n "Copying $img OFF-board FLASH --> ON-board FLASH ... "
+		spiflashctl -l 1 -R 64 -z 65536 > /tmp/image 2>/dev/null
+		spiflashctl -W 64 -z 65536 -i /tmp/image > /dev/null 2>&1
+	fi
+
+	rm /tmp/image
+	echo "done"
+}
+
+
+flash2sd() {
+# Determine the model
+# If this is a 7550 or 7551, skip (NO micro SD on these boards)
+local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+if [ "$model" -eq 7550 -o $model -eq 7551 ]; then
+	echo "TS-${model} does NOT have micro SD -- ABORTING"
+	return
+fi
+
+	# Determine the boot media, so we can copy from there
+	local dev=`ts7500ctl -i | grep bootdev | cut -d= -f2 | cut -c3-`
+	# Assume FLASH-0
+	local lun=""
+	local flash="ON-board"
+	if [ $dev -eq 2 ]; then
+		lun="-l 1"
+		flash="OFF-board"
+	fi
+	
+	echo "$warn1"
+	echo -n "Copying $img $flash FLASH --> mSD ... "
+	spiflashctl ${lun} -R 32 -z 65536 -k part1 > /tmp/image 2>/dev/null
+	sdctl -W 32 -z 65536 -k part2 -i /tmp/image >/dev/null 2>&1
+	rm /tmp/image
+	wait
+	
+	spiflashctl ${lun} -R 32 -z 65536 -k part2 > /tmp/image 2>/dev/null
+	sdctl -W 32 -z 65536 -k part3 -i /tmp/image >/dev/null 2>&1
+	rm /tmp/image
+	echo "done"
+}
+
+
+flash2nand() {
+# Determine the model
+# If this is a 7500, skip (NO NAND on this board)
+local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+if [ "$model" -eq 7500 ]; then
+	echo "TS-${model} does NOT have NAND -- ABORTING"
+	echo "(Try: flash2flash, flash2sd)"
+	return
+fi
+
+	echo "$warn1"
+	echo -n "Copying $img OFF-board FLASH --> NAND ... "
+	spiflashctl -l 1 -R 64 -z 65536 > /tmp/image 2>/dev/null
+	nandctl -W 32 -z 131072 -X -i /tmp/image > /dev/null 2>&1
+	rm /tmp/image
+	echo "done"
+}
+
+
+# ----------------------------------------------------------
+# Copy from NAND
+nand2flash() {
+# Determine the model
+# If this is a 7500, skip (NO NAND on this board)
+local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+if [ "$model" -eq 7500 ]; then
+	echo "TS-${model} does NOT have NAND -- ABORTING"
+	echo "(Try: flash2flash, sd2flash)"
+	return
+fi
+
+	echo "$warn1"
+	echo "Copying $img NAND --> OFF-board FLASH ... "
+	nandctl -R 32 -z 131072 -X > /tmp/image 2>/dev/null
+	spiflashctl -l 1 -W 64 -z 65536 -i /tmp/image > /dev/null 2>&1
+	rm /tmp/image
+	echo "done"
+}
+
+
+nand2sd() {
+# Determine the model
+# If this is a 7550 or 7551, skip (NO micro SD on these boards)
+local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+if [ "$model" -eq 7550 -o "$model" -eq 7551 ]; then
+	echo "TS-${model} does NOT have micro SD -- ABORTING"
+	echo "(Try: nand2flash)"
+	return
+fi
+
+	echo "$warn1"
+	echo "Copying $img NAND --> mSD ... "
+	nandctl -R 16 -z 131072 -k part1 -X > /tmp/image 2>/dev/null
+	sdctl -W 32 -z 65536 -k part2 -i /tmp/image >/dev/null 2>&1
+	rm /tmp/image
+	wait
+	
+	nandctl -R 16 -z 131072 -k part2 -X > /tmp/image 2>/dev/null
+	sdctl -W 32 -z 65536 -k part3 -i /tmp/image >/dev/null 2>&1
+	rm /tmp/image
+	echo "done"
+}
+
+
+recover() {
+# 'Un-brick" a board
+# [try to] copy the kernel/initrd images from the boot device to ...
+
+# Scenarios:
+# Model	Boot		Recover
+#==============================
+# 7500	FLASH-1	(2)	FLASH-0/mSD
+# 7500	FLASH-0	(0)	mSD
+# 7500	mSD		(1)	FLASH-0
+# 7550	FLASH-1	(2)	NAND
+# 7550	NAND	(0)	-----
+# 7551	FLASH-1	(2)	NAND
+# 7551	NAND	(0)	-----
+# 7552	FLASH-1	(2)	NAND/mSD
+# 7552	mSD		(1)	NAND
+# 7552	NAND	(0)	mSD
+# 7553	FLASH-1	(2)	NAND/mSD
+# 7553	mSD		(1)	NAND
+# 7553	NAND	(0)	mSD
+
+# 	media		dev
+#--------------------
+# NAND/FLASH-0	0 (NOTE: must determine model also!)
+# mSD		1
+# FLASH-1	2
+#--------------------
+# 
+	# Determine the boot device and model
+	local dev=`ts7500ctl -i | grep bootdev | cut -d= -f2 | cut -c3-`
+	local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+	local device
+	if [ $dev -eq 0 ]; then
+		if [ $model -eq 7500 ]; then
+			device="ONboard FLASH"
+		else
+			device="NAND"
+		fi
+	elif [ $dev -eq 1 ]; then
+		device="micro SD"
+	elif [ $dev -eq 2 ]; then
+		device="OFFboard FLASH"
+	fi
+	
+	echo "(TS-${model}, booted from ${device}) "
+
+	# Determine what to recover
+	# 7500
+	if [ $model -eq 7500 ]; then
+		# from FLASH-1 --> FLASH-0/mSD
+		if [ $dev -eq 2 ]; then
+			echo -n "Recover FLASH-0 ? --> [y/n]: "
+			read ans
+			if [ "$ans" = "y" ]; then
+				flash2flash
+			fi
+			echo -n "Recover micro SD ? --> [y/n]: "
+			read ans
+			if [ "$ans" = "y" ]; then
+				flash2sd
+			fi
+		# from FLASH-0 --> mSD
+		elif [ $dev -eq 0 ]; then
+			echo -n "Recover micro SD ? --> [y/n]: "
+			read ans
+			if [ "$ans" = "y" ]; then
+				flash2sd
+			fi
+		# from mSD --> FLASH-0
+		elif [ $dev -eq 1 ]; then
+			echo -n "Recover FLASH-0 ? --> [y/n]: "
+			read ans
+			if [ "$ans" = "y" ]; then
+				sd2flash
+			fi
+		fi
+	# 7550/7551
+	elif [ $model -eq 7550 -o $model -eq 7551 ]; then
+		# from FLASH-1 --> NAND
+		if [ $dev -eq 2 ]; then
+			echo -n "Recover NAND ? --> [y/n]: "
+			read ans
+			if [ "$ans" = "y" ]; then
+				flash2nand
+			fi
+		# from NAND --> nothing to recover!
+		elif [ $dev -eq 0 ]; then
+			echo "NOTHING to recover -- try \"nand2flash\""
+		fi
+	# 7552/7553
+	elif [ $model -eq 7552 -o $model -eq 7553 ]; then
+		# from FLASH-1 --> NAND/mSD
+		if [ $dev -eq 2 ]; then
+			echo -n "Recover NAND ? --> [y/n]: "
+			read ans
+			if [ "$ans" = "y" ]; then
+				flash2nand
+			fi
+			echo -n "Recover micro SD ? --> [y/n]: "
+			read ans
+			if [ "$ans" = "y" ]; then
+				flash2sd
+			fi
+		# from mSD --> NAND
+		elif [ $dev -eq 1 ]; then
+			echo -n "Recover NAND ? --> enter [y/n]: "
+			read ans
+			if [ "$ans" = "y" ]; then
+				sd2nand
+			fi
+		# from NAND --> mSD
+		elif [ $dev -eq 0 ]; then
+			echo -n "Recover micro SD ? --> enter [y/n]: "
+			read ans
+			if [ "$ans" = "y" ]; then
+				nand2sd
+			fi
+		fi
+	fi
+}
+
+
+#Usage: setdiopin <pin> <1,0,Z> <b>
+# Second arg:
+#	1= ON, 0= OFF, z= input mode
+# Third arg:
+#	if present, print DIO reg in binary
+setdiopin() {
+	if [ -z "$dio_out" ]; then
+		eval `ts7500ctl --getdioreg`
+	fi
+	case $2 in
+	0)
+		let diodir="diodir | (1<<$1)"
+		let dio_out="dio_out & ~(1<<$1)"
+		;;
+	1)
+		let diodir="diodir | (1<<$1)"
+		let dio_out="dio_out | (1<<$1)" 
+		;;
+	z|Z)
+		let diodir="diodir & ~(1<<$1)"
+		;;
+	esac
+	ts7500ctl --setdio $dio_out --setdiodir $diodir
+	
+	if [ "$3" = "b" ]; then
+		local dir=`ts7500ctl --getdioreg | grep diodir | cut -dx -f2`
+		echo -n "DIR= "
+		printbin $dir
+		echo
+		local out=`ts7500ctl --getdioreg | grep dio_out | cut -dx -f2`
+		echo -n "OUT= "
+		printbin $out
+		echo
+	fi
+	#return $dionum
+}
+
+
+#Usage: getdiopin <pin>
+getdiopin() {
+	local x dio
+	eval `ts7500ctl --getdio`
+	let x="(dio >> $1) & 0x1"
+	echo $x
+	return $x
+}
+
+
+#TS-752 utility functions
+setrelay() {
+	local x
+	let x="$1"
+	setdiopin 39 $((x & 0x1))
+	setdiopin 37 $(((x >> 1) & 0x1)) 
+	setdiopin 35 $(((x >> 2) & 0x1)) 
+
+# Return the value given
+# NOTE: maybe we can return the ACTUAL relay status?-JW
+return $x	
+}
+
+
+setout() {
+	local x
+	let x="$1"
+	setdiopin 33 $((x & 0x1))
+	setdiopin 31 $(((x >> 1) & 0x1)) 
+	setdiopin 29 $(((x >> 2) & 0x1)) 
+	
+# Return the value given
+# NOTE: maybe we can return the ACTUAL pin status?-JW
+return $x
+}
+
+
+getin() {
+	local x dio
+	eval `ts7500ctl --getdio`
+	let x="(dio >> 40) & 1"
+	let x="x | (((dio >> 38) & 1) << 1)"
+	let x="x | (((dio >> 36) & 1) << 2)"
+	let x="x | (((dio >> 34) & 1) << 3)"
+	let x="x | (((dio >> 32) & 1) << 4)"
+	let x="x | (((dio >> 30) & 1) << 5)"
+	let x="x | (((dio >> 28) & 1) << 6)"
+	let x="x | (((dio >> 26) & 1) << 7)"
+	if [ -z "$1" ]; then
+		printf "0x%x\n" $x
+		return $x
+	else
+		echo $(((x >> ($1 - 1)) & 1))
+		return $(((x >> ($1 - 1)) & 1)) 
+	fi
+}
+
+
+tshelp() {
+	echo "usbload:"
+	echo -e "\tLoad USB kernel drivers"
+	echo "setdiopin <pin> <1,0,Z> <b>:"
+	echo -e "\tSet DIO header pin 1-44 (b=dump binary)"
+	echo "getdiopin <pin>:"
+	echo -e "\tGet DIO input state"
+	echo "setrelay <val>:"
+	echo -e "\tTurn on/off TS-752 relays according to 3-bit val"
+	echo "setout <val>:"
+	echo -e "\tSet 3-bit TS-752 output val"
+	echo "getin:"
+	echo -e "\tReturn 8 bit TS-752 inputs"
+	echo "gettemp:"
+	echo -e "\tReturn Temp. Sensor reading"
+	echo "save:"
+	echo -e "\tSave initrd back to boot device (NANS, SD or SPI flash)"
+	echo "sd2nand/nand2sd, sd2flash/flash2sd, nand2flash/flash2nand, etc:"
+	echo -e "\tCopy kernel+initrd images from one media to another"
+	echo "recover:"
+	echo -e "\tRecover kernel+initrd images"
+	echo "sbcTest:"
+	echo -e "\tRun TS production tests (NOTE: need loop-back testers)"
+	echo "exit:" 
+	echo -e "\tBoot SD card (if present) or filesystem mounted at /mnt/root"
+}
+
+
+gettemp() {
+# Determine the board model
+# If 7500 or 7550, use local function
+# For all other boards, use "ts7500ctl --gettemp"
+local model=`ts7500ctl -i | grep "^model=" | cut -d= -f2 | cut -c3-`
+if [ "$model" -ne 7500 -a $model -ne 7550 ]; then
+	ts7500ctl --gettemp
+	return
+fi
+
+	local n x val
+	setdiopin 22 0
+	setdiopin 12 Z
+	n=0
+	while [ $n -lt 13 ]; do
+		setdiopin 14 0
+		setdiopin 14 1
+		x=`getdiopin 12`
+		if [ "$x" -eq 0 ]; then
+			let val="val << 1"
+		else
+			let val="(val << 1) | 1"
+		fi
+		let n="n + 1"
+	done
+	setdiopin 22 Z
+	setdiopin 14 Z
+	if [ $((val & 0x1000)) -ne 0 ]; then
+		val=$(((~(val & 0xfff) & 0xfff) + 1))
+		val=$((val * 62500))
+		printf "-%d." $((val / 1000000))
+		printf "%d\n" $(((val % 1000000) / 100000))
+	else
+		val=$((val * 62500))
+		printf "%d." $((val / 1000000))
+		printf "%d\n" $(((val % 1000000) / 100000))
+	fi
+	
+	return $val
+}
diff --git a/recipes/ts7500/spictl_0.0.1.bb b/recipes/ts7500/spictl_0.0.1.bb
new file mode 100644
index 0000000..bc0a392
--- /dev/null
+++ b/recipes/ts7500/spictl_0.0.1.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "TS 7500 spictl scripts"
+PR = "r0"
+DEPENDS = ""
+SRC_URI = " \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/spictl.tar.gz \
+"
+
+SRC_URI[md5sum] = "8144833fecbf9162ec47a7ec7e6695a5"
+SRC_URI[sha256sum] = "5ebdb995b58a7c914ab8c9213a41789095285139ee82a89a4fb73bfc3e0f7a13"
+
+S = "${WORKDIR}/spictl"
+
+do_compile () {
+	   ${CC}${CFLAGS} -g -c -o spictl.o spictl.c
+	   ${CC}${CFLAGS} -g -c -o sock.o sock.c
+	   ${CC}${CFLAGS} -g -c -o peekpoke.o peekpoke.c
+	   ${CC}${CFLAGS} -g -c -o opt.o opt.c
+	   ${CC}${CFLAGS} -g -c -o cavium.o cavium.c
+	   ${CC}${CFLAGS} -g -c -o file.o file.c
+	   ${CC}${CFLAGS} -g ${LDFLAGS} -o spictl spictl.o sock.o peekpoke.o opt.o cavium.o file.o
+}
+
+do_install () {
+	   install -d ${D}${base_sbindir}/
+	   install -m 0755 ${S}/spictl ${D}${base_sbindir}/
+}
diff --git a/recipes/ts7500/ts-initrd_0.0.1.bb b/recipes/ts7500/ts-initrd_0.0.1.bb
new file mode 100644
index 0000000..8954bd9
--- /dev/null
+++ b/recipes/ts7500/ts-initrd_0.0.1.bb
@@ -0,0 +1,46 @@
+DESCRIPTION = "TS 7500 initrd scripts"
+PR = "r0"
+DEPENDS = ""
+SRC_URI = " \
+	file://linuxrc-sdroot \
+	file://linuxrc-sdroot-readonly \
+	file://linuxrc-fastboot \
+	file://linuxrc-sdmount \
+	file://linuxrc-usbroot \
+	file://linuxrc-nandmount \  
+	file://passwd \
+	file://group \
+	file://ts7500_opencore_can.vme.comp \
+	file://ts7500.subr \
+"
+
+S= "${WORKDIR}"
+
+do_install () {
+	   install -d ${D}/ts7500
+	   install -m 0755 ${WORKDIR}/linuxrc-sdroot ${D}/ts7500
+	   install -m 0755 ${WORKDIR}/linuxrc-sdroot-readonly ${D}/ts7500
+	   install -m 0755 ${WORKDIR}/linuxrc-fastboot ${D}/ts7500
+	   install -m 0755 ${WORKDIR}/linuxrc-sdmount ${D}/ts7500
+	   install -m 0755 ${WORKDIR}/linuxrc-usbroot ${D}/ts7500
+	   install -m 0755 ${WORKDIR}/linuxrc-nandmount ${D}/ts7500
+	   install -m 0755 ${WORKDIR}/ts7500_opencore_can.vme.comp -T ${D}/ts7500/ts7500_opencore_can.vme.gz
+	   install -m 0755 ${WORKDIR}/ts7500.subr ${D}/ts7500
+	   install -d ${D}/${sysconfdir}
+	   install -m 0755 ${WORKDIR}/passwd ${D}/${sysconfdir}/passwd
+	   install -m 0755 ${WORKDIR}/group ${D}/${sysconfdir}/group
+	   
+}
+
+FILES_${PN} = "/ \
+	    /ts7500/linuxrc-sdroot \
+	    /ts7500/linuxrc-sdroot-readonly \
+	    /ts7500/linuxrc-fastboot \
+	    /ts7500/linuxrc-sdmount \
+	    /ts7500/linuxrc-usbroot \
+	    /ts7500/linuxrc-nandmount \
+	    /ts7500/ts7500.subr \
+	    /ts7500/ts7500_opencore_can.vme.gz \
+	    ${sysconfdir}/passwd \
+	    ${sysconfdir}/group \
+	    "
\ No newline at end of file
diff --git a/recipes/ts7500/ts-utils_0.0.1.bb b/recipes/ts7500/ts-utils_0.0.1.bb
new file mode 100644
index 0000000..bd7a72e
--- /dev/null
+++ b/recipes/ts7500/ts-utils_0.0.1.bb
@@ -0,0 +1,60 @@
+DESCRIPTION = "TS 7500 Utility Scripts"
+PR = "r0"
+DEPENDS = ""
+SRC_URI = " \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/jed2vme.c;name=jed2vmec \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/sdcore2.c;name=sdcore2c \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/sdctl.c;name=sdctlc \	
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/vmopcode.h;name=vmopcodeh \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/ispvm.c;name=ispvmc \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/ts7500ctl.c;name=ts7500ctlc \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/spiflashctl.c;name=spiflashctlc \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/xuartcore.c;name=xuartcorec \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/xuartcore.h;name=xuartcoreh \
+	ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/xuartctl.c;name=xuartctlc \
+	file://ts-utils.patch \
+"
+
+S = "${WORKDIR}"
+
+do_compile () {
+	   ${CC}${CFLAGS} -g ${LDFLAGS} -o jed2vme jed2vme.c
+	   ${CC}${CFLAGS} -g ${LDFLAGS} -o sdctl sdctl.c
+	   ${CC}${CFLAGS} -g -c -o ispvm.o ispvm.c
+	   ${CC}${CFLAGS} -g -c -o ts7500ctl.o ts7500ctl.c
+	   ${CC}${CFLAGS} -g ${LDFLAGS} -o ts7500ctl ts7500ctl.o ispvm.o	
+	   ${CC}${CFLAGS} -g ${LDFLAGS} -o spiflashctl spiflashctl.c
+	   ${CC}${CFLAGS} -g -c -o xuartcore.o xuartcore.c
+	   ${CC}${CFLAGS} -g -c -o xuartctl.o xuartctl.c
+	   ${CC}${CFLAGS} -g ${LDFLAGS} -o xuartctl xuartctl.o -lutil
+}
+
+do_install () {
+	   install -d ${D}${base_sbindir}/
+     	   install -m 0755 ${S}/jed2vme ${D}${base_sbindir}/
+   	   install -m 0755 ${S}/sdctl ${D}${base_sbindir}/
+	   install -m 0755 ${S}/ts7500ctl ${D}${base_sbindir}/
+   	   install -m 0755 ${S}/spiflashctl ${D}${base_sbindir}/
+   	   install -m 0755 ${S}/xuartctl ${D}${base_sbindir}/
+}
+
+SRC_URI[ispvmc.md5sum] = "99d3a017c52fd9cbb0c97f4a829eda0b"
+SRC_URI[ispvmc.sha256sum] = "548b0b53861ee6cdb4f13859ec428ad2f3aa53e8237fbca54463c1eb6f47be9d"
+SRC_URI[jed2vmec.md5sum] = "65ca2ecada2c6d1bbb489561f2f5f039"
+SRC_URI[jed2vmec.sha256sum] = "7351011403b6254b2cdb46d9958f4be81023565fcd91d21fbf51d5cce0491d4a"
+SRC_URI[sdcore2c.md5sum] = "3ad3f7ed650cf140b2ed2d83f0fc05b2"
+SRC_URI[sdcore2c.sha256sum] = "1246031ab3715ece923c276a180c2322851b625ad27b13241cd6219daf16dc99"
+SRC_URI[sdctlc.md5sum] = "4e0b1cd33afd0da7babeca66b03b5d5e"
+SRC_URI[sdctlc.sha256sum] = "9760853e2f04724116f0bef6786a4d2ac5e532fedcd53ae42a16bce528fbbeaa"
+SRC_URI[spiflashctlc.md5sum] = "e42e593409000451e7d6c0c61d5827c8"
+SRC_URI[spiflashctlc.sha256sum] = "c221ff69f905d793698afcdf5d4212d60685bb11adf8b128a4947088958695f4"
+SRC_URI[ts7500ctlc.md5sum] = "52ca09f12aa09d8271e699f471761ff5"
+SRC_URI[ts7500ctlc.sha256sum] = "8ee9b6af97d7632c089c837a763e5fca5976c4e13607028cd181d55ec0fb1a8e"
+SRC_URI[vmopcodeh.md5sum] = "64b1ae9de8e0e059ad06e9bd777f3edb"
+SRC_URI[vmopcodeh.sha256sum] = "7c55ea5854b481c1b09fca38f89a6d3ca24199f931509cd2756d9931f21c4be2"
+SRC_URI[xuartcorec.md5sum] = "376e7aff2fc724681599711f34922eb4"
+SRC_URI[xuartcorec.sha256sum] = "88c1d619cad4c675c068857cac189a2838adf84d8340f298e8b279dd414abfef"
+SRC_URI[xuartcoreh.md5sum] = "1ccd2b36c06718224925e1ff4c5cd293"
+SRC_URI[xuartcoreh.sha256sum] = "a0a5021513659ab069b8507fdedd835b5b47c962cd30ea68d1a017d94c1210ba"
+SRC_URI[xuartctlc.md5sum] = "a5825b26b9fef3af1532915f2bba2b43"
+SRC_URI[xuartctlc.sha256sum] = "0897a08ac7bbab07592ce41e664ce1c3887b23318a21f42b8ad3a0d06286c6c9"
diff --git a/recipes/ts7500/ts7500_0.0.1.bb b/recipes/ts7500/ts7500_0.0.1.bb
new file mode 100644
index 0000000..de4f398
--- /dev/null
+++ b/recipes/ts7500/ts7500_0.0.1.bb
@@ -0,0 +1,7 @@
+DESCRIPTION = "TS 7500 Utility Scripts"
+MAINTAINER = "Sachin Kamboj"
+PR = "r0"
+# ALLOW_EMPTY = 1
+DEPENDS = "canctl ts-utils  dioctl  dmxctl  spictl nbd"
+RDEPENDS = "canctl ts-utils  dioctl  dmxctl  spictl nbd-client"
+PROVIDES = "ts7500"
-- 
1.7.3.4





More information about the Openembedded-devel mailing list