From 3a467eff5e435b5709d48f9d6cb48859925be5b8 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 21 Mar 2009 11:49:00 +0100 Subject: checked in initial version --- Makefile | 229 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 Makefile (limited to 'Makefile') 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 -- cgit v1.2.3-54-g00ecf