|
Hi there
To be clear, you are using U-Boot (of unspecified version) to start the Linux kernel.
> Then I downloaded form host to location 0x20008000
> Load Address: 20008000
The kernel is failing to boot because these two addresses are the same!
The kernel image that you downloaded using tftp is in uImage form, which is the Linux kernel bundled with its own uncompression wrapper (similar to a DOS/Win .exe program that can unzip itself). U-Boot treats the image as "uncompressed" because U-Boot itself does not perform the uncompression. The uImage has to perform its own uncompression when execution is transferred from U-Boot to the wrapper code.
The Linux kernel that you're using has been built to execute at the fixed (physical) address of 0x20008000. This cannot be changed once the kernel has been built. It is also an address you don't have to specify for booting the kernel, since this address is stored in the wrapper.
The problem is that you have loaded the kernel iUmage starting at the same memory location where the (uncompressed) kernel needs to be written. The result is that the wrapper code that is performing the uncompression overwrites itself with the uncompressed kernel, which causes the executing program to silently hang.
The proper address to write the uImage is based on the load address of the kernel and the location of U-Boot. I recall that sometimes 0x23000000 is used.
FYI just to confuse matters more, U-Boot uses the environment variable "loadaddr" to hold the starting memory address of where to write the tftp file. This "loadaddr" should not be confused with the "Load Address" stored in the kernel image info.
Regards
|