From bf3dec77da9da379a7c0bd02281d54eea54fe30e Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Thu, 9 Mar 2017 10:56:34 -0500 Subject: [PATCH] Added scripts and tweaked build to build a bootable iso with a kernel and initramfs image --- Makefile | 10 +++++++--- README.md | 4 ++-- bootstrap.sh | 14 ++++++++------ buildiso.sh | 18 +++++++++++++----- config.mk | 4 ++++ etc/rc.init | 8 ++++---- iso9660/isolinux/isolinux.cfg | 9 +++++---- 7 files changed, 43 insertions(+), 24 deletions(-) create mode 100644 config.mk diff --git a/Makefile b/Makefile index c5f506a3..73c5f1ef 100644 --- a/Makefile +++ b/Makefile @@ -14,8 +14,8 @@ LIBS = INCS = -Iinclude DEFS = -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L CPPFLAGS = $(INCS) $(DEFS) -CFLAGS = -O2 --std=gnu99 -LDFLAGS = $(LIBS) +CFLAGS = --static -O2 --std=gnu99 +LDFLAGS = --static $(LIBS) ARFLAGS = rcs # commands @@ -61,7 +61,7 @@ include source/sh/Rules.mk include source/shadow/Rules.mk include source/smdev/Rules.mk include source/sdhcp/Rules.mk -include source/iproute2/Rules.mk +#include source/iproute2/Rules.mk include source/kernel/Rules.mk include etc/Rules.mk @@ -77,6 +77,10 @@ clean: kernel-clean @$(RM) $(BUILDDIR)/dummy $(ECLEAN) @$(RM) -r $(BUILDDIR)/include @$(RM) albase.iso stage1.tar.xz iso9660/isolinux/vmlinuz iso9660/isolinux/initrd.img + @$(RM) $(BUILDDIR)/boot/* $(BUILDDIR)/bin/* $(BUILDDIR)/init + +dist-clean: + @$(RM) -r $(BUILDDIR) musl-cross-make/stage1 musl-cross-make/stage2 config.mk # load dependency files if they exist -include $(DEPS) diff --git a/README.md b/README.md index 3417f3d3..a5a5097f 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,6 @@ The goals of the project are as follows: ## Building - # Optional: build the musl-based cross compiler and use that for the build ./bootstrap.sh - make stage1 + make all + ./buildiso.sh \ No newline at end of file diff --git a/bootstrap.sh b/bootstrap.sh index 138bd9fb..13df7155 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -11,10 +11,12 @@ if [ ! -d musl-cross-make/stage2 ]; then export PATH="$PWD/stage1/bin:$PATH" make all install make clean + #rm musl-cross-make/stage2 + #rm musl-cross-make/stage2/x86_64-linux-musl/lib/*.so.* fi -if [ ! -f config.mk ]; then - echo 'export PATH := $(PWD)/musl-corss-make/stage2/bin:$(PATH)' >> config.mk - echo 'CC = x86_64-linux-musl-gcc' >> config.mk - echo 'LD = $(CC)' >> config.mk - echo 'AR = x86_64-linux-musl-ar' >> config.mk -fi +#if [ ! -f config.mk ]; then +# echo 'export PATH := $(PWD)/musl-cross-make/stage2/bin:$(PATH)' >> config.mk +# echo 'CC = x86_64-linux-musl-gcc' >> config.mk +# echo 'LD = $(CC)' >> config.mk +# echo 'AR = x86_64-linux-musl-ar' >> config.mk +#fi diff --git a/buildiso.sh b/buildiso.sh index d32035be..4134239b 100755 --- a/buildiso.sh +++ b/buildiso.sh @@ -2,12 +2,20 @@ export ROOT=$PWD/build/ export ISO_FS=$PWD/iso9660/ export ISO_IMAGE=$PWD/albase.iso +export INITRD=$ISO_FS/isolinux/initrd.img + +# Move the init daemon to root so kernel can find it +mv "$ROOT/bin/init" "$ROOT" + +echo "Generating $INITRD..." +( + cd $ROOT && find . -print0 | + cpio --null -ov --format=newc | + gzip -9 > $INITRD +) # Copy the kernel to the ISO folder -cp $ROOT/boot/vmlinuz $ISO_FS/isolinux/vmlinuz -# Copy the base files into an initrd.img -find $ROOT | grep -v '^build/obj' | cpio --owner root:root --quiet -o -H newc | gzip -9 > $ISO_FS/isolinux/initrd.img -# Delete the old image if it exists -rm -f $ISO_IMAGE +cp -v $ROOT/boot/vmlinuz $ISO_FS/isolinux/vmlinuz # Build the new image mkisofs -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -l -input-charset default -V albase -A "albase" -o $ISO_IMAGE $ISO_FS + diff --git a/config.mk b/config.mk new file mode 100644 index 00000000..e4ea6d1a --- /dev/null +++ b/config.mk @@ -0,0 +1,4 @@ +export PATH := $(PWD)/musl-cross-make/stage2/bin:$(PATH) +CC = x86_64-linux-musl-gcc +LD = $(CC) +AR = x86_64-linux-musl-ar diff --git a/etc/rc.init b/etc/rc.init index 484f3570..0626fd36 100755 --- a/etc/rc.init +++ b/etc/rc.init @@ -7,7 +7,7 @@ mkdir /dev/pts mkdir /dev/shm dmesg -n 1 clear -getty /dev/tty1 & -getty /dev/tty2 & -getty /dev/tty3 & -#exec /bin/sh +#getty /dev/tty1 & +#getty /dev/tty2 & +#getty /dev/tty3 & +exec /bin/sh diff --git a/iso9660/isolinux/isolinux.cfg b/iso9660/isolinux/isolinux.cfg index 9a2ab364..f3d67e53 100644 --- a/iso9660/isolinux/isolinux.cfg +++ b/iso9660/isolinux/isolinux.cfg @@ -1,4 +1,5 @@ -default stali -label stali - kernel vmlinuz - append initrd=initrd.img quiet +default albase +label albase + kernel vmlinuz + initrd initrd.img + append ro console=ttyS0 console=tty0 ignore_loglevel -- 2.49.0