diff options
Diffstat (limited to 'vagrant')
-rwxr-xr-x | vagrant/build_linux.sh | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/vagrant/build_linux.sh b/vagrant/build_linux.sh new file mode 100755 index 0000000..4f53762 --- /dev/null +++ b/vagrant/build_linux.sh @@ -0,0 +1,82 @@ +#!/usr/bin/sh +set -e + +BUSY_BOX_VERSION="1.35.0" +KERNEL_VERSION="v5.10" +BUILD_BASE=$(pwd)/kernel-dev +INITRAMFS_BASE=$(pwd)/kernel-dev/initramfs + +# wont run wihtout static busybox. the install target should be static too. +mkdir -p ./kernel-dev/busybox +cd ./kernel-dev/busybox &&\ + wget https://www.busybox.net/downloads/busybox-$BUSY_BOX_VERSION.tar.bz2 &&\ + tar -xvf busybox-$BUSY_BOX_VERSION.tar.bz2 +cd busybox-$BUSY_BOX_VERSION &&\ + make defconfig &&\ + LD_FLAGS="--static" make -j4 && make install + +cd "$BUILD_BASE" &&\ + git clone --depth=1 --branch ${KERNEL_VERSION} https://github.com/torvalds/linux +cd linux &&\ + make defconfig &&\ + make -j12 + +cd "$BUILD_BASE" &&\ + mkdir initramfs +(cd initramfs && mkdir -p bin sbin etc proc sys usr/bin usr/sbin dev tmp) +cp -a "${BUILD_BASE}"/busybox/busybox-$BUSY_BOX_VERSION/_install/* ./initramfs + +cat > "$INITRAMFS_BASE"/bin/init <<EOL +#!/bin/sh +mount -t proc none /proc +mount -t sysfs none /sys +exec sh +EOL +chmod +x "$INITRAMFS_BASE"/bin/init + +cat > "$INITRAMFS_BASE"/etc/inittab <<EOL +::sysinit:/etc/init.d/rcS +::respawn:-/bin/sh +::askfirst:-/bin/sh +::cttlaltdel:/bin/umount -a -r +EOL +chmod 755 "$INITRAMFS_BASE"/etc/inittab + +mkdir -p "$INITRAMFS_BASE"/etc/init.d +cat > "$INITRAMFS_BASE"/etc/init.d/rcS <<EOL +echo "----------mount all in fstab----------------" +/bin/mount -a #Read / etc/fstab and load the file system +mkdir -p /dev/pts +mount -t devpts devpts /dev/pts +echo /sbin/mdev > /proc/sys/kernel/hotplug +mdev -s +echo "****************Hello itas109******************" +echo "Kernel Version:linux-5.4.50" +echo "***********************************************" +EOL +chmod 755 "$INITRAMFS_BASE"/etc/init.d/rcS + +cat > "$INITRAMFS_BASE"/etc/fstab <<EOL +#device mount-point type option dump fsck +proc /proc proc defaults 0 0 +temps /tmp rpoc defaults 0 0 +none /tmp ramfs defaults 0 0 +sysfs /sys sysfs defaults 0 0 +mdev /dev ramfs defaults 0 0 +EOL + +cd "$INITRAMFS_BASE"/dev +sudo mknod console c 5 1 +sudo mknod null c 1 3 +sudo mknod tty1 c 4 1 +# sudo mknod dev/ram b 1 0 + +cd "$INITRAMFS_BASE" +find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs.cpio.gz + +qemu-system-x86_64 \ + -kernel "$BUILD_BASE"/linux/arch/x86/boot/bzImage \ + -initrd "$BUILD_BASE"/initramfs.cpio.gz \ + -nographic \ + -m 512 \ + -append "root=/dev/ram0 init=/bin/init console=ttyS0" |