Populating initramfs with BusyBox and uClibc. This tutorial focuses on using initramfs. It covers why you'd want to, how to go about it, and what tools are available, with a special emphasis on using BusyBox and uClibc to easily create initramfs images. The tutorial starts by covering differences between initramfs and initrd (ramfs vs block, archive vs image, bundled vs unbundled, init vs linuxrc), and some advantages of the way initramfs moves more control to userspace (with examples for laptops, embedded systems, clusters, and mainframes). Next comes creating a viable initramfs image, which involves knowledge of the Linux kernel (building, packaging, and calling conventions), populating root filesystems (enumerating and specifying shared libraries, filesystem hierarchy, and the special considerations for PID 1 and /dev/console), and new tools (such as mdev and switch_root) specifically useful in an initramfs environment. After demonstrating a "hello world" initramfs image, the tutorial shows how to debug it under both User Mode Linux and QEMU. It covers convincing gcc to build against something other than glibc (via wrapper script or creating a new toolchain), and why developers might want to do this. It demonstrates simple device and network probing from initramfs (with mdev and udhcpc), handing off control to another init program in another root partition (pivot_root), and extracting an initramfs from an existing kernel image for analysis.