From e68c6149836e3166faf0a391e7af40bf72c37b09 Mon Sep 17 00:00:00 2001
From: Chia-I Wu <olv@openmoko.com>
Date: Tue, 28 Oct 2008 16:49:38 +0800
Subject: [PATCH] fastboot: initscripts-openmoko

---
 .../initscripts/initscripts-openmoko/alignment.sh  |    6 +
 .../initscripts/initscripts-openmoko/bootmisc.sh   |   45 ++++
 packages/initscripts/initscripts-openmoko/campgsm  |  128 ++++++++++
 .../initscripts/initscripts-openmoko/checkroot.sh  |   43 ++++
 packages/initscripts/initscripts-openmoko/devpts   |    5 +
 .../initscripts/initscripts-openmoko/finish.sh     |    6 +
 packages/initscripts/initscripts-openmoko/halt     |   25 ++
 .../initscripts/initscripts-openmoko/hostname.sh   |   11 +
 .../initscripts-openmoko/led-trigger.sh            |    6 +
 .../initscripts/initscripts-openmoko/mountall.sh   |   52 ++++
 .../initscripts-openmoko/mountdevsubfs.sh          |   14 ++
 .../initscripts-openmoko/mountkernfs.sh            |   33 +++
 .../initscripts-openmoko/populate-volatile.sh      |  248 ++++++++++++++++++++
 packages/initscripts/initscripts-openmoko/reboot   |   11 +
 .../initscripts/initscripts-openmoko/rmnologin     |   14 ++
 .../initscripts/initscripts-openmoko/save-rtc.sh   |    5 +
 packages/initscripts/initscripts-openmoko/sendsigs |   17 ++
 packages/initscripts/initscripts-openmoko/umountfs |   18 ++
 .../initscripts/initscripts-openmoko/volatiles     |   40 ++++
 packages/initscripts/initscripts-openmoko_1.0.bb   |   99 ++++++++
 20 files changed, 826 insertions(+), 0 deletions(-)
 create mode 100644 packages/initscripts/initscripts-openmoko/alignment.sh
 create mode 100644 packages/initscripts/initscripts-openmoko/bootmisc.sh
 create mode 100644 packages/initscripts/initscripts-openmoko/campgsm
 create mode 100644 packages/initscripts/initscripts-openmoko/checkroot.sh
 create mode 100644 packages/initscripts/initscripts-openmoko/devpts
 create mode 100644 packages/initscripts/initscripts-openmoko/finish.sh
 create mode 100644 packages/initscripts/initscripts-openmoko/halt
 create mode 100644 packages/initscripts/initscripts-openmoko/hostname.sh
 create mode 100644 packages/initscripts/initscripts-openmoko/led-trigger.sh
 create mode 100644 packages/initscripts/initscripts-openmoko/mountall.sh
 create mode 100644 packages/initscripts/initscripts-openmoko/mountdevsubfs.sh
 create mode 100644 packages/initscripts/initscripts-openmoko/mountkernfs.sh
 create mode 100644 packages/initscripts/initscripts-openmoko/populate-volatile.sh
 create mode 100644 packages/initscripts/initscripts-openmoko/reboot
 create mode 100644 packages/initscripts/initscripts-openmoko/rmnologin
 create mode 100644 packages/initscripts/initscripts-openmoko/save-rtc.sh
 create mode 100644 packages/initscripts/initscripts-openmoko/sendsigs
 create mode 100644 packages/initscripts/initscripts-openmoko/umountfs
 create mode 100644 packages/initscripts/initscripts-openmoko/volatiles
 create mode 100644 packages/initscripts/initscripts-openmoko_1.0.bb

