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

Bug#591016: flash-kernel: /usr/share/initramfs-tools/hooks/flash_kernel_set_root mis-detects root filesystems for systems using ubifs



I too use ubifs on a kirkwood platform: eSATA Sheevaplug.

Although the error message is annoying, it's not troublesome.
If resolving root for a specific device fails, couldn't we pick it up
from /proc/cmdline?

* Martin Michlmayr <tbm@cyrius.com> [2010-08-07 19:50:07 -0400]
> I'm sort of leaning towards the last option since it's imho the
> cleanest variant. (The first one probably doesn't work because of
> size constraints and the second assumes that ubifs is built in, which
> I won't guarantee will be the case in the future.)

I agree, in that a uImage / uInitrd will not work across hardware.
However, if the root directive is detected in the cmdline we should be
able to use it.

Currently, I do not use uInitrd and the kernel cmdline being used on the
eSATA Sheevaplug is:

console=ttyS0,115200 ubi.mtd=2,2048 root=ubi0:rootfs rootfstype=ubifs

This allows the device to boot directly to the root device thwarting the
use of initrd. One can simply turn off the uInitrd generation. However,
I do have two / entries in /proc/mounts:

rootfs on / type rootfs (rw)
ubi0:rootfs on / type ubifs (ro,noatime)

and my /etc/fstab / entry looks like:

/dev/root       /               ubifs   defaults,noatime,ro          0 0

The kernel cmdline has been mentioned above.


However, I believe Daniel is correct in saying saving the kernel to
flash should be an option; perhaps configuration driven as uInitrd
generation is.

I wrote a little dash script that I run after a new kernel has been
installed onto the system. I'm just not sure where to put it, so that it
will be hooked into the flash-kernel procedure.

The script is rather spottish and not sure it will work on other
platforms w/o alteration. I will certainly be happy to make the script
more generic, once I know what guidelines must be observed.



___________________________________________

Cellent Finance Solutions AG

Firmensitz: Calwer Straße 33, 70173 Stuttgart
Registergericht: Amtsgericht Stuttgart, HRB 720743
Vorstand: Thomas Wild
Vorsitzender des Aufsichtsrats: Rudolf Zipf
#!/bin/dash

U_IMAGE=/boot/uImage

type flash_erase >/dev/null 2>&1 &&
	type flash_eraseall >/dev/null 2>&1 &&
		type nandwrite >/dev/null 2>&1 || {
			echo "Could not find mtd manipulation utilites." >&2
			echo "Please install package mtd-utils." >&2
			exit 1
		}

# determine root on ubifs
if ! grep -qs '^ubi[0-9]:rootfs ' /proc/mounts; then
	echo "Can not determine whether root on ubifs." >&2
	echo "Not saving $U_IMAGE to flash." >&2
	exit 10
fi

# determine uImage mtd device
mtd_device=$(sed '/"uImage"$/!d; s/:.*//; s/mtd//' /proc/mtd)
if [ -z "$mtd_device" ]; then
	echo "Can not determine uImage mtd device." >&2
	echo "Not saving $U_IMAGE to flash." >&2
	exit 11
fi

[ -r "$U_IMAGE" ] &&
	echo "Saving $U_IMAGE to /dev/mtd${mtd_device}" &&
		flash_erase /dev/mtdblock${mtd_device} &&
			flash_eraseall /dev/mtd${mtd_device} &&
				nandwrite -p /dev/mtd${mtd_device} $U_IMAGE || {
					echo "Failed to save $U_IMAGE to /dev/mtd${mtd_device}" >&2
					exit 20
				}


Reply to: