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.
126 lines
3.4 KiB
126 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 |
|
|
|
|