diff --git a/packages/initscripts/initscripts-openmoko/alignment.sh b/packages/initscripts/initscripts-openmoko/alignment.sh
new file mode 100644
index 0000000..4a66dc6
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/alignment.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+if [ -e /proc/cpu/alignment ]; then
+   echo "3" > /proc/cpu/alignment
+fi
+
diff --git a/packages/initscripts/initscripts-openmoko/bootmisc.sh b/packages/initscripts/initscripts-openmoko/bootmisc.sh
new file mode 100644
index 0000000..d37388f
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/bootmisc.sh
@@ -0,0 +1,45 @@
+#
+# bootmisc.sh	Miscellaneous things to be done during bootup.
+#
+
+. /etc/default/rcS
+#
+# Put a nologin file in /etc to prevent people from logging in before
+# system startup is complete.
+#
+if test "$DELAYLOGIN" = yes
+then
+  echo "System bootup in progress - please wait" > /etc/nologin
+  cp /etc/nologin /etc/nologin.boot
+fi
+
+#
+# Update /etc/motd.
+#
+if test "$EDITMOTD" != no
+then
+	uname -a > /etc/motd.tmp
+	sed 1d /etc/motd >> /etc/motd.tmp
+	mv /etc/motd.tmp /etc/motd
+fi
+
+#
+# Update dynamic library cache
+#
+#/sbin/ldconfig
+
+# Set the system clock from hardware clock
+# If the timestamp is 1 day or more recent than the current time,
+# use the timestamp instead.
+[ "$UTC" = yes ] || /etc/init.d/hwclock.sh start
+#if test -e /etc/timestamp
+#then
+#	SYSTEMDATE=`date "+%Y%m%d"`
+#	TIMESTAMP=`cat /etc/timestamp | awk '{ print substr($0,9,4) substr($0,1,4);}'`
+#        NEEDUPDATE=`expr \( $TIMESTAMP \> $SYSTEMDATE \)`                                                 
+#        if [ $NEEDUPDATE -eq 1 ]; then 
+#		date `cat /etc/timestamp`
+#		/etc/init.d/hwclock.sh stop
+#	fi
+#fi
+: exit 0
diff --git a/packages/initscripts/initscripts-openmoko/campgsm b/packages/initscripts/initscripts-openmoko/campgsm
new file mode 100644
index 0000000..75815ce
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/campgsm
@@ -0,0 +1,128 @@
+#!/bin/sh
+
+VERBOSE=no
+
+PIDS=`pidof -x "$0"`
+
+# make sure pidof sees us
+if [ -z "$PIDS" ]; then
+	exec "$0"
+	exit 1
+fi
+
+GSM_DEVICE="/dev/ttySAC0"
+GSM_POWER="/sys/devices/platform/neo1973-pm-gsm.0/power_on"
+GSM_RESET="/sys/devices/platform/neo1973-pm-gsm.0/reset"
+
+GSM_COMMANDS="Z E0V1 +CFUN=1 +COPS=0"
+
+gsm_running () {
+	if [ "$PIDS" != "$$" ]; then
+		return 0
+	else
+		return 1
+	fi
+}
+
+gsm_send () {
+	cmd="$1"
+	echo -ne "AT${cmd}\r" > "$GSM_DEVICE"
+}
+
+# this function might block forever
+gsm_wait () {
+	ret="UNKNOWN"
+
+	while read status; do
+		case "$status" in
+			OK*)
+				ret="OK"
+				;;
+			ERROR*)
+				ret="ERROR"
+				;;
+			*)
+				ret="UNKNOWN"
+				;;
+		esac
+		if [ "x$ret" != "xUNKNOWN" ]; then
+			break
+		fi
+	done < "$GSM_DEVICE"
+
+	if [ "x$ret" != "xOK" ]; then
+		return 1
+	fi
+	
+	return 0
+}
+
+gsm_setup () {
+	[ $VERBOSE == "yes" ] && echo -n "Powering up GSM modem..."
+	echo 0 > "$GSM_POWER"; sleep 1
+	echo 1 > "$GSM_POWER"; sleep 1
+	echo 1 > "$GSM_RESET"; sleep 1
+	echo 0 > "$GSM_RESET"; sleep 4
+	[ $VERBOSE == "yes" ] && echo "done"
+
+	stty -F "$GSM_DEVICE" cooked -opost -echo crtscts 115200
+}
+
+gsm_wakeup () {
+	[ $VERBOSE == "yes" ] && echo "Waking up GSM modem"
+
+	# there is at most one OK/ERROR even if we send multiple commands
+	gsm_send ""
+	gsm_send ""
+	gsm_send ""
+
+	if gsm_wait; then
+		[ $VERBOSE == "yes" ] && echo "GSM modem awake"
+		return 0
+	else
+		echo "failed to wake up GSM modem"
+		return 1
+	fi
+}
+
+start () {
+	gsm_setup
+
+	if gsm_wakeup; then
+		for cmd in $GSM_COMMANDS
+		do
+			[ $VERBOSE == "yes" ] && echo "Sending AT$cmd"
+			gsm_send "$cmd"
+
+			if ! gsm_wait; then
+				echo "AT$cmd failed"
+				break
+			fi
+		done
+	fi
+}
+
+set -e
+
+case "$1" in
+	start)
+		if gsm_running; then
+			echo "Another instance is already running"
+			exit 1
+		fi
+
+		start &
+		;;
+	stop)
+		if gsm_running; then
+			PIDS=`pidof -x -o "$$" "$0"`
+			echo -n "Stopping other instances..."
+			kill $PIDS
+			echo "done"
+		fi
+		;;
+	*)
+		echo "Usage: $0 {start|stop}"
+		exit 1
+		;;
+esac
diff --git a/packages/initscripts/initscripts-openmoko/checkroot.sh b/packages/initscripts/initscripts-openmoko/checkroot.sh
new file mode 100644
index 0000000..029ae9b
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/checkroot.sh
@@ -0,0 +1,43 @@
+#
+# checkroot.sh	Check to root filesystem.
+#
+# Version:	@(#)checkroot.sh  2.84  25-Jan-2002  miquels@cistron.nl
+#
+
+. /etc/default/rcS
+
+#
+# Set SULOGIN in /etc/default/rcS to yes if you want a sulogin to be spawned
+# from this script *before anything else* with a timeout, like SCO does.
+#
+test "$SULOGIN" = yes && sulogin -t 30 $CONSOLE
+
+#
+#	If the root filesystem was not marked as read-only in /etc/fstab,
+#	remount the rootfs rw but do not try to change mtab because it
+#	is on a ro fs until the remount succeeded. Then clean up old mtabs
+#	and finally write the new mtab.
+#	This part is only needed if the rootfs was mounted ro.
+#
+ROOTFSDEV="/dev/root"
+if grep -q "^$ROOTFSDEV .* rw" /proc/mounts; then
+	echo "Root filesystem already read-write, not remounting"
+else
+	rootmode=rw
+
+	echo "Remounting root file system..."
+	mount -n -o remount,noatime,$rootmode /
+	if test "$rootmode" = rw
+	then
+		if test ! -L /etc/mtab
+		then
+			rm -f /etc/mtab~ /etc/nologin
+			: > /etc/mtab
+		fi
+		mount -f -o remount /
+		mount -f /proc
+		test "$devfs" && grep -q '^devfs /dev' /proc/mounts && mount -f "$devfs"
+	fi
+fi
+
+: exit 0
diff --git a/packages/initscripts/initscripts-openmoko/devpts b/packages/initscripts/initscripts-openmoko/devpts
new file mode 100644
index 0000000..4a0978b
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/devpts
@@ -0,0 +1,5 @@
+# GID of the `tty' group
+TTYGRP=5
+ 
+# Set to 600 to have `mesg n' be the default
+TTYMODE=620
diff --git a/packages/initscripts/initscripts-openmoko/finish.sh b/packages/initscripts/initscripts-openmoko/finish.sh
new file mode 100644
index 0000000..4f9f75f
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/finish.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+if ! test -e /etc/.configured; then
+	> /etc/.configured
+fi
+
diff --git a/packages/initscripts/initscripts-openmoko/halt b/packages/initscripts/initscripts-openmoko/halt
new file mode 100644
index 0000000..d8cab22
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/halt
@@ -0,0 +1,25 @@
+#! /bin/sh
+#
+# halt		Execute the halt command.
+#
+# Version:      @(#)halt  2.84-2  07-Jan-2002  miquels@cistron.nl
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# See if we need to cut the power.
+if test -x /etc/init.d/ups-monitor
+then
+	/etc/init.d/ups-monitor poweroff
+fi
+
+# Don't shut down drives if we're using RAID.
+hddown="-h"
+if grep -qs '^md.*active' /proc/mdstat
+then
+	hddown=""
+fi
+
+halt -d -f -i -p $hddown
+
+: exit 0
diff --git a/packages/initscripts/initscripts-openmoko/hostname.sh b/packages/initscripts/initscripts-openmoko/hostname.sh
new file mode 100644
index 0000000..0f3d374
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/hostname.sh
@@ -0,0 +1,11 @@
+#
+# hostname.sh	Set hostname.
+#
+# Version:	@(#)hostname.sh  1.10  26-Feb-2001  miquels@cistron.nl
+#
+
+if test -f /etc/hostname
+then
+	hostname -F /etc/hostname
+fi
+
diff --git a/packages/initscripts/initscripts-openmoko/led-trigger.sh b/packages/initscripts/initscripts-openmoko/led-trigger.sh
new file mode 100644
index 0000000..9583ce9
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/led-trigger.sh
@@ -0,0 +1,6 @@
+#! /bin/sh
+sys_led_trigger="/sys/devices/platform/gta02-led.0/leds/gta02-aux:red/trigger"
+if test -e $sys_led_trigger ;then
+        echo bat-charging > $sys_led_trigger
+fi
+
diff --git a/packages/initscripts/initscripts-openmoko/mountall.sh b/packages/initscripts/initscripts-openmoko/mountall.sh
new file mode 100644
index 0000000..62dafb8
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/mountall.sh
@@ -0,0 +1,52 @@
+#
+# mountall.sh	Mount all filesystems.
+#
+# Version:	@(#)mountall.sh  2.83-2  01-Nov-2001  miquels@cistron.nl
+#
+. /etc/default/rcS
+if test -f /etc/default/mountall; then
+    . /etc/default/mountall
+fi
+
+#
+# Mount local filesystems in /etc/fstab. For some reason, people
+# might want to mount "proc" several times, and mount -v complains
+# about this. So we mount "proc" filesystems without -v.
+#
+test "$VERBOSE" != no && echo "Mounting local filesystems..."
+mount -a $MOUNTALL
+
+#
+# We might have mounted something over /dev, see if /dev/initctl is there.
+#
+if test ! -p /dev/initctl
+then
+	rm -f /dev/initctl
+	mknod -m 600 /dev/initctl p
+fi
+kill -USR1 1
+
+#
+# Execute swapon command again, in case we want to swap to
+# a file on a now mounted filesystem.
+#
+doswap=yes
+if test $doswap = yes
+then
+	swapon -a 2> /dev/null
+fi
+
+# A missing homedirectory for root can cause all sorts of problems.
+# This can happen after user formats his /home partition for example
+
+if test -e /etc/passwd
+then
+	ROOT_HOME="`grep root /etc/passwd | cut -d: -f6`"
+	
+	if test -n "$ROOT_HOME"
+	then
+		! test -d "$ROOT_HOME" && mkdir -p "$ROOT_HOME"
+	fi
+fi
+: exit 0
+
diff --git a/packages/initscripts/initscripts-openmoko/mountdevsubfs.sh b/packages/initscripts/initscripts-openmoko/mountdevsubfs.sh
new file mode 100644
index 0000000..c6cfb05
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/mountdevsubfs.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+. /etc/default/devpts
+
+test -c /dev/ptmx || mknod -m 666 /dev/ptmx c 5 2
+
+if [ -d /dev/pts ]; then
+	mount -n -t devpts devpts /dev/pts -ogid=${TTYGRP},mode=${TTYMODE}
+fi
+
+
+if [ -d /dev/shm ]; then
+	mount -n -t tmpfs shmfs /dev/shm -omode=0777
+fi
diff --git a/packages/initscripts/initscripts-openmoko/mountkernfs.sh b/packages/initscripts/initscripts-openmoko/mountkernfs.sh
new file mode 100644
index 0000000..1ed09fc
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/mountkernfs.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+supported_kernel() {
+  case "$(uname -r)" in
+    2.[012345].*|2.6.[0-9]|2.6.[0-9][!0-9]*) return 1 ;;
+    2.6.1[0-7]|2.6.1[0-7][!0-9]*) return 1 ;;
+  esac
+  return 0
+}
+
+check_kernel() {
+	if ! supported_kernel; then
+		echo "WARNING: kernel < 2.6.18"
+	fi
+
+	if ! grep -qs devpts /proc/filesystems; then
+		echo "WARNING: kernel does not support devpts"
+	fi
+
+	if ! grep -qs tmpfs /proc/filesystems; then
+		echo "WARNING: kernel does not support tmpfs"
+	fi
+}
+
+if [ -d /proc ]; then
+	mount -n -t proc proc /proc
+fi
+
+check_kernel
+
+if [ -d /sys ]; then
+	mount -n -t sysfs sysfs /sys
+fi
diff --git a/packages/initscripts/initscripts-openmoko/populate-volatile.sh b/packages/initscripts/initscripts-openmoko/populate-volatile.sh
new file mode 100644
index 0000000..7f2d69b
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/populate-volatile.sh
@@ -0,0 +1,248 @@
+#!/bin/sh
+
+. /etc/default/rcS
+
+CFGDIR="/etc/default/volatiles"
+TMPROOT="/var/tmp"
+COREDEF="00_core"
+
+[ "${VERBOSE}" != "no" ] && echo "Populating volatile Filesystems."
+
+create_file() {
+	EXEC=" 
+	touch \"$1\"; 
+	chown ${TUSER}.${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" >/dev/tty0 2>&1; 
+	chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" >/dev/tty0 2>&1 " 
+
+	test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache
+
+	[ -e "$1" ] && {
+	  [ "${VERBOSE}" != "no" ] && echo "Target already exists. Skipping."
+	} || {
+	  eval $EXEC
+	}
+}
+
+mk_dir() {
+	EXEC=" 
+	mkdir -p \"$1\"; 
+	chown ${TUSER}.${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" >/dev/tty0 2>&1; 
+	chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" >/dev/tty0 2>&1 "
+
+	test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache
+	
+	[ -e "$1" ] && {
+	  [ "${VERBOSE}" != "no" ] && echo "Target already exists. Skipping."
+	} || {
+	  eval $EXEC
+	}
+}
+
+link_file() {
+	EXEC="test -e \"$2\" -o -L $2 || ln -s \"$1\" \"$2\" >/dev/tty0 2>&1" 
+
+	test "$VOLATILE_ENABLE_CACHE" = yes && echo "	$EXEC" >> /etc/volatile.cache
+	
+	[ -e "$2" ] && {
+	  echo "Cannot create link over existing -${TNAME}-." >&2
+	} || {
+	  eval $EXEC
+	}
+}
+
+check_requirements() {
+
+  cleanup() {
+    rm "${TMP_INTERMED}"
+    rm "${TMP_DEFINED}"
+    rm "${TMP_COMBINED}"
+    }
+    
+  CFGFILE="$1"
+
+  [ `basename "${CFGFILE}"` = "${COREDEF}" ] && return 0
+
+  TMP_INTERMED="${TMPROOT}/tmp.$$"
+  TMP_DEFINED="${TMPROOT}/tmpdefined.$$"
+  TMP_COMBINED="${TMPROOT}/tmpcombined.$$"
+
+
+  cat /etc/passwd | sed 's@\(^:\)*:.*@\1@' | sort | uniq > "${TMP_DEFINED}"
+  cat ${CFGFILE} | grep -v "^#" | cut -d " " -f 2 > "${TMP_INTERMED}"
+  cat "${TMP_DEFINED}" "${TMP_INTERMED}" | sort | uniq > "${TMP_COMBINED}"
+
+  NR_DEFINED_USERS="`cat "${TMP_DEFINED}" | wc -l`"
+  NR_COMBINED_USERS="`cat "${TMP_COMBINED}" | wc -l`"
+
+  [ "${NR_DEFINED_USERS}" -ne "${NR_COMBINED_USERS}" ] && {
+    echo "Undefined users:"
+    diff "${TMP_DEFINED}" "${TMP_COMBINED}" | grep "^>"
+    cleanup
+    return 1
+    }
+
+
+  cat /etc/group | sed 's@\(^:\)*:.*@\1@' | sort | uniq > "${TMP_DEFINED}"
+  cat ${CFGFILE} | grep -v "^#" | cut -d " " -f 3 > "${TMP_INTERMED}"
+  cat "${TMP_DEFINED}" "${TMP_INTERMED}" | sort | uniq > "${TMP_COMBINED}"
+
+  NR_DEFINED_GROUPS="`cat "${TMP_DEFINED}" | wc -l`"
+  NR_COMBINED_GROUPS="`cat "${TMP_COMBINED}" | wc -l`"
+
+  [ "${NR_DEFINED_GROUPS}" -ne "${NR_COMBINED_GROUPS}" ] && {
+    echo "Undefined groups:"
+    diff "${TMP_DEFINED}" "${TMP_COMBINED}" | grep "^>"
+    cleanup
+    return 1
+    }
+
+  # Add checks for required directories here
+
+  cleanup
+  return 0
+  }
+
+apply_cfgfile() {
+
+  CFGFILE="$1"
+
+  check_requirements "${CFGFILE}" || {
+    echo "Skipping ${CFGFILE}"
+    return 1
+    }
+
+  cat ${CFGFILE} | grep -v "^#" | \
+  while read LINE; do
+
+    eval `echo "$LINE" | sed -n "s/\(.*\)\ \(.*\) \(.*\)\ \(.*\)\ \(.*\)\ \(.*\)/TTYPE=\1 ; TUSER=\2; TGROUP=\3; TMODE=\4; TNAME=\5 TLTARGET=\6/p"`
+
+    [ "${VERBOSE}" != "no" ] && echo "Checking for -${TNAME}-."
+
+
+    [ "${TTYPE}" = "l" ] && {
+      TSOURCE="$TLTARGET"
+      [ -L "${TNAME}" ] || {
+        [ "${VERBOSE}" != "no" ] && echo "Creating link -${TNAME}- pointing to -${TSOURCE}-."
+        link_file "${TSOURCE}" "${TNAME}"
+        }
+      continue
+      }
+
+    [ -L "${TNAME}" ] && {
+      [ "${VERBOSE}" != "no" ] && echo "Found link."
+      NEWNAME=`ls -l "${TNAME}" | sed -e 's/^.*-> \(.*\)$/\1/'`
+      echo ${NEWNAME} | grep -v "^/" >/dev/null && {
+        TNAME="`echo ${TNAME} | sed -e 's@\(.*\)/.*@\1@'`/${NEWNAME}"
+        [ "${VERBOSE}" != "no" ] && echo "Converted relative linktarget to absolute path -${TNAME}-."
+        } || {
+        TNAME="${NEWNAME}"
+        [ "${VERBOSE}" != "no" ] && echo "Using absolute link target -${TNAME}-."
+        }
+      }
+
+    case "${TTYPE}" in
+      "f")  [ "${VERBOSE}" != "no" ] && echo "Creating file -${TNAME}-."
+            create_file "${TNAME}"
+	    ;;
+      "d")  [ "${VERBOSE}" != "no" ] && echo "Creating directory -${TNAME}-."
+            mk_dir "${TNAME}"
+	    # Add check to see if there's an entry in fstab to mount.
+	    ;;
+      *)    [ "${VERBOSE}" != "no" ] && echo "Invalid type -${TTYPE}-."
+            continue
+	    ;;
+    esac
+
+
+    done
+
+  return 0
+
+  }
+
+SKEL_DIR="/etc/volatile/skel"
+
+skel_mount() {
+	VOLATILE="$1"
+
+	[ -d "$VOLATILE" ] || mkdir -p "$VOLATILE"
+
+	mount -t tmpfs volatile "$VOLATILE" -omode=0755
+}
+
+skel_load() {
+	VOLATILE="$1"
+
+	if ! skel_mount "$VOLATILE"; then
+		echo "failed to mount $VOLATILE"
+		return 1
+	fi
+
+	cp -a "$SKEL_DIR"/* "$VOLATILE"/
+}
+
+skel_update() {
+	VOLATILE="$1"
+
+	if ! skel_mount "$VOLATILE"; then
+		echo "failed to update"
+		return 1
+	fi
+
+	echo -n "Populating volatile directory..."
+	for file in `ls -1 "${CFGDIR}" | sort`; do
+		apply_cfgfile "${CFGDIR}/${file}"
+	done
+	echo "done"
+
+	if [ -d "$SKEL_DIR" ]; then
+		rm -rf "$SKEL_DIR"
+	fi
+
+	mkdir -p "$SKEL_DIR"/tmp
+	cp -a "$VOLATILE"/* "$SKEL_DIR"/
+}
+
+populate() {
+	if [ -d "$SKEL_DIR"/tmp ]; then
+		skel_load /var/volatile
+	else
+		skel_update /var/volatile
+	fi
+
+	for d in /var/volatile/*
+	do
+		ln -sf "$d" /var
+	done
+
+	if ! test -L /tmp; then
+		rm -rf /tmp
+		ln -sf /var/tmp /tmp
+	fi
+}
+
+case "$1" in
+	start)
+	if grep -q "^volatile " /proc/mounts; then
+		echo "volatile directory is already mounted"
+	else
+		populate
+	fi
+	;;
+	stop)
+	: # no-op
+	;;
+	update)
+	if skel_update /var/volatile; then
+		umount /var/volatile
+		if grep -q "^volatile " /proc/mounts; then
+			cp -a "$SKEL_DIR"/* /var/volatile
+		fi
+	fi
+	;;
+	*)
+	echo "Usage: /etc/init.d/populate-volatile {start|stop|update}"
+	;;
+esac
+
+: exit 0
diff --git a/packages/initscripts/initscripts-openmoko/reboot b/packages/initscripts/initscripts-openmoko/reboot
new file mode 100644
index 0000000..5627819
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/reboot
@@ -0,0 +1,11 @@
+#! /bin/sh
+#
+# reboot	Execute the reboot command.
+#
+# Version:      @(#)reboot  2.75  22-Jun-1998  miquels@cistron.nl
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+echo -n "Rebooting... "
+reboot -d -f -i
diff --git a/packages/initscripts/initscripts-openmoko/rmnologin b/packages/initscripts/initscripts-openmoko/rmnologin
new file mode 100644
index 0000000..444145a
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/rmnologin
@@ -0,0 +1,14 @@
+#! /bin/sh
+#
+# rmnologin	This script removes the /etc/nologin file as the last
+#		step in the boot process.
+#
+# Version:	@(#)rmnologin  1.00  22-Jun-1998  miquels@cistron.nl
+#
+
+if test -f /etc/nologin.boot
+then
+	rm -f /etc/nologin /etc/nologin.boot
+fi
+
+: exit 0
diff --git a/packages/initscripts/initscripts-openmoko/save-rtc.sh b/packages/initscripts/initscripts-openmoko/save-rtc.sh
new file mode 100644
index 0000000..e786073
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/save-rtc.sh
@@ -0,0 +1,5 @@
+#! /bin/sh
+/etc/init.d/hwclock.sh stop
+
+# Update the timestamp
+date +%2m%2d%2H%2M%Y > /etc/timestamp
diff --git a/packages/initscripts/initscripts-openmoko/sendsigs b/packages/initscripts/initscripts-openmoko/sendsigs
new file mode 100644
index 0000000..c62a5cd
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/sendsigs
@@ -0,0 +1,17 @@
+#! /bin/sh
+#
+# sendsigs	Kill all remaining processes.
+#
+# Version:      @(#)sendsigs  2.75  22-Jun-1998  miquels@cistron.nl
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# Kill all processes.
+echo "Sending all processes the TERM signal..."
+killall5 -15
+sleep 5
+echo "Sending all processes the KILL signal..."
+killall5 -9
+
+: exit 0
diff --git a/packages/initscripts/initscripts-openmoko/umountfs b/packages/initscripts/initscripts-openmoko/umountfs
new file mode 100644
index 0000000..ec75b0c
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/umountfs
@@ -0,0 +1,18 @@
+#! /bin/sh
+#
+# umountfs	Turn off swap and unmount all local filesystems.
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+echo "Deactivating swap..."
+swapoff -a
+
+# We leave /proc mounted.
+echo "Unmounting local filesystems..."
+mount -o remount,ro /mnt/ram
+umount -f -a -r
+
+mount -o remount,ro /
+
+: exit 0
diff --git a/packages/initscripts/initscripts-openmoko/volatiles b/packages/initscripts/initscripts-openmoko/volatiles
new file mode 100644
index 0000000..fbcc858
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko/volatiles
@@ -0,0 +1,40 @@
+# This configuration file lists filesystem objects that should get verified
+# during startup and be created if missing.
+#
+# Every line must either be a comment starting with #
+# or a definition of format:
+# <type> <owner> <group> <mode> <path> <linksource>
+# where the items are separated by whitespace !
+#
+# <type> : d|f|l : (d)irectory|(f)ile|(l)ink
+#
+# A linking example:
+# l root root 0777 /var/test /tmp/testfile
+# f root root 0644 /var/test none
+#
+# Understanding links:
+# When populate-volatile is to verify/create a directory or file, it will first
+# check it's existence. If a link is found to exist in the place of the target,
+# the path of the target is replaced with the target the link points to.
+# Thus, if a link is in the place to be verified, the object will be created
+# in the place the link points to instead.
+# This explains the order of "link before object" as in the example above, where
+# a link will be created at /var/test pointing to /tmp/testfile and due to this
+# link the file defined as /var/test will actually be created as /tmp/testfile.
+d root root 0755 /var/volatile/cache none
+d root root 1777 /var/volatile/lock none
+d root root 0755 /var/volatile/log none
+d root root 0755 /var/volatile/run none
+d root root 1777 /var/volatile/tmp none
+l root root 0755 /var/cache /var/volatile/cache
+l root root 1777 /var/lock /var/volatile/lock
+l root root 0755 /var/log /var/volatile/log
+l root root 0755 /var/run /var/volatile/run
+l root root 1777 /var/tmp /var/volatile/tmp
+d root root 0755 /var/lock/subsys none
+f root root 0664 /var/log/wtmp none
+f root root 0644 /var/log/lastlog none
+f root root 0664 /var/run/utmp none
+l root root 0644 /etc/resolv.conf /var/run/resolv.conf
+f root root 0644 /var/run/resolv.conf none
+
diff --git a/packages/initscripts/initscripts-openmoko_1.0.bb b/packages/initscripts/initscripts-openmoko_1.0.bb
new file mode 100644
index 0000000..e7ed23b
--- /dev/null
+++ b/packages/initscripts/initscripts-openmoko_1.0.bb
@@ -0,0 +1,99 @@
+DESCRIPTION = "Openmoko init scripts"
+SECTION = "base"
+PRIORITY = "required"
+DEPENDS = ""
+RDEPENDS = ""
+LICENSE = "GPL"
+PR = "r0"
+
+RPROVIDES = "initscripts"
+RCONFLICTS = "initscripts"
+
+SRC_URI = "file://alignment.sh \
+	   file://bootmisc.sh \
+	   file://campgsm \
+	   file://checkroot.sh \
+	   file://finish.sh \
+	   file://hostname.sh \
+	   file://led-trigger.sh \
+	   file://mountall.sh \
+	   file://mountdevsubfs.sh \
+	   file://mountkernfs.sh \
+	   file://populate-volatile.sh \
+	   file://devpts \
+	   file://volatiles \
+	   file://halt \
+	   file://reboot \
+	   file://rmnologin \
+	   file://save-rtc.sh \
+	   file://sendsigs \
+	   file://umountfs \
+	   "
+
+inherit base
+
+do_install () {
+#
+# Create directories and install device independent scripts
+#
+	install -d ${D}${sysconfdir}/init.d
+	install -d ${D}${sysconfdir}/rcS.d
+	install -d ${D}${sysconfdir}/rc0.d
+	install -d ${D}${sysconfdir}/rc1.d
+	install -d ${D}${sysconfdir}/rc2.d
+	install -d ${D}${sysconfdir}/rc3.d
+	install -d ${D}${sysconfdir}/rc4.d
+	install -d ${D}${sysconfdir}/rc5.d
+	install -d ${D}${sysconfdir}/rc6.d
+	install -d ${D}${sysconfdir}/default
+	install -d ${D}${sysconfdir}/default/volatiles
+
+	install -m 0755	${WORKDIR}/alignment.sh		${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/bootmisc.sh		${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/campgsm		${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/checkroot.sh		${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/finish.sh		${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/hostname.sh		${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/led-trigger.sh	${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/mountall.sh		${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/mountdevsubfs.sh	${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/mountkernfs.sh	${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/populate-volatile.sh	${D}${sysconfdir}/init.d
+
+	install -m 0644	${WORKDIR}/devpts		${D}${sysconfdir}/default/devpts
+	install -m 0644	${WORKDIR}/volatiles		${D}${sysconfdir}/default/volatiles/00_core
+
+	install -m 0755	${WORKDIR}/halt			${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/reboot		${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/rmnologin		${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/save-rtc.sh		${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/sendsigs		${D}${sysconfdir}/init.d
+	install -m 0755	${WORKDIR}/umountfs		${D}${sysconfdir}/init.d
+
+#
+# Create runlevel links
+#
+	ln -sf		../init.d/hostname.sh		${D}${sysconfdir}/rcS.d/S02hostname.sh
+	ln -sf		../init.d/mountkernfs.sh	${D}${sysconfdir}/rcS.d/S02mountkernfs.sh
+	ln -sf		../init.d/mountdevsubfs.sh	${D}${sysconfdir}/rcS.d/S04mountdevsubfs.sh
+	ln -sf		../init.d/alignment.sh		${D}${sysconfdir}/rcS.d/S06alignment.sh
+	#ln -sf		../init.d/campgsm		${D}${sysconfdir}/rcS.d/S07campgsm
+	ln -sf		../init.d/checkroot.sh		${D}${sysconfdir}/rcS.d/S10checkroot.sh
+	ln -sf		../init.d/mountall.sh		${D}${sysconfdir}/rcS.d/S35mountall.sh
+	ln -sf		../init.d/populate-volatile.sh	${D}${sysconfdir}/rcS.d/S37populate-volatile.sh
+	ln -sf		../init.d/bootmisc.sh		${D}${sysconfdir}/rcS.d/S55bootmisc.sh
+	ln -sf		../init.d/led-trigger.sh	${D}${sysconfdir}/rcS.d/S97led-trigger.sh
+	ln -sf		../init.d/finish.sh		${D}${sysconfdir}/rcS.d/S99finish.sh
+
+	ln -sf		../init.d/rmnologin		${D}${sysconfdir}/rc5.d/S99rmnologin
+
+	ln -sf		../init.d/sendsigs		${D}${sysconfdir}/rc0.d/S20sendsigs
+	ln -sf		../init.d/save-rtc.sh		${D}${sysconfdir}/rc0.d/S25save-rtc.sh
+	ln -sf		../init.d/umountfs		${D}${sysconfdir}/rc0.d/S40umountfs
+	ln -sf		../init.d/halt			${D}${sysconfdir}/rc0.d/S90halt
+
+	ln -sf		../init.d/sendsigs		${D}${sysconfdir}/rc6.d/S20sendsigs
+	ln -sf		../init.d/save-rtc.sh		${D}${sysconfdir}/rc6.d/S25save-rtc.sh
+	ln -sf		../init.d/umountfs		${D}${sysconfdir}/rc6.d/S40umountfs
+	ln -sf		../init.d/reboot		${D}${sysconfdir}/rc6.d/S90reboot
+}
-- 
1.5.6.3

