1*1b93b3c3SWu Zhangjin# 2*1b93b3c3SWu Zhangjin# This file is subject to the terms and conditions of the GNU General Public 3*1b93b3c3SWu Zhangjin# License. 4*1b93b3c3SWu Zhangjin# 5*1b93b3c3SWu Zhangjin# Adapted for MIPS Pete Popov, Dan Malek 6*1b93b3c3SWu Zhangjin# 7*1b93b3c3SWu Zhangjin# Copyright (C) 1994 by Linus Torvalds 8*1b93b3c3SWu Zhangjin# Adapted for PowerPC by Gary Thomas 9*1b93b3c3SWu Zhangjin# modified by Cort (cort@cs.nmt.edu) 10*1b93b3c3SWu Zhangjin# 11*1b93b3c3SWu Zhangjin# Copyright (C) 2009 Lemote Inc. & DSLab, Lanzhou University 12*1b93b3c3SWu Zhangjin# Author: Wu Zhangjin <wuzj@lemote.com> 13*1b93b3c3SWu Zhangjin# 14*1b93b3c3SWu Zhangjin 15*1b93b3c3SWu Zhangjin# compressed kernel load addr: VMLINUZ_LOAD_ADDRESS > VMLINUX_LOAD_ADDRESS + VMLINUX_SIZE 16*1b93b3c3SWu ZhangjinVMLINUX_SIZE := $(shell wc -c $(objtree)/$(KBUILD_IMAGE) 2>/dev/null | cut -d' ' -f1) 17*1b93b3c3SWu ZhangjinVMLINUX_SIZE := $(shell [ -n "$(VMLINUX_SIZE)" ] && echo $$(($(VMLINUX_SIZE) + (65536 - $(VMLINUX_SIZE) % 65536)))) 18*1b93b3c3SWu ZhangjinVMLINUZ_LOAD_ADDRESS := 0x$(shell [ -n "$(VMLINUX_SIZE)" ] && printf %x $$(($(VMLINUX_LOAD_ADDRESS) + $(VMLINUX_SIZE)))) 19*1b93b3c3SWu Zhangjin 20*1b93b3c3SWu Zhangjin# set the default size of the mallocing area for decompressing 21*1b93b3c3SWu ZhangjinBOOT_HEAP_SIZE := 0x400000 22*1b93b3c3SWu Zhangjin 23*1b93b3c3SWu Zhangjin# Disable Function Tracer 24*1b93b3c3SWu ZhangjinKBUILD_CFLAGS := $(shell echo $(KBUILD_CFLAGS) | sed -e "s/-pg//") 25*1b93b3c3SWu Zhangjin 26*1b93b3c3SWu ZhangjinKBUILD_CFLAGS := $(LINUXINCLUDE) $(KBUILD_CFLAGS) -D__KERNEL__ \ 27*1b93b3c3SWu Zhangjin -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" \ 28*1b93b3c3SWu Zhangjin 29*1b93b3c3SWu ZhangjinKBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ 30*1b93b3c3SWu Zhangjin -DKERNEL_ENTRY=0x$(shell $(NM) $(objtree)/$(KBUILD_IMAGE) 2>/dev/null | grep " kernel_entry" | cut -f1 -d \ ) \ 31*1b93b3c3SWu Zhangjin -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) 32*1b93b3c3SWu Zhangjin 33*1b93b3c3SWu Zhangjinobj-y := $(obj)/head.o $(obj)/decompress.o $(obj)/dbg.o 34*1b93b3c3SWu Zhangjin 35*1b93b3c3SWu Zhangjinobj-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o 36*1b93b3c3SWu Zhangjin 37*1b93b3c3SWu ZhangjinOBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S 38*1b93b3c3SWu Zhangjin$(obj)/vmlinux.bin: $(KBUILD_IMAGE) 39*1b93b3c3SWu Zhangjin $(call if_changed,objcopy) 40*1b93b3c3SWu Zhangjin 41*1b93b3c3SWu Zhangjinsuffix_$(CONFIG_KERNEL_GZIP) = gz 42*1b93b3c3SWu Zhangjinsuffix_$(CONFIG_KERNEL_BZIP2) = bz2 43*1b93b3c3SWu Zhangjinsuffix_$(CONFIG_KERNEL_LZMA) = lzma 44*1b93b3c3SWu Zhangjintool_$(CONFIG_KERNEL_GZIP) = gzip 45*1b93b3c3SWu Zhangjintool_$(CONFIG_KERNEL_BZIP2) = bzip2 46*1b93b3c3SWu Zhangjintool_$(CONFIG_KERNEL_LZMA) = lzma 47*1b93b3c3SWu Zhangjin$(obj)/vmlinux.$(suffix_y): $(obj)/vmlinux.bin 48*1b93b3c3SWu Zhangjin $(call if_changed,$(tool_y)) 49*1b93b3c3SWu Zhangjin 50*1b93b3c3SWu Zhangjin$(obj)/piggy.o: $(obj)/vmlinux.$(suffix_y) $(obj)/dummy.o 51*1b93b3c3SWu Zhangjin $(Q)$(OBJCOPY) $(OBJCOPYFLAGS) \ 52*1b93b3c3SWu Zhangjin --add-section=.image=$< \ 53*1b93b3c3SWu Zhangjin --set-section-flags=.image=contents,alloc,load,readonly,data \ 54*1b93b3c3SWu Zhangjin $(obj)/dummy.o $@ 55*1b93b3c3SWu Zhangjin 56*1b93b3c3SWu ZhangjinLDFLAGS_vmlinuz := $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T 57*1b93b3c3SWu Zhangjinvmlinuz: $(src)/ld.script $(obj-y) $(obj)/piggy.o 58*1b93b3c3SWu Zhangjin $(call if_changed,ld) 59*1b93b3c3SWu Zhangjin $(Q)$(OBJCOPY) $(OBJCOPYFLAGS) -R .comment -R .stab -R .stabstr -R .initrd -R .sysmap $@ 60*1b93b3c3SWu Zhangjin 61*1b93b3c3SWu Zhangjin# 62*1b93b3c3SWu Zhangjin# Some DECstations need all possible sections of an ECOFF executable 63*1b93b3c3SWu Zhangjin# 64*1b93b3c3SWu Zhangjinifdef CONFIG_MACH_DECSTATION 65*1b93b3c3SWu Zhangjin E2EFLAGS = -a 66*1b93b3c3SWu Zhangjinelse 67*1b93b3c3SWu Zhangjin E2EFLAGS = 68*1b93b3c3SWu Zhangjinendif 69*1b93b3c3SWu Zhangjin 70*1b93b3c3SWu Zhangjin# elf2ecoff can only handle 32bit image 71*1b93b3c3SWu Zhangjin 72*1b93b3c3SWu Zhangjinifdef CONFIG_32BIT 73*1b93b3c3SWu Zhangjin VMLINUZ = vmlinuz 74*1b93b3c3SWu Zhangjinelse 75*1b93b3c3SWu Zhangjin VMLINUZ = vmlinuz.32 76*1b93b3c3SWu Zhangjinendif 77*1b93b3c3SWu Zhangjin 78*1b93b3c3SWu Zhangjinvmlinuz.32: vmlinuz 79*1b93b3c3SWu Zhangjin $(Q)$(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ 80*1b93b3c3SWu Zhangjin 81*1b93b3c3SWu Zhangjinvmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ) 82*1b93b3c3SWu Zhangjin $(Q)$(obj)/../elf2ecoff $(VMLINUZ) vmlinuz.ecoff $(E2EFLAGS) 83*1b93b3c3SWu Zhangjin 84*1b93b3c3SWu Zhangjin$(obj)/../elf2ecoff: $(src)/../elf2ecoff.c 85*1b93b3c3SWu Zhangjin $(Q)$(HOSTCC) -o $@ $^ 86*1b93b3c3SWu Zhangjin 87*1b93b3c3SWu Zhangjindrop-sections = .reginfo .mdebug .comment .note .pdr .options .MIPS.options 88*1b93b3c3SWu Zhangjinstrip-flags = $(addprefix --remove-section=,$(drop-sections)) 89*1b93b3c3SWu Zhangjin 90*1b93b3c3SWu ZhangjinOBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary $(strip-flags) 91*1b93b3c3SWu Zhangjinvmlinuz.bin: vmlinuz 92*1b93b3c3SWu Zhangjin $(call if_changed,objcopy) 93*1b93b3c3SWu Zhangjin 94*1b93b3c3SWu ZhangjinOBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec $(strip-flags) 95*1b93b3c3SWu Zhangjinvmlinuz.srec: vmlinuz 96*1b93b3c3SWu Zhangjin $(call if_changed,objcopy) 97*1b93b3c3SWu Zhangjin 98*1b93b3c3SWu Zhangjinclean: 99*1b93b3c3SWu Zhangjinclean-files += *.o \ 100*1b93b3c3SWu Zhangjin vmlinu* 101