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