From: Alexandru DAMIAN <[email protected]>

udevd moved location and isn't in $PATH anymore, so use an absolute path to
start it.

The control socket path moved too, so mkdir the directory it's in.

Mounts the new devtmpfs on /dev device tree.

Adds a menu to boot a disk partition instead of a file rootfs image, useful
to rescue a system.

Dumps safely to a shell if a root filesystem cannot be found

Signed-off-by: Ross Burton <[email protected]>
Signed-off-by: Alexandru Damian <[email protected]>
---
 meta/recipes-core/initrdscripts/files/init-live.sh |   52 +++++++++++++++++---
 .../initrdscripts/initramfs-framework/udev         |    6 +--
 .../initrdscripts/initramfs-framework_1.0.bb       |    2 +
 .../initrdscripts/initramfs-live-boot_1.0.bb       |    2 +-
 4 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/meta/recipes-core/initrdscripts/files/init-live.sh 
b/meta/recipes-core/initrdscripts/files/init-live.sh
index 5682fd1..229a71e 100644
--- a/meta/recipes-core/initrdscripts/files/init-live.sh
+++ b/meta/recipes-core/initrdscripts/files/init-live.sh
@@ -14,12 +14,14 @@ early_setup() {
     mkdir -p /sys
     mount -t proc proc /proc
     mount -t sysfs sysfs /sys
+    mount -t devtmpfs none /dev
 
     # support modular kernel
     modprobe isofs 2> /dev/null
 
     mkdir -p /run
-    udevd --daemon
+    mkdir -p /var/run
+    /lib/udev/udevd --daemon
     udevadm trigger --action=add
 }
 
@@ -68,13 +70,50 @@ fatal() {
 
 early_setup
 
+# wait for the udevd to settle
+echo "Waiting for udev to settle..."
+sleep 3
+
 [ -z "$CONSOLE" ] && CONSOLE="/dev/console"
 
 read_args
 
-echo "Waiting for removable media..."
-while true
+# boot partiton menu, if one or more bootable partitions exist
+BOOTMENU=`ls /media/sd*/sbin/init 2>/dev/null | wc -l`
+if [ $BOOTMENU -gt 0 ]; then
+       choice=0
+       echo "1). boot live ramfs image (default)"
+       count=2
+       for i in `ls /media/sd*/sbin/init 2>/dev/null | cut -d "/" -f 3`; do
+               echo $count"). boot /dev/"$i
+               eval choicecmd$count=$i
+               count=$(( count + 1))
+       done
+       echo
+       echo -n "Your choice (timeout 3 seconds): "
+       read -t 3 choice
+       if [ $choice -le 0 ]; then
+               choice=1 #default value
+       fi
+       
+       if [ $choice -gt 1 ]; then 
+               eval ROOT_MOUNT=/media/\$choicecmd$choice
+
+               echo "Booting local root ... $ROOT_MOUNT"
+               if [ -d $ROOT_MOUNT ]; then
+                       boot_live_root
+               else
+                       fatal "Rootfs partition not mounted"
+               fi
+       fi
+fi     
+
+echo -n "Waiting for removable media... "
+CNT=0
+while [ $CNT -le 3 ];
 do
+  echo -n "$CNT "
+  CNT=$(( $CNT + 1 ))
   for i in `ls /media 2>/dev/null`; do
       if [ -f /media/$i/$ROOT_IMAGE ] ; then
                found="yes"
@@ -82,7 +121,7 @@ do
          elif [ -f /media/$i/isolinux/$ROOT_IMAGE ]; then
                found="yes"
                ISOLINUX="isolinux"
-               break   
+               break
       fi
   done
   if [ "$found" = "yes" ]; then
@@ -90,13 +129,14 @@ do
   fi
   sleep 1
 done
+if [ "$found" != "yes" ]; then
+       fatal "...could not mount removable media, drop to shell"
+fi
 
 case $label in
     boot)
        mkdir $ROOT_MOUNT
        mknod /dev/loop0 b 7 0 2>/dev/null
-
-       
        if [ "$UNIONFS" = "yes" ]; then
            mkdir /rootfs-tmp
 
diff --git a/meta/recipes-core/initrdscripts/initramfs-framework/udev 
b/meta/recipes-core/initrdscripts/initramfs-framework/udev
index 9ea8aa3..15a1d5b 100644
--- a/meta/recipes-core/initrdscripts/initramfs-framework/udev
+++ b/meta/recipes-core/initrdscripts/initramfs-framework/udev
@@ -3,8 +3,8 @@
 # Licensed on MIT
 
 udev_enabled() {
-       if [ ! -e /sbin/udevd ]; then
-               debug "/sbin/udev doesn't exist"
+       if [ ! -e /lib/udev/udevd ]; then
+               debug "/lib/udev/udev doesn't exist"
                return 1
        fi
 
@@ -14,7 +14,7 @@ udev_enabled() {
 udev_run() {
        mkdir -p /run
 
-       udevd --daemon > /dev/null
+       /lib/udev/udevd --daemon > /dev/null
        udevadm trigger --action=add
        udevadm settle
 
diff --git a/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb 
b/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb
index 58e41d4..45d6592 100644
--- a/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb
@@ -3,6 +3,8 @@ LICENSE = "MIT"
 LIC_FILES_CHKSUM = 
"file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 RDEPENDS = "busybox"
 
+PR = "r1"
+
 inherit allarch
 
 SRC_URI = "file://init \
diff --git a/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb 
b/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
index 137a401..55a8600 100644
--- a/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
+++ b/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
@@ -5,7 +5,7 @@ RDEPENDS = "udev"
 DEPENDS = "virtual/kernel"
 SRC_URI = "file://init-live.sh"
 
-PR = "r10"
+PR = "r11"
 
 do_compile() {
        #if grep -q "CONFIG_UNION_FS=y" ${STAGING_KERNEL_DIR}/.config; then
-- 
1.7.10.4


_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to