MAKEFILE_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) BUILD_DIR ?= $(MAKEFILE_DIR)build ARCH ?= x86 KERNEL_FILE_NAME ?= bzImage KERNEL_PATH = $(BUILD_DIR)/arch/$(ARCH)/boot/$(bzImage) KERNEL_BUILD_DIR=$(BUILD_DIR)/linux/kernel BUSYBOX_BUILD_DIR=$(BUILD_DIR)/linux/busybox BUSYBOX_BUILD_FILE=$(BUSYBOX_BUILD_DIR)/busybox INITRAMFS_DIR=$(BUILD_DIR)/linux/initramfs INITRAMFS_FILE_TMP=$(BUILD_DIR)/linux/initramfs.cpio INITRAMFS_FILE=$(BUILD_DIR)/linux/initramfs.cpio.gz .PHONY: initramfs initramfs_initiial initramfs_clean busybox all kernel __busybox_install all: $(INITRAMFS_FILE) initramfs:initramfs_clean initramfs_initiial __busybox_install $(INITRAMFS_FILE) kernel: $(KERNEL_PATH) busybox: $(BUSYBOX_BUILD_FILE) $(KERNEL_PATH): @mkdir -p $(KERNEL_BUILD_DIR) $(MAKE) -C $(MAKEFILE_DIR)/kernel O=$(KERNEL_BUILD_DIR) KCONFIG_CONFIG="$(MAKEFILE_DIR)/.kernel-config" kernel-config: $(MAKE) -C $(MAKEFILE_DIR)/kernel O=$(KERNEL_BUILD_DIR) KCONFIG_CONFIG="$(MAKEFILE_DIR)/.kernel-config" menuconfig $(BUSYBOX_BUILD_FILE): @mkdir -p $(BUSYBOX_BUILD_DIR) cp $(MAKEFILE_DIR)/.busybox-config $(BUSYBOX_BUILD_DIR)/.config $(MAKE) -C $(MAKEFILE_DIR)/busybox O=$(BUSYBOX_BUILD_DIR) KCONFIG_CONFIG="$(MAKEFILE_DIR)/.busybox-config" __busybox_install: $(MAKE) -C $(MAKEFILE_DIR)/busybox O=$(BUSYBOX_BUILD_DIR) KCONFIG_CONFIG="$(MAKEFILE_DIR)/.busybox-config" CONFIG_PREFIX=$(INITRAMFS_DIR) install $(INITRAMFS_FILE): initramfs_clean initramfs_initiial __busybox_install find $(INITRAMFS_DIR) | cpio -o -H newc > $(INITRAMFS_FILE_TMP) # gzip -f $(INITRAMFS_FILE_TMP) initramfs_clean: @rm -rf $(INITRAMFS_DIR) initramfs_initiial: #$(BUSYBOX_BUILD_FILE) mkdir -p $(INITRAMFS_DIR) mkdir -p $(INITRAMFS_DIR)/{etc,mnt,proc,run,srv,tmp,var,boot,dev,home,media,opt,root,sbin,sys,usr/bin,usr/lib} bash -c "pushd $(INITRAMFS_DIR); ln -s usr/bin bin; popd" bash -c "pushd $(INITRAMFS_DIR); ln -s usr/lib lib; popd" echo "#!/bin/sh" >> $(INITRAMFS_DIR)/init echo "mount -t proc none /proc" >> $(INITRAMFS_DIR)/init echo "mount -t sysfs none /sys" >> $(INITRAMFS_DIR)/init echo "echo 'Successfully booted'" >> $(INITRAMFS_DIR)/init echo "exec /bin/sh" >> $(INITRAMFS_DIR)/init chmod +x $(INITRAMFS_DIR)/init chmod +x $(INITRAMFS_DIR)/sbin/init