Author: czarny
Date: Sat Dec  9 23:33:52 2006
New Revision: 8090

Added:
   geninitrd/branches/devel/
      - copied from rev 8089, geninitrd/trunk/
Modified:
   geninitrd/branches/devel/geninitrd
Log:
- added initramfs support
- script now can mount proper root
- uses root kernel parameter
- works both with udev and without
- some simple setup for fbsplash support


Modified: geninitrd/branches/devel/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd   (original)
+++ geninitrd/branches/devel/geninitrd  Sat Dec  9 23:33:52 2006
@@ -41,6 +41,8 @@
 rootdev_nr=0
 # default bootsplash is off, if it have to be on, install bootsplash package
 BOOT_SPLASH=no
+# default same as bootsplash, if on install splashutils and some splashutils 
theme
+FB_SPLASH=no
 
 # is /dev on tmpfs. internal variable
 tmpfs_dev=
@@ -59,7 +61,8 @@
        echo "       [--with=<module>] [--image-version] [--fstab=<fstab>] 
[--nocompress]"
        echo "       [--initrdfs=rom|ext2|cram] [--modules-conf=<modules.conf>]"
        echo "       [--with-raidstart] [--without-raidstart] 
[--with-insmod-static]"
-       echo "       [--without-bootsplash] [--lvmtoolsversion=1|2] 
[--with-udev] [--without-udev]"
+       echo "       [--without-bootsplash] [--without-fbsplash]"
+       echo "       [--lvmtoolsversion=1|2] [--with-udev] [--without-udev]"
        echo "       [--without-suspend] [--without-suspend2] 
[--without-dmraid]"
        echo "       <initrd-image> <kernel-version>"
        echo "       (ex: `basename $0` /boot/initrd-2.2.5-15.img 2.2.5-15)"
@@ -781,6 +784,10 @@
        . /etc/sysconfig/bootsplash
 fi
 
+if [ -r /etc/sysconfig/fbsplash ] ; then
+       . /etc/sysconfig/fbsplash
+fi
+
 if [ ! -x /bin/initrd-busybox ] ; then
        echo "/bin/initrd-busybox is missing !"
        exit 1
@@ -817,6 +824,9 @@
        --without-bootsplash)
                BOOT_SPLASH="no"
                ;;
+       --without-fbsplash)
+               FB_SPLASH="no"
+               ;;
        --without-suspend)
                USE_SUSPEND="no";
                ;;
@@ -915,8 +925,7 @@
 if [ "x" = "x$INITRDFS" ] ; then
        if [ "x" = "x$FS" ] ; then
                # default value
-               # XXX: initramfs blocked for now
-               if [ "1" = " 0" -a "$pack_version" -ge "002005" ] ; then
+               if [ "$pack_version" -ge "002005" ] ; then
                        INITRDFS="initramfs"
                else
                        INITRDFS="rom"
@@ -1047,6 +1056,9 @@
        findmodule "-lzf"
 fi
 
+if is_yes "$FB_SPLASH"; then
+       findmodule "-evdev"
+fi
 if [ -n "$ifneeded" -a -z "$MODULES" ]; then
        debug "No modules are needed -- not building initrd image."
        exit 0
@@ -1464,8 +1476,34 @@
 if [ "$INITRDFS" = "initramfs" ]; then
        mkdir -p $MNTIMAGE/newroot
        cp -HR $org_rootdev $MNTIMAGE/dev
-       echo "mount -t $rootFs $org_rootdev /newroot" >> "$s"
-       echo "switch_root /newroot /sbin/init" >> "$s"
+       echo "mount -t proc none /proc" >> "$s"
+       # the worst part if we don't have udev
+       if [ "$USE_UDEV" != "yes" ]; then
+               # We either have root passed into kernel as /dev/something or 
as a maj-min number
+               # we parse acordingly
+               cat << 'EOF' >> "$s"
+root="$(busybox awk ' /root=/ { gsub(/.*root=/,NIL,$0); gsub(/ .*/,NIL,$0); 
print $0; } ' /proc/cmdline )"
+if [[ "$root" == +(/+([A-z0-9])) ]]; then
+       rootnr="$(busybox awk -v root="$root" ' { if ($4 == root) { print $1 
$2; } } ' /proc/partitions)"
+else
+       rootnr="${root#??} ${root%??}"
+       root="$(busybox awk " \
+               BEGIN { maj=${root#??}; min=${root%??}; } \
+               { if ( (\$1 == maj) && (\$2 == min) ) { print \$4; } } " \
+       /proc/partitions )"
+fi
+mknod $root b $rootnr
+EOF
+       fi
+       cat << EOF >> "$s"
+mount -t $rootFs \$root /newroot 
+init="\$(busybox awk ' /init=\// { gsub(/.*init=/,NIL,\$0); gsub(/ 
.*/,NIL,\$0); print \$0; }  ' /proc/cmdline )"
+if [ -z "\$init" -o ! -n "/newroot\$init" ]; then
+       init=/sbin/init
+fi
+umount /proc
+exec switch_root /newroot \$init
+EOF
        # we need real file, not symlink
        rm -f $MNTIMAGE/init
        cp -a $MNTIMAGE/linuxrc $MNTIMAGE/init
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to