summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorroot <root@europa5.lan>2009-03-21 11:49:00 +0100
committerroot <root@europa5.lan>2009-03-21 11:49:00 +0100
commit3a467eff5e435b5709d48f9d6cb48859925be5b8 (patch)
treed595bf80ef1f60eba722c8862634051f881dc911 /Makefile
downloadminilinux-3a467eff5e435b5709d48f9d6cb48859925be5b8.tar.gz
minilinux-3a467eff5e435b5709d48f9d6cb48859925be5b8.tar.bz2
checked in initial version
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile229
1 files changed, 229 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..263b3b3
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,229 @@
+help:
+ @echo "Build a minimal Linux system"
+ @echo ""
+ @echo "all - create all images"
+ @echo "qemu - create an image for QEMU"
+ @echo "vdi - create an image for VirtualBox"
+ @echo "vmdk - create an image for VMware"
+ @echo ""
+ @echo "clean - cleanup build artifacts"
+ @echo ""
+ @echo "run minimal Linux for example with 'qema -hda minilinux.img'"
+
+.PHONY: help run all step1 step2 step3 step4 step5 mount-disk umount-disk mount-root umount-root
+
+all: qemu vdi vmdk zip-vdi zip-vmdk
+
+vdi:
+ -rm -f minilinux.vdi
+ ./vditool DD minilinux.vdi minilinux.img
+ ./vditool SHRINK minilinux.vdi
+ chmod 666 minilinux.vdi
+
+vmdk:
+ qemu-img convert -f raw minilinux.img -O vmdk minilinux.vmdk
+ chmod 666 minilinux.vmdk
+ chmod 777 minilinux.vmx
+
+zip-vdi:
+ zip -9 -v -u minilinux.zip minilinux.vdi
+ mv minilinux.zip minilinux-virtualbox.zip
+
+zip-vmdk:
+ zip -9 -v -u minilinux minilinux.vmx minilinux.vmdk
+ mv minilinux.zip minilinux-vmware.zip
+
+qemu: clean step1 step2 step3 step4 step5 umount-root
+
+#step1: crosstools
+step1:
+
+step2: disk-image mount-root directory-layout initial-devices
+
+step3: grub grub-loader
+
+#step4: kernel uclibc busybox
+step4: kernel busybox gpm
+
+step5: perl
+
+# disk image and directories
+
+directory-layout:
+ cd target && mkdir bin boot dev etc home lib mnt root sbin tmp usr var proc sys
+ cd target/boot && mkdir grub
+ cd target/var && mkdir lock log run spool
+ cd target/usr && mkdir bin include lib local sbin share src
+ cd target/usr/share && mkdir man
+ cd target/usr/share/man && mkdir man1 man2 man3 man4 man5 man6 man7 man8 man9
+ cd target/usr && ln -s share/man man
+ cd target/etc && mkdir init.d
+ cp inittab passwd group nsswitch.conf hosts motd issue target/etc
+ cp rcS target/etc/init.d
+
+initial-devices:
+ rm -rf target/dev/*
+ mknod target/dev/console c 5 1
+ mknod target/dev/null c 1 3
+ mknod target/dev/zero c 1 5
+ mknod target/dev/hda b 3 0
+ mknod target/dev/hda1 b 3 1
+ mknod target/dev/tty0 c 4 0
+ mknod target/dev/tty1 c 4 1
+ mknod target/dev/tty2 c 4 2
+ mknod target/dev/tty3 c 4 3
+ mknod target/dev/tty4 c 4 4
+ mknod target/dev/tty5 c 4 5
+ mknod target/dev/tty6 c 4 6
+ mknod target/dev/ttyS0 c 4 64
+ mknod target/dev/psaux c 10 1
+
+disk-image:
+ qemu-img create minilinux.img 16065
+ chmod 666 minilinux.img
+ /sbin/losetup /dev/loop0 minilinux.img
+ dd if=/dev/zero of=/dev/loop0 bs=1024 count=2048
+ dd if=mbr of=/dev/loop0 bs=512 count=1
+ echo ',2,L' | /sbin/sfdisk -H 255 -S 63 -C 2 --no-reread /dev/loop0
+ /sbin/losetup -d /dev/loop0
+ /sbin/losetup -o 512 /dev/loop0 minilinux.img
+ /sbin/mke2fs /dev/loop0
+ losetup -d /dev/loop0
+ mkdir target
+
+# grub boot loeader
+
+grub:
+ tar zxf tarballs/grub-0.97.tar.gz
+ mkdir grub-build && cd grub-build && ../grub-0.97/configure --prefix=`pwd`
+ cd grub-build && make
+ cd grub-build && make install
+ cp grub-build/lib/grub/i386-pc/stage1 target/boot/grub
+ cp grub-build/lib/grub/i386-pc/stage2 target/boot/grub
+ cp menu.lst target/boot/grub
+
+grub-loader:
+ -umount target
+ -mknod /dev/loop0 b 7 0
+ -mknod /dev/loop1 b 7 0
+ -/sbin/losetup -d /dev/loop0
+ -/sbin/losetup -d /dev/loop1
+ /sbin/losetup -o 512 /dev/loop1 minilinux.img
+ ln -s /dev/loop1 /dev/loop01
+ /sbin/losetup /dev/loop0 minilinux.img
+ grub-build/sbin/grub --batch --no-floppy --device-map=devices.map < grub.install
+ /sbin/losetup -d /dev/loop0
+ /sbin/losetup -d /dev/loop1
+ rm /dev/loop01
+ /sbin/losetup -o 512 /dev/loop0 minilinux.img
+ mount /dev/loop0 target
+
+grub-clean:
+ -rm -rf grub-build
+ -rm -rf grub-0.97
+
+# Linux kernel
+
+kernel:
+ -rm -rf linux-2.6.28.8
+ tar jxf tarballs/linux-2.6.28.8.tar.bz2
+ cp kernel-config linux-2.6.28.8/.config
+ cd linux-2.6.28.8 && make bzImage
+ cp linux-2.6.28.8/arch/i386/boot/bzImage target/boot/bzImage-2.6.28.8
+
+kernel-clean:
+ -rm -rf linux-2.6.28.8
+
+# micro C library
+
+uclibc:
+ -rm -rf uClibc-0.9.30.1
+ tar jxf tarballs/uClibc-0.9.30.1.tar.bz2
+ cp uclibc-config uClibc-0.9.30.1/.config
+ cd uClibc-0.9.30.1 && make CROSS=i486-pc-linux-gnu-
+ cd uClibc-0.9.30.1 && make install DESTDIR=/tools
+
+uclibc-clean:
+ -rm -rf uClibc-0.9.30.1
+
+# busybox
+
+busybox:
+ -rm -rf busybox-1.13.3
+ tar jxf tarballs/busybox-1.13.3.tar.bz2
+ cp busybox-config busybox-1.13.3/.config
+ cd busybox-1.13.3 && make
+ cd busybox-1.13.3 && make install
+ cp /lib/libcrypt.so.1 target/lib
+ cp /lib/ld-linux.so.2 target/lib
+ cp /lib/libm.so.6 target/lib
+ cp /lib/libc.so.6 target/lib
+ cp /lib/libdl.so.2 target/lib
+ cp /lib/libpthread.so.0 target/lib
+ -cp /lib/libpcre.so.0 target/lib
+ -cp /usr/lib/libpcre.so.3 target/lib
+
+
+busybox-clean:
+ -rm -rf busybox-1.13.3
+
+gpm:
+ -rm -rf gpm-1.20.6
+ tar jxf tarballs/gpm-1.20.6.tar.bz2
+ cd gpm-1.20.6 && ./configure --prefix=/usr --without-curses
+ cd gpm-1.20.6 && make LDFLAGS="-lm"
+ cd gpm-1.20.6 && cp src/gpm ../target/usr/sbin
+
+gpm-clean:
+ -rm -rf gpm-1.20.6
+
+perl:
+ -rm -rf perl-5.10.0
+ tar zxf tarballs/perl-5.10.0.tar.gz
+ cd perl-5.10.0 && make -f Makefile.micro
+ cd perl-5.10.0 && cp microperl ../target/usr/bin/perl
+
+perl-clean:
+ -rm -rf perl-5.10.0
+
+# helpers
+
+mount-disk:
+ /sbin/losetup /dev/loop0 minilinux.img
+
+umount-disk:
+ /sbin/losetup -d /dev/loop0
+
+mount-root:
+ /sbin/losetup -o 512 /dev/loop0 minilinux.img
+ mount /dev/loop0 target
+
+umount-root:
+ umount target
+ /sbin/losetup -d /dev/loop0
+
+# global clean
+
+clean: clean-cross-binutils clean-cross-gcc grub-clean uclibc-clean kernel-clean crosstools-clean busybox-clean gpm-clean perl-clean
+ -umount target
+ -/sbin/losetup -d /dev/loop0
+ -rm minilinux.img
+ -rm minilinux.vdi *-vditool-*.log
+ -rm minilinux.vmdk minilinux.nvram minilinux.vmem minilinux.vmsd minilinux.vmss vmware*.log minilinux.vmxf minilinux*.zip
+ -rm -rf target
+
+# download sources to tarballs
+
+source:
+ -test -r tarballs/busybox-1.13.3.tar.bz2 || \
+ wget -O tarballs/busybox-1.13.3.tar.bz2 http://www.busybox.net/downloads/busybox-1.13.3.tar.bz2
+ -test -r tarballs/grub-0.97.tar.gz || \
+ wget -O tarballs/grub-0.97.tar.gz ftp://alpha.gnu.org/gnu/grub/grub-0.97.tar.gz
+ -test -r tarballs/perl-5.10.0.tar.gz || \
+ wget -O tarballs/perl-5.10.0.tar.gz http://www.cpan.org/src/perl-5.10.0.tar.gz
+ -test -r tarballs/linux-2.6.28.8.tar.bz2 || \
+ wget -O tarballs/linux-2.6.28.8.tar.bz2 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.8.tar.bz2
+ -test -r tarballs/gpm-1.20.6.tar.bz2 || \
+ wget -O tarballs/gpm-1.20.6.tar.bz2 http://unix.schottelius.org/gpm/archives/gpm-1.20.6.tar.bz2
+ -test -r tarballs/uClibc-0.9.30.1.tar.bz2 || \
+ wget -O tarballs/uClibc-0.9.30.1.tar.bz2 http://www.uclibc.org/downloads/uClibc-0.9.30.1.tar.bz2