[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#497133: initramfs-tools: explodes when kernel is booted



Hi,

Along with an earlier submitted patch to include the mtd and jffs modules
in the initrd image, the attached patch is needed for booting with root=mtd0.
Basically, the init scripts assume the root device should have a special
device file somewhere, and if not will wait for it to appear.  This patch
changes it so that it only waits for a device file to appear if $ROOT starts
with "/dev".  In the case of things like ROOT=LABEL=foo, the init scripts
will translate that to a device.  With ROOT=mtd0, the init scripts will not
check for a device, and will successfully mount the root filesystem.
>From 586f67264971f0b8432aa99c13c9e16f009a729f Mon Sep 17 00:00:00 2001
From: Andres Salomon <dilinger@debian.org>
Date: Tue, 14 Oct 2008 18:04:09 -0400
Subject: [PATCH] allow root=mtd0 to be used

skip root checks if ROOT doesn't start with /dev.

Signed-off-by: Andres Salomon <dilinger@debian.org>
---
 debian/changelog |    2 ++
 scripts/local    |   14 ++++++++++++--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 833dcfa..4fdf762 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,8 @@ initramfs-tools (0.92l.1) unstable; urgency=high
   * include mtd/jffs2/ubifs modules when 'most' is selected.
   * add support for linux-2.6's deb-pkg (via /etc/kernel).
   * include video (framebuffer, fbcon) modules when 'most' is selected.
+  * allow root=mtd0 to be used; skip root checks if ROOT doesn't start
+    with /dev.
 
  -- Andres Salomon <dilinger@debian.org>  Tue, 14 Oct 2008 14:16:50 -0400
 
diff --git a/scripts/local b/scripts/local
index 85d62af..b6bd192 100644
--- a/scripts/local
+++ b/scripts/local
@@ -24,8 +24,7 @@ get_fstype ()
 	return ${RET}
 }
 
-# Parameter: Where to mount the filesystem
-mountroot ()
+pre_mountroot()
 {
 	[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top"
 	run_scripts /scripts/local-top
@@ -33,6 +32,12 @@ mountroot ()
 
 	wait_for_udev 10
 
+	# Don't wait for a root device that doesn't have a corresponding
+	# device in /dev (ie, mtd0)
+	if [ "${ROOT#/dev}" = "${ROOT}" ]; then
+		return
+	fi
+
 	# If the root device hasn't shown up yet, give it a little while
 	# to deal with removable devices
 	if [ ! -e "${ROOT}" ] || ! $(get_fstype "${ROOT}" >/dev/null); then
@@ -94,6 +99,11 @@ mountroot ()
 		echo " - Missing modules (cat /proc/modules; ls /dev)"
 		panic "ALERT!  ${ROOT} does not exist.  Dropping to a shell!"
 	done
+}
+
+mountroot()
+{
+	pre_mountroot
 
 	# Get the root filesystem type if not set
 	if [ -z "${ROOTFSTYPE}" ]; then
-- 
1.5.6.5


Reply to: