Thursday 15 July 2010

Barebones Linux - EXTLINUX, Kernel, Busybox

# Prerequisites
ncurses, gcc, nasm

# Kernel
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.1.tar.bz2
tar xjf linux-2.6.34.1.tar.bz2
cd linux-2.6.34.1
make menuconfig
make

# Busybox
wget http://busybox.net/downloads/busybox-1.16.2.tar.bz2
tar xjf busybox-1.16.2.tar.bz2
cd busybox-1.16.2
make menuconfig
make
make install

# Syslinux
wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.01.tar.bz2
tar xjf syslinux-4.01.tar.bz2
cd syslinux-4.01
make

# Create root
cd
mkdir -p emame/eroot/{dev/{pts,shm},proc,etc/init.d,tmp,boot}
cd emame/eroot
cp -a /home/cools/busybox-1.16.2/_install/* .
cd boot
cp /home/cools/linux-2.6.34.1/arch/i386/boot/bzImage linux

# Create extlinux.conf in emame/eroot/boot containing
DEFAULT Linux
LABEL Linux
KERNEL /boot/bzImage
APPEND rw root=/dev/sda1 rootdelay=5 video=intelfb

# Create rcS in emame/eroot/etc/init.d containing
#!/bin/sh
mount -a

# Make rcS executable
chmod o+x /home/cools/emame/eroot/etc/init.d/rcS

# Create fstab in emame/eroot/etc/ containing
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /tmp tmpfs defaults,noatime 0 0

# Prepare media
cfdisk /dev/sdb
cat /home/cools/syslinux-4.01/mbr/mbr.bin > /dev/sdb
mke2fs /dev/sdb1
mkdir /mnt/eroot
mount /dev/sdb1 /mnt/eroot
mkdir /mnt/eroot/boot
cd /home/cools/syslinux-4.01/extlinux
./extlinux -i /mnt/eroot/boot

# Copy root to media
cd /mnt/eroot
cp -a /home/cools/emame/eroot/* .
chown -R root:root *

# Unmount - device should now work!
cd
sync
umount /mnt/eroot