[U-Boot] Debugging why my kernel won't start

Rogan Dawes rogan at dawes.za.net
Mon Aug 16 09:24:48 CEST 2010


Hi folks,

I'm trying to get mainline u-boot working on my DNS323 (Orion5x based). 
Until I am confident in the config, I'm using a chainloaded approach, 
wrapping my featureful u-boot in an image file:

$ mkimage -A arm -O u-boot -T kernel -C none -a 0x3000000 -e 0x3000000 
-n "UBoot dns323" -d u-boot.bin uImage.bin

I am trying to boot the default kernel that is already flashed into the 
device first. The first problem is that the DNS323 uses an incorrect 
mach-type value of 526, while the registered value is 1542. See 
<http://wiki.dns323.info/software:kernel>). I have modified 
arch/arm/include/asm/mach-types.h to set MACH_TYPE_DNS323 to the 
"correct" Dlink value, which should match what the default kernel is 
expecting.

Unfortunately, all I get is:

DNS323B1> bootm FF820000
## Booting kernel from Legacy Image at ff820000 ...
    Image Name:   Linux-2.6.12.6-arm1
    Image Type:   ARM Linux Kernel Image (uncompressed)
    Data Size:    1490204 Bytes = 1.4 MiB
    Load Address: 00008000
    Entry Point:  00008000
    Verifying Checksum ... OK
    Loading Kernel Image ...

and it hangs there.

That appears to be this code from cmd_bootm:

         case IH_COMP_NONE:
                 if (load == blob_start) {
                         printf ("   XIP %s ... ", type_name);
                 } else {
                         printf ("   Loading %s ... ", type_name);
                         memmove_wd ((void *)load, (void *)image_start,
                                         image_len, CHUNKSZ);
                 }
                 *load_end = load + image_len;
                 puts("OK\n");
                 break;

So, the memmove_wd never completes, it seems.

I added a debug statement at the top of memmove_wd, and got:

Moving memory from ff820040 to 00008000

Is that because the uImage header is 64 bytes?

Also, the following suggests that there may be something wrong with the 
addresses that I am using:

DNS323B1> bootm FF820000 FF9A0000
## Booting kernel from Legacy Image at ff820000 ...
    Image Name:   Linux-2.6.12.6-arm1
    Image Type:   ARM Linux Kernel Image (uncompressed)
    Data Size:    1490204 Bytes = 1.4 MiB
    Load Address: 00008000
    Entry Point:  00008000
    Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at ff9a0000 ...
    Image Name:   Ramdisk
    Image Type:   ARM Linux RAMDisk Image (gzip compressed)
    Data Size:    5240600 Bytes = 5 MiB
    Load Address: 00800000
    Entry Point:  00800000
    Verifying Checksum ... Bad Data CRC
Ramdisk image is corrupt or invalid
DNS323B1>

My chainloaded u-boot is configured in an image to load at 0x3000000, 
and stay there (no relocation), if I have understood these parameters 
correctly:

-a 0x3000000 -e 0x3000000

Can anyone see what I am doing wrong?

Many thanks!

Rogan


More information about the U-Boot mailing list