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 | 
						|
 | 
						|
 |