############################################################# # # Linux kernel targets # # Note: If you have any patches to apply, create the directory # sources/kernel-patches and put your patches in there and number # them in the order you wish to apply them... i.e. # # patches/kernel/001-my-special-stuff.bz2 # patches/kernel/003-gcc-Os.bz2 # patches/kernel/004_no-warnings.bz2 # patches/kernel/030-lowlatency-mini.bz2 # patches/kernel/031-lowlatency-fixes-5.bz2 # patches/kernel/099-shutup.bz2 # etc... # # these patches will all be applied by the patch-kernel.sh # script (which will also abort the build if it finds rejects) # -Erik # # It will also do patch-o-matic patches, dependant on the patch-o-matic # TARGET and the POM_PATCHES list in the main Makefile. # # -Thomas. # ############################################################# # Version of Linux to download and then apply patches to DOWNLOAD_LINUX_VERSION=2.4.37.11 # Version of Linux AFTER patches LINUX_VERSION=$(DOWNLOAD_LINUX_VERSION)-floppyfw-$(FLOPPYFW_VERSION) LINUX_FORMAT=bzImage LINUX_BINLOC=arch/$(ARCH)/boot/$(LINUX_FORMAT) LINUX_DIR=$(BUILD_DIR)/linux-$(LINUX_VERSION) LINUX_SOURCE=linux-$(DOWNLOAD_LINUX_VERSION).tar.bz2 # LINUX_SITE=ftp://ftp.kernel.org/pub/linux/kernel/v2.4 LINUX_SITE=http://www.zelow.no/floppyfw/download/hosted_source_packages/ LINUX_KCONFIG=$(CONFIG_DIR)/config-kernel LINUX_KERNEL=$(LINUX_DIR)/vmlinuz # Used by pcmcia-cs and others LINUX_SOURCE_DIR=$(LINUX_DIR) LINUX_MODULES_DEP=$(MODULES_DIR)/lib/modules/$(LINUX_VERSION)/modules.dep UPX=upx-1.11 #LINUX_CC_OPTS="-Os -pipe" # LINUX_CC_OPTS="-Os -mregparm=3 -falign-functions=2 -falign-jumps=2 -falign-labels=2 -falign-loops=2" #LINUX_CC_OPTS="-Os -funit-at-a-time -mregparm=3 -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=$(ARCH) -nostdinc -iwithprefix" $(DL_DIR)/$(LINUX_SOURCE): $(WGET) -P $(DL_DIR) $(LINUX_SITE)/$(LINUX_SOURCE) $(LINUX_DIR)/.unpacked: $(DL_DIR)/$(LINUX_SOURCE) -$(RM) -r $(MODULES_DIR)/lib -$(RM) $(MODULES_DIR)/.stripped -$(RM) -r $(LINUX_DIR) bzcat $(DL_DIR)/$(LINUX_SOURCE) | tar $(TAR_VERBOSE) \ -C $(BUILD_DIR) -xf - ifneq ($(DOWNLOAD_LINUX_VERSION),$(LINUX_VERSION)) # Rename the dir from the downloaded version to the AFTER patch version mv -f $(BUILD_DIR)/linux-$(DOWNLOAD_LINUX_VERSION) $(LINUX_DIR) touch $(LINUX_DIR)/.unpacked endif $(LINUX_DIR)/.patched: $(LINUX_DIR)/.unpacked mkdir -p $(PATCH_DIR)/kernel # Patching the kernel. $(PATCH_DIR)/patch-kernel.sh $(LINUX_DIR) $(PATCH_DIR)/kernel 0* echo "Patched the kernel with $(PATCH_DIR)/kernel patches" # Patching the kernel with iptables-pom-stuff: ifeq ($(filter $(TARGETS),patch-o-matic), patch-o-matic) (cd $(PATCH_O_MATIC_DIR); \ KERNEL_DIR=$(LINUX_DIR) \ IPTABLES_DIR=$(IPTABLES_BUILD_DIR) \ ./runme --batch $(POM_PATCHES) \ ); endif ifeq ($(filter $(TARGETS),hostap), hostap) (cd $(LINUX_DIR); \ cat $(HOSTAP_DRIVER_KERNEL_PATCH) | patch -p1 ; \ cp $(HOSTAP_DRIVER_DIR)/driver/modules/hostap*.[ch] \ drivers/net/wireless/. ); endif # Postpatching the kernel after iptables-pom-stuff because of the # troublesome CONFIG_IP_NF_MATCH_OWNER option. $(PATCH_DIR)/patch-kernel.sh $(LINUX_DIR) \ $(PATCH_DIR)/kernel-after-pom 0* # From a lwn article: need gcc 3.4/3.5, # It segfaults with it.. # -funit-at-a-time -mregparm=3 # From a patch by Eric Anderson: (But these don't reduce size, weird) # -falign-functions=2 -falign-jumps=2 -falign-labels=2 -falign-loops=2 # From: http://www.ussg.iu.edu/hypermail/linux/kernel/0501.2/0856.html # -mpreferred-stack-boundary=2 -malign-loops=0 -malign-jumps=0 -malign-functions=0 # But: -malign-loops is obsolete, use -falign-loops # -malign-jumps is obsolete, use -falign-jumps # -malign-functions is obsolete, use -falign-functions # And they don't make a smaller kernel than pure -Os anyway. $(SED) 's/\-O2/-Os -pipe/;' $(LINUX_DIR)/Makefile -(cd $(BUILD_DIR); ln -sf $(LINUX_DIR) linux) touch $(LINUX_DIR)/.patched $(LINUX_KCONFIG): @if [ ! -f "$(LINUX_KCONFIG)" ] ; then \ echo ""; \ echo "You should create a .config for your kernel"; \ echo "and install it as $(LINUX_KCONFIG)"; \ echo ""; \ sleep 5; \ fi; $(LINUX_DIR)/.configured: $(LINUX_DIR)/.patched $(LINUX_KCONFIG) -cp $(LINUX_KCONFIG) $(LINUX_DIR)/.config ifeq ($(strip $(EMULATE_FPU)),true) $(SED) "s/^.*CONFIG_MATH_EMULATION.*/CONFIG_MATH_EMULATION=y/;" \ $(LINUX_DIR)/.config else $(SED) "s/^.*CONFIG_MATH_EMULATION.*/CONFIG_MATH_EMULATION=n/;" \ $(LINUX_DIR)/.config endif # It's default on now. #ifeq ($(filter $(TARGETS),madwifi), madwifi) # $(SED) "s/^.*CONFIG_CRYPTO.*/CONFIG_CRYPTO=y/;" \ # $(LINUX_DIR)/.config #endif $(SED) 's/^EXTRAVERSION\s=\s(.*)/EXTRAVERSION = $$1-floppyfw-$(FLOPPYFW_VERSION)/;' \ $(LINUX_DIR)/Makefile $(MAKE) D=1 V=1 ARCH=$(ARCH) -C $(LINUX_DIR) oldconfig include/linux/version.h # Annoying but hopefully this is enough: # And I'm using perl as sed... $(SED) 's/CONFIG_X86_64.*//' $(LINUX_DIR)/.config touch $(LINUX_DIR)/.configured linux-source-configured: $(LINUX_DIR)/.configured $(LINUX_DIR)/.depend_done: $(LINUX_DIR)/.configured $(MAKE) D=1 V=1 ARCH=$(ARCH) -C $(LINUX_DIR) dep touch $(LINUX_DIR)/.depend_done $(LINUX_DIR)/$(LINUX_BINLOC): $(LINUX_DIR)/.depend_done $(MAKE) D=1 V=1 ARCH=$(ARCH) CC="$(TARGET_CC)" -C $(LINUX_DIR) $(LINUX_FORMAT) $(MAKE) D=1 V=1 ARCH=$(ARCH) CC="$(TARGET_CC)" -C $(LINUX_DIR) modules $(LINUX_MODULES_DEP): $(LINUX_DIR)/.depend_done $(RM) -r $(MODULES_DIR)/lib/modules $(MAKE) D=1 V=1 ARCH=$(ARCH) -C $(LINUX_DIR) INSTALL_MOD_PATH=$(MODULES_DIR) modules_install [ -d $(MODULES_DIR)/lib/modules/$(LINUX_VERSION) ] && \ $(BASE_DIR)/perl/depmod.pl -n \ -b $(MODULES_DIR)/lib/modules/$(LINUX_VERSION)/ \ -k $(LINUX_DIR)/vmlinux \ > $(LINUX_MODULES_DEP) (cd $(MODULES_BASE_DIR) ; cat $(LINUX_MODULES_DEP) | $(BASE_DIR)/perl/capsfix.pl > $(TMP_DIR)/moddep ) cp $(LINUX_MODULES_DEP) $(LINUX_MODULES_DEP).precaps cp $(TMP_DIR)/moddep $(LINUX_MODULES_DEP) (cd $(MODULES_DIR)/lib/modules; ln -s $(LINUX_VERSION)/kernel/drivers .) # $(DEPMOD) $(LINUX_KERNEL): $(LINUX_DIR)/$(LINUX_BINLOC) cp -fa $(LINUX_DIR)/$(LINUX_BINLOC) $(LINUX_KERNEL) # cp -fa $(LINUX_DIR)/$(LINUX_BINLOC) $(LINUX_KERNEL).upx # $(UPX) -9 $(LINUX_KERNEL).upx touch -c $(LINUX_KERNEL) linux: patch-o-matic hostap-driver-source $(IPTABLES_BUILD_DIR)/.configured $(LINUX_KERNEL) $(LINUX_MODULES_DEP) linux-depmod: linux # Modutils-version #/sbin/depmod -aen -F $(LINUX_DIR)/System.map -b $(MODULES_DIR)/lib/modules/$(LINUX_VERSION) > $(LINUX_MODULES_DEP) [ -f $(LINUX_MODULES_DEP) ] && \ cp $(LINUX_MODULES_DEP) $(LINUX_MODULES_DEP).precaps # busybox perl. [ -d $(MODULES_DIR)/lib/modules/$(LINUX_VERSION) ] && \ $(BASE_DIR)/perl/depmod.pl -n \ -b $(MODULES_DIR)/lib/modules/$(LINUX_VERSION)/ \ -k $(LINUX_DIR)/vmlinux \ > $(LINUX_MODULES_DEP) # "Sanitizing" it. $(SED) 's/\\\n//' $(LINUX_MODULES_DEP) linux-source: $(DL_DIR)/$(LINUX_SOURCE) # This has been renamed so we do _NOT_ by default run this on 'make clean' linuxclean: clean $(RM) $(LINUX_KERNEL) -$(MAKE) ARCH=$(ARCH) -C $(LINUX_DIR) clean linux-dirclean: $(RM) -r $(LINUX_DIR)