summaryrefslogtreecommitdiffstats
path: root/boot-env
diff options
context:
space:
mode:
authorSebastian2010-02-10 22:05:24 +0100
committerSebastian2010-02-10 22:05:24 +0100
commitd5ee712ea0a8e8c782ee50c7a8f7e51448173aab (patch)
treed68b18484462499862ffe9a0aa5402a33e9f8b98 /boot-env
parenthack to enable loading of virtio_net after virtio_pci, maybe nex time via mod... (diff)
downloadcore-d5ee712ea0a8e8c782ee50c7a8f7e51448173aab.tar.gz
core-d5ee712ea0a8e8c782ee50c7a8f7e51448173aab.tar.xz
core-d5ee712ea0a8e8c782ee50c7a8f7e51448173aab.zip
initial import of event based bbinit script (still not included in the real init)
Diffstat (limited to 'boot-env')
-rwxr-xr-xboot-env/pbs/uclib-rootfs/bin/bbinit17
-rwxr-xr-xboot-env/pbs/uclib-rootfs/bin/handleEvents38
-rw-r--r--boot-env/pbs/uclib-rootfs/etc/bbinit.d/example18
-rw-r--r--boot-env/pbs/uclib-rootfs/etc/events/example2
4 files changed, 75 insertions, 0 deletions
diff --git a/boot-env/pbs/uclib-rootfs/bin/bbinit b/boot-env/pbs/uclib-rootfs/bin/bbinit
new file mode 100755
index 00000000..6edb69aa
--- /dev/null
+++ b/boot-env/pbs/uclib-rootfs/bin/bbinit
@@ -0,0 +1,17 @@
+#!/bin/hush
+
+# create clean setup
+rm /etc/events.d/*
+for f in $(ls -1 /etc/events)
+do
+ ln -sf /etc/events/$f /etc/events.d/$f
+done
+
+mkdir -p /tmp/event
+rm /tmp/event/*
+rm /tmp/events
+
+# start bbinit
+inotifyd /bin/handleEvents /tmp/event/:n &
+# initial call (executing all zero dependent scipts)
+handleEvents
diff --git a/boot-env/pbs/uclib-rootfs/bin/handleEvents b/boot-env/pbs/uclib-rootfs/bin/handleEvents
new file mode 100755
index 00000000..9bb78951
--- /dev/null
+++ b/boot-env/pbs/uclib-rootfs/bin/handleEvents
@@ -0,0 +1,38 @@
+#!/bin/hush
+
+# wait for lock
+while [ -f /tmp/bbinit.lock ]
+do
+ sleep 0.1
+done
+
+# lock eventhandler
+touch /tmp/bbinit.lock
+
+# source list of finished events
+[ -f /tmp/events ] && . /tmp/events
+
+# go through all unhandled events
+for f in $( ls -1 /etc/events.d/ )
+do
+ . /etc/events.d/$f
+
+ # check dependencies
+ eval dep=\$${f}_depends
+ havealldeps=1
+ for d in $dep
+ do
+ eval havedep=\$have${d}
+ [ "x$havedep" == "x1" ] || havealldeps=0
+ done
+
+ # if nothing is missing execute script
+ if [ "x$havealldeps" == "x1" ]; then
+ echo executing $f
+ /etc/bbinit.d/$f &
+ rm /etc/events.d/$f
+ fi
+done
+
+# unlock eventhandler
+rm /tmp/bbinit.lock
diff --git a/boot-env/pbs/uclib-rootfs/etc/bbinit.d/example b/boot-env/pbs/uclib-rootfs/etc/bbinit.d/example
new file mode 100644
index 00000000..245ca530
--- /dev/null
+++ b/boot-env/pbs/uclib-rootfs/etc/bbinit.d/example
@@ -0,0 +1,18 @@
+#!/bin/hush
+
+me=$(basename $0)
+
+. /etc/events/$me
+
+echo "[$me] starting .."
+for i in 1 2 3 4 5 6
+do
+ echo "[$me] $i"
+ sleep 1
+done
+echo "[$me] finished .."
+touch /tmp/event/$me
+eval have=${me}_provides
+echo "have${have}=1" >> /tmp/events
+
+
diff --git a/boot-env/pbs/uclib-rootfs/etc/events/example b/boot-env/pbs/uclib-rootfs/etc/events/example
new file mode 100644
index 00000000..a09326e2
--- /dev/null
+++ b/boot-env/pbs/uclib-rootfs/etc/events/example
@@ -0,0 +1,2 @@
+example_depends=""
+example_privides="example"