You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
3.4 KiB

#!/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) ..."
echo "" > /sys/kernel/uevent_helper
udevd --daemon
echo "Triggering coldplug ..."
udevtrigger
udevsettle
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