162306a36Sopenharmony_ci# 262306a36Sopenharmony_ci# This file is subject to the terms and conditions of the GNU General Public 362306a36Sopenharmony_ci# License. 462306a36Sopenharmony_ci# 562306a36Sopenharmony_ci# Adapted for MIPS Pete Popov, Dan Malek 662306a36Sopenharmony_ci# 762306a36Sopenharmony_ci# Copyright (C) 1994 by Linus Torvalds 862306a36Sopenharmony_ci# Adapted for PowerPC by Gary Thomas 962306a36Sopenharmony_ci# modified by Cort (cort@cs.nmt.edu) 1062306a36Sopenharmony_ci# 1162306a36Sopenharmony_ci# Copyright (C) 2009 Lemote Inc. & DSLab, Lanzhou University 1262306a36Sopenharmony_ci# Author: Wu Zhangjin <wuzhangjin@gmail.com> 1362306a36Sopenharmony_ci# 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ciinclude $(srctree)/arch/mips/Kbuild.platforms 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci# set the default size of the mallocing area for decompressing 1862306a36Sopenharmony_ciBOOT_HEAP_SIZE := 0x400000 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci# Disable Function Tracer 2162306a36Sopenharmony_ciKBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE), $(KBUILD_CFLAGS)) 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ciKBUILD_CFLAGS := $(filter-out -fstack-protector, $(KBUILD_CFLAGS)) 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci# Disable lq/sq in zboot 2662306a36Sopenharmony_ciifdef CONFIG_CPU_LOONGSON64 2762306a36Sopenharmony_ciKBUILD_CFLAGS := $(filter-out -march=loongson3a, $(KBUILD_CFLAGS)) -march=mips64r2 2862306a36Sopenharmony_ciendif 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ciKBUILD_CFLAGS := $(KBUILD_CFLAGS) -D__KERNEL__ -D__DISABLE_EXPORTS \ 3162306a36Sopenharmony_ci -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ciKBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ 3462306a36Sopenharmony_ci -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \ 3562306a36Sopenharmony_ci -DKERNEL_ENTRY=$(VMLINUX_ENTRY_ADDRESS) 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in. 3862306a36Sopenharmony_ciKCOV_INSTRUMENT := n 3962306a36Sopenharmony_ciGCOV_PROFILE := n 4062306a36Sopenharmony_ciUBSAN_SANITIZE := n 4162306a36Sopenharmony_ciKCSAN_SANITIZE := n 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci# decompressor objects (linked with vmlinuz) 4462306a36Sopenharmony_civmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/bswapsi.o 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ciifdef CONFIG_DEBUG_ZBOOT 4762306a36Sopenharmony_civmlinuzobjs-$(CONFIG_DEBUG_ZBOOT) += $(obj)/dbg.o 4862306a36Sopenharmony_civmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o 4962306a36Sopenharmony_civmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART_PROM) += $(obj)/uart-prom.o 5062306a36Sopenharmony_civmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o 5162306a36Sopenharmony_civmlinuzobjs-$(CONFIG_ATH79) += $(obj)/uart-ath79.o 5262306a36Sopenharmony_ciendif 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_civmlinuzobjs-$(CONFIG_KERNEL_XZ) += $(obj)/ashldi3.o 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_civmlinuzobjs-$(CONFIG_KERNEL_ZSTD) += $(obj)/bswapdi.o $(obj)/ashldi3.o $(obj)/clz_ctz.o 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_citargets := $(notdir $(vmlinuzobjs-y)) 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_citargets += vmlinux.bin 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ciOBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci$(obj)/vmlinux.bin: $(KBUILD_IMAGE) FORCE 6562306a36Sopenharmony_ci $(call if_changed,objcopy) 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_citool_$(CONFIG_KERNEL_GZIP) = gzip 6862306a36Sopenharmony_citool_$(CONFIG_KERNEL_BZIP2) = bzip2_with_size 6962306a36Sopenharmony_citool_$(CONFIG_KERNEL_LZ4) = lz4_with_size 7062306a36Sopenharmony_citool_$(CONFIG_KERNEL_LZMA) = lzma_with_size 7162306a36Sopenharmony_citool_$(CONFIG_KERNEL_LZO) = lzo_with_size 7262306a36Sopenharmony_citool_$(CONFIG_KERNEL_XZ) = xzkern_with_size 7362306a36Sopenharmony_citool_$(CONFIG_KERNEL_ZSTD) = zstd22_with_size 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_citargets += vmlinux.bin.z 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci$(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE 7862306a36Sopenharmony_ci $(call if_changed,$(tool_y)) 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_citargets += piggy.o dummy.o 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ciOBJCOPYFLAGS_piggy.o := --add-section=.image=$(obj)/vmlinux.bin.z \ 8362306a36Sopenharmony_ci --set-section-flags=.image=contents,alloc,load,readonly,data 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci$(obj)/piggy.o: $(obj)/dummy.o $(obj)/vmlinux.bin.z FORCE 8662306a36Sopenharmony_ci $(call if_changed,objcopy) 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ciHOSTCFLAGS_calc_vmlinuz_load_addr.o += $(LINUXINCLUDE) 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci# Calculate the load address of the compressed kernel image 9162306a36Sopenharmony_cihostprogs := calc_vmlinuz_load_addr 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ciifneq (0x0,$(CONFIG_ZBOOT_LOAD_ADDRESS)) 9462306a36Sopenharmony_cizload-y = $(CONFIG_ZBOOT_LOAD_ADDRESS) 9562306a36Sopenharmony_ciendif 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ciifneq ($(zload-y),) 9862306a36Sopenharmony_ciVMLINUZ_LOAD_ADDRESS := $(zload-y) 9962306a36Sopenharmony_cielse 10062306a36Sopenharmony_ciVMLINUZ_LOAD_ADDRESS = $(shell $(obj)/calc_vmlinuz_load_addr \ 10162306a36Sopenharmony_ci $(obj)/vmlinux.bin $(LINKER_LOAD_ADDRESS)) 10262306a36Sopenharmony_ciendif 10362306a36Sopenharmony_ciUIMAGE_LOADADDR = $(VMLINUZ_LOAD_ADDRESS) 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_civmlinuzobjs-y += $(obj)/piggy.o 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_citargets += ../../../../vmlinuz 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ciquiet_cmd_zld = LD $@ 11062306a36Sopenharmony_ci cmd_zld = $(LD) $(KBUILD_LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T $< $(vmlinuzobjs-y) -o $@ 11162306a36Sopenharmony_ciquiet_cmd_strip = STRIP $@ 11262306a36Sopenharmony_ci cmd_strip = $(STRIP) -s $@ 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci$(objtree)/vmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr 11562306a36Sopenharmony_ci $(call cmd,zld) 11662306a36Sopenharmony_ci $(call cmd,strip) 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ciobjboot := $(objtree)/arch/mips/boot 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci$(objboot)/vmlinuz: $(objtree)/vmlinuz FORCE 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci# 12362306a36Sopenharmony_ci# Some DECstations need all possible sections of an ECOFF executable 12462306a36Sopenharmony_ci# 12562306a36Sopenharmony_ciifdef CONFIG_MACH_DECSTATION 12662306a36Sopenharmony_ci e2eflag := -a 12762306a36Sopenharmony_ciendif 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci# elf2ecoff can only handle 32bit image 13062306a36Sopenharmony_cihostprogs += ../elf2ecoff 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ciifdef CONFIG_32BIT 13362306a36Sopenharmony_ci VMLINUZ = $(objtree)/vmlinuz 13462306a36Sopenharmony_cielse 13562306a36Sopenharmony_ci VMLINUZ = $(objboot)/vmlinuz.32 13662306a36Sopenharmony_ciendif 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_citargets += ../vmlinuz.32 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ciquiet_cmd_32 = OBJCOPY $@ 14162306a36Sopenharmony_ci cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci$(objboot)/vmlinuz.32: $(objtree)/vmlinuz 14462306a36Sopenharmony_ci $(call cmd,32) 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_citargets += ../vmlinuz.ecoff 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ciquiet_cmd_ecoff = ECOFF $@ 14962306a36Sopenharmony_ci cmd_ecoff = $< $(VMLINUZ) $@ $(e2eflag) 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci$(objboot)/vmlinuz.ecoff: $(objboot)/elf2ecoff $(VMLINUZ) 15262306a36Sopenharmony_ci $(call cmd,ecoff) 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_citargets += ../vmlinuz.bin 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ciOBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci$(objboot)/vmlinuz.bin: $(objtree)/vmlinuz 15962306a36Sopenharmony_ci $(call cmd,objcopy) 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_citargets += ../vmlinuz.srec 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ciOBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ci$(objboot)/vmlinuz.srec: $(objtree)/vmlinuz 16662306a36Sopenharmony_ci $(call cmd,objcopy) 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_citargets += ../uzImage.bin 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci$(objboot)/uzImage.bin: $(objboot)/vmlinuz.bin FORCE 17162306a36Sopenharmony_ci $(call if_changed,uimage,none) 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci# 17462306a36Sopenharmony_ci# Flattened Image Tree (.itb) image 17562306a36Sopenharmony_ci# 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ciifeq ($(ADDR_BITS),32) 17862306a36Sopenharmony_ciitb_addr_cells = 1 17962306a36Sopenharmony_ciendif 18062306a36Sopenharmony_ciifeq ($(ADDR_BITS),64) 18162306a36Sopenharmony_ciitb_addr_cells = 2 18262306a36Sopenharmony_ciendif 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_citargets += ../vmlinuz.its.S 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ciquiet_cmd_its_cat = CAT $@ 18762306a36Sopenharmony_ci cmd_its_cat = cat $(real-prereqs) >$@ 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci$(objboot)/vmlinuz.its.S: $(addprefix $(srctree)/arch/mips/$(PLATFORM)/,$(ITS_INPUTS)) FORCE 19062306a36Sopenharmony_ci $(call if_changed,its_cat) 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_citargets += ../vmlinuz.its 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ciquiet_cmd_cpp_its_S = ITS $@ 19562306a36Sopenharmony_ci cmd_cpp_its_S = $(CPP) -P -C -o $@ $< \ 19662306a36Sopenharmony_ci -DKERNEL_NAME="\"Linux $(KERNELRELEASE)\"" \ 19762306a36Sopenharmony_ci -DVMLINUX_BINARY="\"$(2)\"" \ 19862306a36Sopenharmony_ci -DVMLINUX_COMPRESSION="\"none\"" \ 19962306a36Sopenharmony_ci -DVMLINUX_LOAD_ADDRESS=$(VMLINUZ_LOAD_ADDRESS) \ 20062306a36Sopenharmony_ci -DVMLINUX_ENTRY_ADDRESS=$(VMLINUZ_LOAD_ADDRESS) \ 20162306a36Sopenharmony_ci -DADDR_BITS=$(ADDR_BITS) \ 20262306a36Sopenharmony_ci -DADDR_CELLS=$(itb_addr_cells) 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ci$(objboot)/vmlinuz.its: $(objboot)/vmlinuz.its.S FORCE 20562306a36Sopenharmony_ci $(call if_changed,cpp_its_S,vmlinuz.bin) 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_citargets += ../vmlinuz.itb 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ciquiet_cmd_itb-image = ITB $@ 21062306a36Sopenharmony_ci cmd_itb-image = \ 21162306a36Sopenharmony_ci env PATH="$(objtree)/scripts/dtc:$(PATH)" \ 21262306a36Sopenharmony_ci $(BASH) $(MKIMAGE) \ 21362306a36Sopenharmony_ci -D "-I dts -O dtb -p 500 \ 21462306a36Sopenharmony_ci --include $(objtree)/arch/mips \ 21562306a36Sopenharmony_ci --warning no-unit_address_vs_reg" \ 21662306a36Sopenharmony_ci -f $(2) $@ 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_ci$(objboot)/vmlinuz.itb: $(objboot)/vmlinuz.its $(objboot)/vmlinuz.bin FORCE 21962306a36Sopenharmony_ci $(call if_changed,itb-image,$<) 220