|
| 1 | +# Makefile |
| 2 | +# |
| 3 | +# Build a TinyCore Linux kernel, modules, and firmware extensions |
| 4 | +# |
| 5 | +# Usage: |
| 6 | +# make kernel extensions os |
| 7 | +# make all |
| 8 | + |
| 9 | +MODULES ?= all base filesystems ipv6 mtd netfilter raid-dm scsi |
| 10 | +KERNEL ?= 3.16.6 |
| 11 | +KERNEL_ARCH ?= x86_64 |
| 12 | +KERNEL_SOURCE ?= http://repo.tinycorelinux.net/6.x/x86_64/release/src/kernel/linux-3.16.6-patched.txz |
| 13 | +KERNEL_SHA256 ?= a0a45e4a81ae8ea5685e420b15a4532c9deb8f623069bbccf2838dcbeea25378 |
| 14 | +OSDIR ?= /opt/tinycore/6.x/x86_64/release/distribution_files |
| 15 | +WORKDIR ?= /tmp/tinycore-kernel-build |
| 16 | + |
| 17 | +curdir := $(realpath .) |
| 18 | +filename := $(notdir $(KERNEL_SOURCE)) |
| 19 | +kerneldir := $(WORKDIR)/linux-$(KERNEL) |
| 20 | + |
| 21 | +ifeq ($(KERNEL_ARCH),x86_64) |
| 22 | + ostype := 64 |
| 23 | + osfile := corepure64 |
| 24 | + kernelname := $(KERNEL)-tinycore$(ostype) |
| 25 | +else |
| 26 | + ostype := |
| 27 | + osfile := core |
| 28 | + kernelname := $(KERNEL)-tinycore |
| 29 | +endif |
| 30 | + |
| 31 | +.PHONY: all clean kernel extensions verify-kernel build-kernel compress-modules pkg-modules os |
| 32 | + |
| 33 | +all: |
| 34 | + $(MAKE) kernel |
| 35 | + $(MAKE) extensions |
| 36 | + |
| 37 | +kernel: |
| 38 | + $(MAKE) $(WORKDIR)/$(filename) |
| 39 | + $(MAKE) verify-kernel |
| 40 | + $(MAKE) build-kernel |
| 41 | + |
| 42 | +extensions: |
| 43 | + $(MAKE) compress-modules |
| 44 | + $(MAKE) pkg-modules |
| 45 | + |
| 46 | +$(WORKDIR)/$(filename): |
| 47 | + cd $(WORKDIR) && \ |
| 48 | + wget $(KERNEL_SOURCE) |
| 49 | + |
| 50 | +verify-kernel: |
| 51 | + cd $(WORKDIR) && \ |
| 52 | + echo -n "$(KERNEL_SHA256) $(filename)" | sha256sum -c - |
| 53 | + |
| 54 | +build-kernel: |
| 55 | + rm -rf $(kerneldir) |
| 56 | + cd $(WORKDIR) && \ |
| 57 | + tar -Jxf $(filename) -C $(WORKDIR) |
| 58 | + cp -v $(curdir)/kernels/config-$(kernelname) $(kerneldir)/.config |
| 59 | + $(MAKE) -C $(kerneldir) oldconfig |
| 60 | + $(MAKE) -C $(kerneldir) bzImage |
| 61 | + $(MAKE) -C $(kerneldir) modules |
| 62 | + $(MAKE) -C $(kerneldir) INSTALL_MOD_PATH=$(WORKDIR)/modules-$(KERNEL) modules_install firmware_install |
| 63 | + cp -v $(kerneldir)/arch/x86/boot/bzImage $(WORKDIR)/vmlinuz$(ostype) |
| 64 | + |
| 65 | +compress-modules: |
| 66 | + cd $(WORKDIR)/modules-$(KERNEL) && \ |
| 67 | + find . -type f -name "*.ko" -exec strip --strip-unneeded {} \; && \ |
| 68 | + find . -type f -name "*.ko" -exec gzip {} \; |
| 69 | + |
| 70 | +$(WORKDIR)/%-$(kernelname).tcz: |
| 71 | + cd $(WORKDIR) && \ |
| 72 | + rm -rf modules-$* && \ |
| 73 | + mkdir -p modules-$*/usr/local/lib/modules/$(kernelname) |
| 74 | + cd $(WORKDIR)/modules-$(KERNEL)/lib/modules/$(kernelname) && \ |
| 75 | + for i in `cat $(curdir)/modules/$(kernelname)/$*.txt`; do \ |
| 76 | + cp -v --parents $$i $(WORKDIR)/modules-$*/usr/local/lib/modules/$(kernelname)/; \ |
| 77 | + done |
| 78 | + |
| 79 | + cd $(WORKDIR) && \ |
| 80 | + mksquashfs modules-$* $@ |
| 81 | + |
| 82 | +pkg-modules: |
| 83 | + for module in $(MODULES); do \ |
| 84 | + [ -f "$(curdir)/modules/$(kernelname)/$$module.txt" ] && $(MAKE) $(WORKDIR)/$$module-$(kernelname).tcz || { >&2 echo "Missing module file: $(curdir)/modules/$(kernelname)/$$module.txt"; exit 127; }; \ |
| 85 | + done |
| 86 | + |
| 87 | +os: |
| 88 | + rm -rf $(WORKDIR)/os-$(osfile) |
| 89 | + mkdir -p $(WORKDIR)/os-$(osfile) |
| 90 | + cd $(WORKDIR)/os-$(osfile) && \ |
| 91 | + gunzip -c $(OSDIR)/$(osfile).gz | cpio -id && \ |
| 92 | + rm -rf lib/modules/* && \ |
| 93 | + mkdir -p lib/modules/$(kernelname) && \ |
| 94 | + cp -rp $(WORKDIR)/modules-base/usr/local/lib/modules/$(kernelname)/kernel lib/modules/$(kernelname)/ |
| 95 | + cd $(WORKDIR)/modules-$(KERNEL)/lib/modules/$(kernelname) && \ |
| 96 | + cp modules.alias modules.dep $(WORKDIR)/os-$(osfile)/lib/modules/$(kernelname)/ |
| 97 | + ln -sf /usr/local/lib/modules/$(kernelname)/kernel $(WORKDIR)/os-$(osfile)/lib/modules/$(kernelname)/kernel.tclocal |
| 98 | + cd $(WORKDIR)/os-$(osfile)/lib/modules/$(kernelname) && \ |
| 99 | + sed -i 's/.ko/.ko.gz/g' modules.dep |
| 100 | + $(MAKE) $(WORKDIR)/$(osfile) |
| 101 | + |
| 102 | +$(WORKDIR)/$(osfile): |
| 103 | + cd $(WORKDIR)/os-$(osfile) && \ |
| 104 | + find | sort | cpio -o -H newc > $(WORKDIR)/$(osfile) |
| 105 | + $(MAKE) $(WORKDIR)/$(osfile).gz |
| 106 | + |
| 107 | +$(WORKDIR)/$(osfile).gz: |
| 108 | + cd $(WORKDIR) && \ |
| 109 | + gzip -c $(osfile) > $(osfile).gz |
| 110 | + |
| 111 | +clean: |
| 112 | + rm -rf $(kerneldir) $(WORKDIR)/$(filename) $(WORKDIR)/modules-* $(WORKDIR)/vmlinuz$(ostype) $(WORKDIR)/*$(kernelname).tcz $(WORKDIR)/$(osfile)* $(WORKDIR)/os-$(osfile) |
0 commit comments