poky/meta/recipes-core/initrdscripts/initramfs-framework/finish
Christos Gavros 07b2d077c7 initramfs-framework: remove hard dependency with busybox
In 'finish'script the Switch_root command with option -c is busybox specific.
When package-core-base-utils is selected the boot is breaking with message
"Switch_root: invalid option — ‘c’.It was reproduced using qemu.
Remove -c option to make it compatible with both providers.
It is tested using qemu with busybox and package-core-base-utils. In both cases
qemu boots successfully and filesystem is accessible.
Fixes [YOCTO #15716]

CC: Yoann Congal <yoann.congal@smile.fr>
CC: Randy MacLeod <randy.macleod@windriver.com>
CC: jbk <jbk@mm-software.com>
CC: Raj Khem <raj.khem@gmail.com>
CC: Adrian Freihofer <adrian.freihofer@gmail.com>
(From OE-Core rev: 0f745024fd40518f98390008b4f613d5641df416)

Signed-off-by: Christos Gavros <gavrosc@yahoo.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2025-04-11 11:49:59 +01:00

1.4 KiB
Executable File

#!/bin/sh

Copyright (C) 2011 O.S. Systems Software LTDA.

Licensed on MIT

finish_enabled() { return 0 }

finish_run() { if [ -n "$ROOTFS_DIR" ]; then if [ ! -d $ROOTFS_DIR/dev ]; then fatal "ERROR: There's no '/dev' on rootfs." fi

	# Unmount anything that was automounted by busybox via mdev-mount.sh.
	# We're about to switch_root, and leaving anything mounted will prevent
	# the next rootfs from modifying the block device.  Ignore ROOT_DISK,
	# if it was set by setup-live, because it'll be mounted over loopback
	# to ROOTFS_DIR.
	local dev
	for dev in /run/media/*; do
		if mountpoint -q "${dev}" && [ "${dev##*/}" != "${ROOT_DISK}" ]; then
			umount -f "${dev}" || debug "Failed to unmount ${dev}"
		fi
	done

	info "Switching root to '$ROOTFS_DIR'..."

	debug "Moving basic mounts onto rootfs"
	for dir in `awk '/\/dev.* \/run\/media/{print $2}' /proc/mounts`; do
		# Parse any OCT or HEX encoded chars such as spaces
		# in the mount points to actual ASCII chars
		dir=`printf $dir`
		mkdir -p "${ROOTFS_DIR}/media/${dir##*/}"
		mount -n --move "$dir" "${ROOTFS_DIR}/media/${dir##*/}"
	done

	debug "Moving /dev, /proc and /sys onto rootfs..."
	mount --move /dev $ROOTFS_DIR/dev
	mount --move /proc $ROOTFS_DIR/proc
	mount --move /sys $ROOTFS_DIR/sys

	cd $ROOTFS_DIR
	exec switch_root $ROOTFS_DIR ${bootparam_init:-/sbin/init}
else
	debug "No rootfs has been set"
fi

}