[U-Boot] Loading uImage into RAM

I'm trying to understand how u-boot loads zImage into RAM.
mkimage is called as
mkimage -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008040 -d arch/arm/boot/zImage /bootImage/uImage
Here, 'a' stands for load address and 'e' stands for entry point (64 bytes are used for wrapping?). However, when loading uImage from u-boot, boot operation starts at address 0x80100000. Furthermore, u-boot recognizes the load address and entry point as 0x80008000.
Loading from NAND 128MiB 3,3V 8-bit, offset 0x1c0000 Image Name: Linux-2.6.27.8 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1735148 Bytes = 1.7 MB Load Address: 80008000 Entry Point: 80008000
## Booting kernel from Legacy Image at 80100000 ... Image Name: Linux-2.6.27.8 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1735148 Bytes = 1.7 MB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK Loading Kernel Image ... OK
OK
Starting kernel ...
Could you help me with this?
abdullah

Hi Abdullah,
On Tue, May 6, 2014 at 10:55 AM, Abdullah YILDIZ abdullah.mails@gmail.com wrote:
I'm trying to understand how u-boot loads zImage into RAM.
mkimage is called as
mkimage -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008040 -d arch/arm/boot/zImage /bootImage/uImage
Here, 'a' stands for load address and 'e' stands for entry point (64 bytes are used for wrapping?). However, when loading uImage from u-boot, boot operation starts at address 0x80100000. Furthermore, u-boot recognizes the load address and entry point as 0x80008000.
Kernel uImage is loaded from NAND to ram at address which $loadaddr points to (check print $loadaddr) or env command which loading kerenl image from NAND. Then by bootm command is copied to address which is specified in mkimage (e.g. 0x80008000). Hope this helps.
Loading from NAND 128MiB 3,3V 8-bit, offset 0x1c0000 Image Name: Linux-2.6.27.8 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1735148 Bytes = 1.7 MB Load Address: 80008000 Entry Point: 80008000
## Booting kernel from Legacy Image at 80100000 ... Image Name: Linux-2.6.27.8 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1735148 Bytes = 1.7 MB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK Loading Kernel Image ... OK
OK
Starting kernel ...
Could you help me with this?
abdullah _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
BR,
marek

Hi Belisko,
On Tue, May 6, 2014 at 12:34 PM, Belisko Marek marek.belisko@gmail.com wrote:
Hi Abdullah,
On Tue, May 6, 2014 at 10:55 AM, Abdullah YILDIZ abdullah.mails@gmail.com wrote:
I'm trying to understand how u-boot loads zImage into RAM.
mkimage is called as
mkimage -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008040 -d arch/arm/boot/zImage /bootImage/uImage
Why is entry point different from load address of uImage?
Here, 'a' stands for load address and 'e' stands for entry point (64 bytes are used for wrapping?). However, when loading uImage from u-boot, boot operation starts at address 0x80100000. Furthermore, u-boot recognizes the load address and entry point as 0x80008000.
Kernel uImage is loaded from NAND to ram at address which $loadaddr points to (check print $loadaddr) or env command which loading kerenl image from NAND. Then by bootm command is copied to address which is specified in mkimage (e.g. 0x80008000). Hope this helps.
Kind regards.
abdullah

Hi Abdullah,
On Tue, May 6, 2014 at 11:54 AM, Abdullah YILDIZ abdullah.mails@gmail.com wrote:
Hi Belisko,
On Tue, May 6, 2014 at 12:34 PM, Belisko Marek marek.belisko@gmail.com wrote:
Hi Abdullah,
On Tue, May 6, 2014 at 10:55 AM, Abdullah YILDIZ abdullah.mails@gmail.com wrote:
I'm trying to understand how u-boot loads zImage into RAM.
mkimage is called as
mkimage -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008040 -d arch/arm/boot/zImage /bootImage/uImage
Why is entry point different from load address of uImage?
It is set to skip 64bytes (0x40) of mkimage header.
Here, 'a' stands for load address and 'e' stands for entry point (64 bytes are used for wrapping?). However, when loading uImage from u-boot, boot operation starts at address 0x80100000. Furthermore, u-boot recognizes the load address and entry point as 0x80008000.
Kernel uImage is loaded from NAND to ram at address which $loadaddr points to (check print $loadaddr) or env command which loading kerenl image from NAND. Then by bootm command is copied to address which is specified in mkimage (e.g. 0x80008000). Hope this helps.
Kind regards.
abdullah
BR,
marek

Dear Belisko Marek,
In message CAAfyv34gspt4whV-sa=mo0fFunZfX8FA6+=e7jRdpZ59hygENw@mail.gmail.com you wrote:
Hi Abdullah,
On Tue, May 6, 2014 at 11:54 AM, Abdullah YILDIZ abdullah.mails@gmail.com wrote:
Hi Belisko,
On Tue, May 6, 2014 at 12:34 PM, Belisko Marek marek.belisko@gmail.com wrote:
Hi Abdullah,
On Tue, May 6, 2014 at 10:55 AM, Abdullah YILDIZ abdullah.mails@gmail.com wrote:
I'm trying to understand how u-boot loads zImage into RAM.
mkimage is called as
mkimage -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008040 -d arch/arm/boot/zImage /bootImage/uImage
Why is entry point different from load address of uImage?
It is set to skip 64bytes (0x40) of mkimage header.
Actually the configuration given here looks bogus. The 64 byte header of the legacy image format does NOT get copied to the address range starting at load address, so you actually start execution at a 64 byte offset within your binary. This is likely incorrect.
A common error is to misunderstand that the "loadaddr" variable used in U-Boot as target address for the image download has _nothing_ to do with the "loadaddr" parameter of the mkimage command , which gives the address where the "bootm" command will copy the image to (eventually uncompressing it). Unfortunately ARM never adapted to use this.
Best regards,
Wolfgang Denk
participants (3)
-
Abdullah YILDIZ
-
Belisko Marek
-
Wolfgang Denk