diff options
3 files changed, 60 insertions, 34 deletions
| diff --git a/meta/recipes-core/initrdscripts/initramfs-framework/finish b/meta/recipes-core/initrdscripts/initramfs-framework/finish index d09bbb8bed..717383ebac 100755 --- a/meta/recipes-core/initrdscripts/initramfs-framework/finish +++ b/meta/recipes-core/initrdscripts/initramfs-framework/finish @@ -8,39 +8,6 @@ finish_enabled() {  finish_run() {  	if [ -n "$ROOTFS_DIR" ]; then -		if [ -n "$bootparam_rootdelay" ]; then -			debug "Sleeping for $rootdelay second(s) to wait root to settle..." -			sleep $bootparam_rootdelay -		fi - -		if [ -n "$bootparam_root" ]; then -			debug "No e2fs compatible filesystem has been mounted, mounting $bootparam_root..." - -			if [ "`echo ${bootparam_root} | cut -c1-5`" = "UUID=" ]; then -				root_uuid=`echo $bootparam_root | cut -c6-` -				bootparam_root="/dev/disk/by-uuid/$root_uuid" -			fi - -			if [ -e "$bootparam_root" ]; then -				flags="" -				if [ -n "$bootparam_ro" ]; then -					if [  -n "$bootparam_rootflags" ]; then -						bootparam_rootflags="$bootparam_rootflags," -					fi -					bootparam_rootflags="${bootparam_rootflags}ro" -				fi -				if [ -n "$bootparam_rootflags" ]; then -					flags="$flags -o$bootparam_rootflags" -				fi -				if [ -n "$bootparam_rootfstype" ]; then -					flags="$flags -t$bootparam_rootfstype" -				fi -				mount $flags $bootparam_root $ROOTFS_DIR -			else -				msg "root '$bootparam_root' doesn't exist." -			fi -		fi -  		if [ ! -d $ROOTFS_DIR/dev ]; then  			fatal "ERROR: There's no '/dev' on rootfs."  		fi diff --git a/meta/recipes-core/initrdscripts/initramfs-framework/rootfs b/meta/recipes-core/initrdscripts/initramfs-framework/rootfs new file mode 100644 index 0000000000..5790d8cb8b --- /dev/null +++ b/meta/recipes-core/initrdscripts/initramfs-framework/rootfs @@ -0,0 +1,57 @@ +#!/bin/sh +# Copyright (C) 2011 O.S. Systems Software LTDA. +# Licensed on MIT + +rootfs_enabled() { +	return 0 +} + +rootfs_run() { +        if [ -z "$ROOTFS_DIR" ]; then +		return +        fi +	C=0 +	delay=${bootparam_rootdelay:-1} +	timeout=${bootparam_roottimeout:-5} +	while [ ! -d $ROOTFS_DIR/dev ]; do +		if [ $(( $C * $delay )) -gt $timeout ]; then +			fatal "root '$bootparam_root' doesn't exist or does not contain a /dev." +		fi + +		if [ -n "$bootparam_root" ]; then +			debug "No e2fs compatible filesystem has been mounted, mounting $bootparam_root..." + +			if [ "`echo ${bootparam_root} | cut -c1-5`" = "UUID=" ]; then +				root_uuid=`echo $bootparam_root | cut -c6-` +				bootparam_root="/dev/disk/by-uuid/$root_uuid" +			fi + +			if [ -e "$bootparam_root" ]; then +				flags="" +				if [ -n "$bootparam_ro" ] && ! echo "$bootparam_rootflags" | grep -w -q "ro"; then +					if [  -n "$bootparam_rootflags" ]; then +						bootparam_rootflags="$bootparam_rootflags," +					fi +					bootparam_rootflags="${bootparam_rootflags}ro" +				fi +				if [ -n "$bootparam_rootflags" ]; then +					flags="$flags -o$bootparam_rootflags" +				fi +				if [ -n "$bootparam_rootfstype" ]; then +					flags="$flags -t$bootparam_rootfstype" +				fi +				mount $flags $bootparam_root $ROOTFS_DIR +				if [ -d $ROOTFS_DIR/dev ]; then +					break +				else +					# It is unlikely to change, but keep trying anyway. +					# Perhaps we pick a different device next time. +					umount $ROOTFS_DIR +					fi +				fi +		fi +		debug "Sleeping for $delay second(s) to wait root to settle..." +		sleep $delay +		C=$(( $C + 1 )) +	done +} diff --git a/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb index e5cf9cb4dd..89e153d348 100644 --- a/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb +++ b/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb @@ -8,6 +8,7 @@ PR = "r2"  inherit allarch  SRC_URI = "file://init \ +           file://rootfs \             file://finish \             file://mdev \             file://udev \ @@ -21,6 +22,7 @@ do_install() {      # base      install -m 0755 ${WORKDIR}/init ${D}/init +    install -m 0755 ${WORKDIR}/rootfs ${D}/init.d/90-rootfs      install -m 0755 ${WORKDIR}/finish ${D}/init.d/99-finish      # mdev @@ -47,7 +49,7 @@ PACKAGES = "${PN}-base \              initramfs-module-e2fs \              initramfs-module-debug" -FILES_${PN}-base = "/init /init.d/99-finish /dev" +FILES_${PN}-base = "/init /init.d/90-rootfs /init.d/99-finish /dev"  SUMMARY_initramfs-module-mdev = "initramfs support for mdev"  RDEPENDS_initramfs-module-mdev = "${PN}-base busybox-mdev" | 
