From mboxrd@z Thu Jan 1 00:00:00 1970 From: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= Date: Thu, 15 Mar 2007 16:55:50 +0100 Subject: [U-Boot-Users] arm linux images with load address == entry point Message-ID: <20070315155550.GA7760@lala> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello, the make target "uImage" in the linux kernel calls mkimage as follows: $(MKIMAGE) -A arm -O linux -T kernel \ -C none -a $(ZRELADDR) -e $(ZRELADDR) \ -n 'Linux-$(KERNELRELEASE)' -d $< $@ (see http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=arch/arm/boot/Makefile;h=ec9c400c7f82d171ba9ccf6e52cdb055bf1a50cb;hb=HEAD, line 63) i.e. sets the load address and the entry point to the same address. This part is unchanged since it was introduced in 2003. If I understand do_bootm and do_bootm_linux (for arm, in lib_arm/armlinux.c) correctly, the first asserts that the image is loaded to the load address[1] and the latter jumps to entry point. For an image created with the above rule from the vanilla kernel, that means, jump to the header (instead of the actual image@entry point + 0x40). So I think the linux rule is wrong, or did I miss anything? The U-Boot I have on my target here has somewhere after the crc check in do_bootm the following: hdr->ih_load = htonl(addr); hdr->ih_ep = htonl(addr + 0x40); (Actually it's still worse, load_addr instead of addr is used ...) This works but is ugly. I wonder how other people using U-Boot + Linux on ARM handle that. Best regards Uwe PS: Linux uses entry point == load address == 0 for PowerPC. Didn't look in the PowerPC version of bootm_linux, but maybe it has the same problem? [1] For Linux this is not needed, because the decompressor (at least for 2.6) is position independant. But that's another topic. -- Uwe Kleine-K?nig http://www.google.com/search?q=1+stone%3D