From: Marc Gilet <pw.marcus@laposte.net>
To: Khem Raj <raj.khem@gmail.com>, yocto@yoctoproject.org
Subject: Re: Waiting for removable media ...
Date: Wed, 30 Jul 2014 18:27:38 +0200 [thread overview]
Message-ID: <53D91CFA.7070900@laposte.net> (raw)
In-Reply-To: <CAMKF1sqAj8WQWea8xJSkGTswN5uACafcDVfs+kvN2hckSKt+4Q@mail.gmail.com>
Le 30/07/2014 07:59, Khem Raj a écrit :
> On Tue, Jul 29, 2014 at 8:13 AM, Marc Gilet <pw.marcus@laposte.net> wrote:
>> Hello,
>> I'd like to use Yocto with a thinclient (Fujitsu siemens Futro B100)
>> I've created a BSP for this platform, and configured the kernel for this
>> machine.
>> I've built an initramfs and a kernel to boot the thinclient via a PXE
>> server, it boots, but the boot process
>> hangs with this massage:" Waiting for removable media ..."
>>
>> Here's what I did:
>>
>> $ git clone git://git.yoctoproject.org/poky
>> $ cd poky/
>> $ source oe-init-build-env
>> $ created the BSP with the "yocto-bsp" script
>> $ bitbake linux-yocto -c menuconfig (the kernel is configured with
>> "CONFIG_DEVTMPFS=y" and "CONFIG_DEVTMPFS_MOUNT=y")
>> $ bitbake -k core-image-minimal-initramfs
>>
>> Does anybody knows where it could come from ?
> This is in initramfs startup script see,
> recipes-core/initrdscripts/files/init-live.sh
> that script is meant for live boot from media. You have to retool it
> to fit your boot
> environment and method
>
>> Cheers
>> --
>> _______________________________________________
>> yocto mailing list
>> yocto@yoctoproject.org
>> https://lists.yoctoproject.org/listinfo/yocto
I thought about modifying this file
(/recipes-core/initrdscripts/files/init-live.sh/)
But how ?
The boot process is waiting for the rootfs on /dev/sdx...
How to change it ?
Here's the content of "init-live.sh":
-------------------------------------------------------------------------------------------------------------------------------------------------------
/#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
ROOT_MOUNT="/rootfs/"
ROOT_IMAGE="rootfs.img"
MOUNT="/bin/mount"
UMOUNT="/bin/umount"
ISOLINUX=""
ROOT_DISK=""
# Copied from initramfs-framework. The core of this script probably
should be
# turned into initramfs-framework modules to reduce duplication.
udev_daemon() {
OPTIONS="/sbin/udev/udevd /sbin/udevd /lib/udev/udevd
/lib/systemd/systemd-udevd"
for o in $OPTIONS; do
if [ -x "$o" ]; then
echo $o
return 0
fi
done
return 1
}
_UDEV_DAEMON=`udev_daemon`
early_setup() {
mkdir -p /proc
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
mkdir -p /var/run
$_UDEV_DAEMON --daemon
udevadm trigger --action=add
}
read_args() {
[ -z "$CMDLINE" ] && CMDLINE=`cat /proc/cmdline`
for arg in $CMDLINE; do
optarg=`expr "x$arg" : 'x[^=]*=\(.*\)'`
case $arg in
root=*)
ROOT_DEVICE=$optarg ;;
rootimage=*)
ROOT_IMAGE=$optarg ;;
rootfstype=*)
modprobe $optarg 2> /dev/null ;;
LABEL=*)
label=$optarg ;;
video=*)
video_mode=$arg ;;
vga=*)
vga_mode=$arg ;;
console=*)
if [ -z "${console_params}" ]; then
console_params=$arg
else
console_params="$console_params $arg"
fi ;;
debugshell*)
if [ -z "$optarg" ]; then
shelltimeout=30
else
shelltimeout=$optarg
fi
esac
done
}
boot_live_root() {
# Watches the udev event queue, and exits if all current events are
handled
udevadm settle --timeout=3 --quiet
killall "${_UDEV_DAEMON##*/}" 2>/dev/null
# Allow for identification of the real root even after boot
mkdir -p ${ROOT_MOUNT}/media/realroot
mount -n --move "/run/media/${ROOT_DISK}" ${ROOT_MOUNT}/media/realroot
# Move the mount points of some filesystems over to
# the corresponding directories under the real root filesystem.
for dir in `awk '/\/dev.* \/run\/media/{print $2}' /proc/mounts`; do
mkdir -p ${ROOT_MOUNT}/media/${dir##*/}
mount -n --move $dir ${ROOT_MOUNT}/media/${dir##*/}
done
mount -n --move /proc ${ROOT_MOUNT}/proc
mount -n --move /sys ${ROOT_MOUNT}/sys
mount -n --move /dev ${ROOT_MOUNT}/dev
cd $ROOT_MOUNT
# busybox switch_root supports -c option
exec switch_root -c /dev/console $ROOT_MOUNT /sbin/init $CMDLINE ||
fatal "Couldn't switch_root, dropping to shell"
}
fatal() {
echo $1 >$CONSOLE
echo >$CONSOLE
exec sh
}
early_setup
[ -z "$CONSOLE" ] && CONSOLE="/dev/console"
read_args
echo "Waiting for removable media..."
C=0
while true
do
for i in `ls /run/media 2>/dev/null`; do
if [ -f /run/media/$i/$ROOT_IMAGE ] ; then
found="yes"
ROOT_DISK="$i"
break
elif [ -f /run/media/$i/isolinux/$ROOT_IMAGE ]; then
found="yes"
ISOLINUX="isolinux"
ROOT_DISK="$i"
break
fi
done
if [ "$found" = "yes" ]; then
break;
fi
# don't wait for more than $shelltimeout seconds, if it's set
if [ -n "$shelltimeout" ]; then
echo -n " " $(( $shelltimeout - $C ))
if [ $C -ge $shelltimeout ]; then
echo "..."
echo "Mounted filesystems"
mount | grep media
echo "Available block devices"
cat /proc/partitions
fatal "Cannot find $ROOT_IMAGE file in /run/media/* ,
dropping to a shell "
fi
C=$(( C + 1 ))
fi
sleep 1
done
# Try to mount the root image read-write and then boot it up.
# This function distinguishes between a read-only image and a read-write
image.
# In the former case (typically an iso), it tries to make a union mount
if possible.
# In the latter case, the root image could be mounted and then directly
booted up.
mount_and_boot() {
mkdir $ROOT_MOUNT
mknod /dev/loop0 b 7 0 2>/dev/null
if ! mount -o rw,loop,noatime,nodiratime
/run/media/$ROOT_DISK/$ISOLINUX/$ROOT_IMAGE $ROOT_MOUNT ; then
fatal "Could not mount rootfs image"
fi
if touch $ROOT_MOUNT/bin 2>/dev/null; then
# The root image is read-write, directly boot it up.
boot_live_root
fi
# determine which unification filesystem to use
union_fs_type=""
if grep -q -w "overlayfs" /proc/filesystems; then
union_fs_type="overlayfs"
elif grep -q -w "aufs" /proc/filesystems; then
union_fs_type="aufs"
else
union_fs_type=""
fi
# make a union mount if possible
case $union_fs_type in
"overlayfs")
mkdir -p /rootfs.ro /rootfs.rw
if ! mount -n --move $ROOT_MOUNT /rootfs.ro; then
rm -rf /rootfs.ro /rootfs.rw
fatal "Could not move rootfs mount point"
else
mount -t tmpfs -o rw,noatime,mode=755 tmpfs /rootfs.rw
mount -t overlayfs -o "lowerdir=/rootfs.ro,upperdir=/rootfs.rw"
overlayfs $ROOT_MOUNT
mkdir -p $ROOT_MOUNT/rootfs.ro $ROOT_MOUNT/rootfs.rw
mount --move /rootfs.ro $ROOT_MOUNT/rootfs.ro
mount --move /rootfs.rw $ROOT_MOUNT/rootfs.rw
fi
;;
"aufs")
mkdir -p /rootfs.ro /rootfs.rw
if ! mount -n --move $ROOT_MOUNT /rootfs.ro; then
rm -rf /rootfs.ro /rootfs.rw
fatal "Could not move rootfs mount point"
else
mount -t tmpfs -o rw,noatime,mode=755 tmpfs /rootfs.rw
mount -t aufs -o "dirs=/rootfs.rw=rw:/rootfs.ro=ro" aufs
$ROOT_MOUNT
mkdir -p $ROOT_MOUNT/rootfs.ro $ROOT_MOUNT/rootfs.rw
mount --move /rootfs.ro $ROOT_MOUNT/rootfs.ro
mount --move /rootfs.rw $ROOT_MOUNT/rootfs.rw
fi
;;
"")
mount -t tmpfs -o rw,noatime,mode=755 tmpfs $ROOT_MOUNT/media
;;
esac
# boot the image
boot_live_root
}
case $label in
boot)
mount_and_boot
;;
install|install-efi)
if [ -f /run/media/$i/$ISOLINUX/$ROOT_IMAGE ] ; then
./$label.sh $i/$ISOLINUX $ROOT_IMAGE $video_mode $vga_mode
$console_params
else
fatal "Could not find $label script"
fi
# If we're getting here, we failed...
fatal "Installation image failed"
;;
*)
# Not sure what boot label is provided. Try to boot to avoid
locking up.
mount_and_boot
;;
esac
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
/
/Thank's for help
Cheers
prev parent reply other threads:[~2014-07-30 16:20 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-29 15:13 Waiting for removable media Marc Gilet
2014-07-30 5:59 ` Khem Raj
2014-07-30 16:27 ` Marc Gilet [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53D91CFA.7070900@laposte.net \
--to=pw.marcus@laposte.net \
--cc=raj.khem@gmail.com \
--cc=yocto@yoctoproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.