mirror of
https://github.com/torvalds/linux.git
synced 2024-11-05 11:32:04 +00:00
e69edc7939
As long as the zImage is placed within the 128MB range from the start of memory, ZRELADDR (Address where the decompressed kernel will be placed, usually == PHYS_OFFSET + TEXT_OFFSET) can be determined at run-time by masking PC with 0xf80000000. Running through all the Makefile.boot, all those zreladdr-y addresses == 0x[0-f][08]00_0000 + TEXT_OFFSET can be determined at run-time. Option CONFIG_AUTO_ZRELADDR and CONFIG_ZRELADDR are introduced, CONFIG_ZRELADDR _must_ be explicitly specified if: - ((zreladdr-y - TEXT_OFFSET) & ~0xf8000000) != 0, which means masking PC with 0xf8000000 will result in an incorrect address. Currently this is only a problem on u300. - or the assumption of the zImage being loaded by the bootloader within the first 128MB of RAM is incorrect - or when ZBOOT_ROM is used, where the above assumption is usually wrong. [ukleinek: changed mask from 0xf0000000 to 0xf8000000 for mx1 and shark + some review fixes from the mailing list] Original-Idea-and-Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org> Signed-off-by: Eric Miao <eric.miao@canonical.com> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
114 lines
3.0 KiB
Makefile
114 lines
3.0 KiB
Makefile
#
|
|
# arch/arm/boot/Makefile
|
|
#
|
|
# This file is included by the global makefile so that you can add your own
|
|
# architecture-specific flags and dependencies.
|
|
#
|
|
# This file is subject to the terms and conditions of the GNU General Public
|
|
# License. See the file "COPYING" in the main directory of this archive
|
|
# for more details.
|
|
#
|
|
# Copyright (C) 1995-2002 Russell King
|
|
#
|
|
|
|
MKIMAGE := $(srctree)/scripts/mkuboot.sh
|
|
|
|
ifneq ($(MACHINE),)
|
|
-include $(srctree)/$(MACHINE)/Makefile.boot
|
|
endif
|
|
|
|
# Note: the following conditions must always be true:
|
|
# PARAMS_PHYS must be within 4MB of ZRELADDR
|
|
# INITRD_PHYS must be in RAM
|
|
PARAMS_PHYS := $(params_phys-y)
|
|
INITRD_PHYS := $(initrd_phys-y)
|
|
|
|
export INITRD_PHYS PARAMS_PHYS
|
|
|
|
targets := Image zImage xipImage bootpImage uImage
|
|
|
|
ifeq ($(CONFIG_XIP_KERNEL),y)
|
|
|
|
$(obj)/xipImage: vmlinux FORCE
|
|
$(call if_changed,objcopy)
|
|
@echo ' Kernel: $@ is ready (physical address: $(CONFIG_XIP_PHYS_ADDR))'
|
|
|
|
$(obj)/Image $(obj)/zImage: FORCE
|
|
@echo 'Kernel configured for XIP (CONFIG_XIP_KERNEL=y)'
|
|
@echo 'Only the xipImage target is available in this case'
|
|
@false
|
|
|
|
else
|
|
|
|
$(obj)/xipImage: FORCE
|
|
@echo 'Kernel not configured for XIP (CONFIG_XIP_KERNEL!=y)'
|
|
@false
|
|
|
|
$(obj)/Image: vmlinux FORCE
|
|
$(call if_changed,objcopy)
|
|
@echo ' Kernel: $@ is ready'
|
|
|
|
$(obj)/compressed/vmlinux: $(obj)/Image FORCE
|
|
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
|
|
|
|
$(obj)/zImage: $(obj)/compressed/vmlinux FORCE
|
|
$(call if_changed,objcopy)
|
|
@echo ' Kernel: $@ is ready'
|
|
|
|
endif
|
|
|
|
quiet_cmd_uimage = UIMAGE $@
|
|
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
|
|
-C none -a $(LOADADDR) -e $(STARTADDR) \
|
|
-n 'Linux-$(KERNELRELEASE)' -d $< $@
|
|
|
|
ifeq ($(CONFIG_ZBOOT_ROM),y)
|
|
$(obj)/uImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)
|
|
else
|
|
$(obj)/uImage: LOADADDR=$(CONFIG_ZRELADDR)
|
|
endif
|
|
|
|
ifeq ($(CONFIG_THUMB2_KERNEL),y)
|
|
# Set bit 0 to 1 so that "mov pc, rx" switches to Thumb-2 mode
|
|
$(obj)/uImage: STARTADDR=$(shell echo $(LOADADDR) | sed -e "s/.$$/1/")
|
|
else
|
|
$(obj)/uImage: STARTADDR=$(LOADADDR)
|
|
endif
|
|
|
|
$(obj)/uImage: $(obj)/zImage FORCE
|
|
$(call if_changed,uimage)
|
|
@echo ' Image $@ is ready'
|
|
|
|
$(obj)/bootp/bootp: $(obj)/zImage initrd FORCE
|
|
$(Q)$(MAKE) $(build)=$(obj)/bootp $@
|
|
@:
|
|
|
|
$(obj)/bootpImage: $(obj)/bootp/bootp FORCE
|
|
$(call if_changed,objcopy)
|
|
@echo ' Kernel: $@ is ready'
|
|
|
|
PHONY += initrd FORCE
|
|
initrd:
|
|
@test "$(INITRD_PHYS)" != "" || \
|
|
(echo This machine does not support INITRD; exit -1)
|
|
@test "$(INITRD)" != "" || \
|
|
(echo You must specify INITRD; exit -1)
|
|
|
|
install: $(obj)/Image
|
|
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
|
$(obj)/Image System.map "$(INSTALL_PATH)"
|
|
|
|
zinstall: $(obj)/zImage
|
|
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
|
$(obj)/zImage System.map "$(INSTALL_PATH)"
|
|
|
|
zi:
|
|
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
|
$(obj)/zImage System.map "$(INSTALL_PATH)"
|
|
|
|
i:
|
|
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
|
$(obj)/Image System.map "$(INSTALL_PATH)"
|
|
|
|
subdir- := bootp compressed
|