|
|
|
#!/bin/sh
|
|
|
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
|
|
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
|
|
|
#
|
|
|
|
# Filename: package/.../mkinitrd/initrdinit.sh
|
|
|
|
# Copyright (C) 2006 The OpenSDE Project
|
|
|
|
# Copyright (C) 2005 - 2006 The T2 SDE Project
|
|
|
|
#
|
|
|
|
# More information can be found in the files COPYING and README.
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation; version 2 of the License. A copy of the
|
|
|
|
# GNU General Public License can be found in the file COPYING.
|
|
|
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
|
|
|
|
|
|
|
echo "Entering early userspace ..."
|
|
|
|
|
|
|
|
PATH=/sbin:/bin
|
|
|
|
|
|
|
|
echo "Mounting /dev, /proc and /sys ..."
|
|
|
|
mount -t tmpfs none /dev
|
|
|
|
mount -t proc none /proc
|
|
|
|
mount -t usbfs none /proc/bus/usb
|
|
|
|
mount -t sysfs none /sys
|
|
|
|
ln -s /proc/self/fd /dev/fd
|
|
|
|
|
|
|
|
if [ ! -c /dev/console ]; then
|
|
|
|
mknod /dev/console c 5 1
|
|
|
|
fi
|
|
|
|
if [ ! -c /dev/null ]; then
|
|
|
|
mknod /dev/null c 1 3
|
|
|
|
fi
|
|
|
|
if [ ! -c /dev/zero ]; then
|
|
|
|
mknod /dev/zero c 1 5
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Populating /dev (u/dev) ..."
|
|
|
|
udevd --daemon
|
|
|
|
udevtrigger
|
|
|
|
|
|
|
|
echo "Running hotplug++ ..."
|
|
|
|
/sbin/hotplug++ -synth
|
|
|
|
|
|
|
|
echo "Loading additional subsystem and filesystem driver ..."
|
|
|
|
# hack to be removed
|
|
|
|
modprobe sbp2
|
|
|
|
|
|
|
|
# well some hardcoded help for now ...
|
|
|
|
modprobe ide-generic
|
|
|
|
modprobe ide-disk
|
|
|
|
modprobe ide-cd
|
|
|
|
modprobe sd_mod
|
|
|
|
modprobe sr_mod
|
|
|
|
modprobe sg
|
|
|
|
|
|
|
|
# the modular filesystems ...
|
|
|
|
for x in /lib/modules/*/kernel/fs/{*/,}*.*o ; do
|
|
|
|
x=${x##*/} ; x=${x%.*o}
|
|
|
|
modprobe $x
|
|
|
|
done
|
|
|
|
|
|
|
|
echo "Mounting rootfs ..."
|
|
|
|
|
|
|
|
# get the root device and init
|
|
|
|
root="root= `cat /proc/cmdline`" ; root=${root##*root=} ; root=${root%% *}
|
|
|
|
init="init= `cat /proc/cmdline`" ; init=${init##*init=} ; init=${init%% *}
|
|
|
|
|
|
|
|
# try best match / detected rootfs first, all the others thereafter
|
|
|
|
filesystems=`disktype $root 2>/dev/null |
|
|
|
|
sed -e '/file system/!d' -e 's/file system.*//' -e 's/ //g' \
|
|
|
|
-e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' \
|
|
|
|
-e 's/fat32/vfat/'
|
|
|
|
sed '1!G ; $p ; h ; d' /proc/filesystems | sed /^nodev/d`
|
|
|
|
|
|
|
|
mkdir /rootfs
|
|
|
|
|
|
|
|
if [ "$root" ]; then
|
|
|
|
i=0
|
|
|
|
while [ $i -le 9 ]; do
|
|
|
|
for fs in $filesystems ; do
|
|
|
|
if mount -t $fs $root /rootfs -o ro 2> /dev/null; then
|
|
|
|
echo "Successfully mounted rootfs as $fs."
|
|
|
|
|
|
|
|
# TODO: later on search other places if we want 100% backward compat.
|
|
|
|
[ "$init" ] || init=/sbin/init
|
|
|
|
if [ -f /rootfs/$init ]; then
|
|
|
|
mount -t none /dev -o move /rootfs/dev
|
|
|
|
mount -t none /proc -o move /rootfs/proc
|
|
|
|
mount -t none /sys -o move /rootfs/sys
|
|
|
|
|
|
|
|
if [ ! -c /rootfs/dev/console ]; then
|
|
|
|
mknod /rootfs/dev/console c 5 1
|
|
|
|
fi
|
|
|
|
if [ ! -c /rootfs/dev/null ]; then
|
|
|
|
mknod /rootfs/dev/null c 1 3
|
|
|
|
fi
|
|
|
|
if [ ! -c /rootfs/dev/zero ]; then
|
|
|
|
mknod /rootfs/dev/zero c 1 5
|
|
|
|
fi
|
|
|
|
if [ ! -c /rootfs/dev/tty ]; then
|
|
|
|
mknod /rootfs/dev/tty c 5 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Before we switch to the real root
|
|
|
|
# we have to kill udevd
|
|
|
|
ls -1l /rootfs/proc/*/exe 2> /dev/null | \
|
|
|
|
sed -n -e "s,.*/proc/\([0-9]*\)/.*udevd.*,kill \1,p" | \
|
|
|
|
/bin/sh
|
|
|
|
|
|
|
|
# enter the systems root
|
|
|
|
exec switch_root /rootfs $init $*
|
|
|
|
else
|
|
|
|
echo "Specified init ($init) does not exist!"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
[ $(( i++ )) -eq 0 ] && echo "Waiting for root device to become ready ..."
|
|
|
|
sleep 1
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Ouhm - some boot problem, but I do not scream. Debug shell:"
|
|
|
|
exec /bin/sh
|
|
|
|
|