[[initramfs]]
 

initramfs

1. Create structure

mkdir /usr/src/initramfs
cd /usr/src/initramfs
mkdir -p bin lib dev etc mnt/root proc root sbin sys

2. Build busybox

USE="static" emerge --root=/usr/src/initramfs/ -v busybox

3. Copy minimal device nodes

cp -a /dev/{null,console,tty,sd??} /usr/src/initramfs/dev/

4. Create /usr/src/initramfs/init

#!/bin/busybox sh

# Mount the /proc and /sys filesystems.
mount -t proc none /proc
mount -t sysfs none /sys

#setup mdev 
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s

# Do your stuff here.
echo "This script mounts rootfs and boots it up, nothing more!"

rescue_shell() {
    echo "Something went wrong. Dropping you to a shell."
    busybox --install -s
    exec /bin/sh
}

uuidlabel_root() {
    for cmd in $(cat /proc/cmdline) ; do
        case $cmd in
        root=*)
            dev=${cmd#root=}
            type=${dev%%=*}
            if [ $type = "LABEL" ] || [ $type = "UUID" ] ; then
                mount -o ro $(findfs "$dev") /mnt/root
            else
                mount -o ro ${dev} /mnt/root
            fi
            ;;
        esac
    done
}

# Mount the root filesystem.
uuidlabel_root || rescue_shell

# Clean up.
umount /proc
umount /sys

# Boot the real thing.
exec switch_root /mnt/root /sbin/init
chmod +x /usr/src/initramfs/init

5. Installing options

5.1. Built into kernel (my prefered way)

cd /usr/src/linux
make menuconfig
General setup  ---> 
  [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support 
  (/usr/src/initramfs) Initramfs source file(s) 


make -j4 && make modules_install

5.2. Build a initrd for grub

cd /usr/src/initramfs/ find . -print0 | cpio –null -ov –format=newc | gzip -9 > /boot/initramfs.cpio.gz

edit grub < 1.0(add the initrd line):

  title Gentoo
  root (hd0,0)
  kernel /kernel64
  initrd /initramfs.cpio.gz

edit grub > 2

menuentry 'Gentoo 64 Linux (UUID)' {
        root=hd0,1
        linux /boot/kernel64 root=UUID=d2e3c17f-75db-4c95-87ce-760c8e41e2ca
        initrd  /boot/initramfs.cpio.gz
}
initramfs.txt · Last modified: 2013/06/04 10:13 by paulsmith
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 4.0 International
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki