apt-get install gcc-arm-linux-gnueabihf qemu
mkdir qemu-arm-sandbox && cd qemu-arm-sandbox
wget <link_to_kernel_tar_file> && tar xvf <linux_tar_file>
wget <link_to_busybox_tar_file> && tar xvf <busybox_tar_file>
cd <linux_dir>
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
cd <busybox_dir>
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfing
Busybox Settings ==> Build Options SELECT Build BusyBox as a static binary(no shared libs)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- install
cd _install
mkdir proc sys dev etc etc/init.d
Create etc/init.d/rcS file and enter the following shell code
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
chmod +x etc/init.d/rcS
find . | cpio -o --format=newc > ../rootfs.img
cd back to qemu-arm-sandbox
qemu-system-arm -m 256 -M virt -kernel <linux_dir>/arch/arm/boot/zImage -initrd <busybox_dir>/rootfs.img -nographic -append "console=ttyAMA0 root=/dev/ram rdinit=/sbin/init"