[U-Boot] Question about FIT images with uboot 1.3.4

Grant Erickson gerickson at nuovations.com
Sat Aug 23 21:49:02 CEST 2008


On 8/23/08 3:31 AM, Remy Bohmer wrote:
> Which version of DTC must be used to get a working FIT image?
> Release 1.2.0 understands the example doc/uImage.FIT/kernel.its, but
> delivers an unbootable image. It fails on line 2285 ("Wrong FIT
> format: no description\n") in common/image.c at
> 
> int fit_check_format (const void *fit)
> {
>        /* mandatory / node 'description' property */
>        if (fdt_getprop (fit, 0, FIT_DESC_PROP, NULL) == NULL) {
>                debug ("Wrong FIT format: no description\n");
>                return 0;
>        }
> 
> Version 1.1.0 of DTC complains about the format of the
> doc/uImage.FIT/kernel.its file at the line:
> data = /incbin/("./vmlinux.bin.gz");
> 
> So, at this moment FIT does not work at all...
> 
> So, does anybody knows what I need to do to get FIT images working on 1.3.4 ?
> (Except debugging and patching the bug, which I can do later on when I
> at least have something working to begin with)

Remy:

An unpatched v1.1.0 of DTC will not work since it does not understand the
'/incbin/' grammar. You'll need to either patch v1.1.0 or, better yet, just
grab v1.2.0 from http://www.jdl.com/software/dtc-v1.2.0.tgz.

While I cannot speak to v1.3.4, I've had this successfully working for
several months now against u-boot v1.3.3 with both a patched v1.1.0 of DTC
to allow binary includes as well as with the aforementioned release v1.2.0
of DTC:

    % make
    ${BuildRoot}/src/tools/host/i686-pc-linux-gnu/bin/dtc -b 0 -S 0x3000 -I
dts -O dtb -o 
${BuildRoot}/src/results/haleakala/denx/eldk/4.1/boot/haleakala.dtb
${BuildRoot}/src/results/haleakala/denx/eldk/4.1/linux/haleakala.dts
    DTC: dts->dtb  on file
"${BuildRoot}/src/results/haleakala/denx/eldk/4.1/linux/haleakala.dts"
    Translating (ppc_4xx-objcopy denx/eldk/4.1)
"${BuildRoot}/src/results/haleakala/denx/eldk/4.1/linux/vmlinux"
    ${ToolRoot}/eldk/4.1/usr/bin/ppc_4xx-objcopy -O binary
${BuildRoot}/src/results/haleakala/denx/eldk/4.1/linux/vmlinux
build/haleakala/denx/eldk/4.1/vmlinux.bin
    Compressing (gzip) "build/haleakala/denx/eldk/4.1/vmlinux.bin"
    gzip -f -9 -c build/haleakala/denx/eldk/4.1/vmlinux.bin >
${BuildRoot}/src/results/haleakala/denx/eldk/4.1/boot/vmlinux.bin.gz
    sed \
        -e s, at ARCH@,powerpc,g \
        -e 
s, at FDT@,${BuildRoot}/src/results/haleakala/denx/eldk/4.1/boot/haleakala.dtb,
g \
        -e 
s, at KERNEL@,${BuildRoot}/src/results/haleakala/denx/eldk/4.1/boot/vmlinux.bin
.gz,g \
        -e s, at OS@,linux,g \
        < boot.its.in > build/haleakala/denx/eldk/4.1/boot.its
    ${BuildRoot}/src/u-boot/build/haleakala/denx/eldk/4.1/tools/mkimage -f
build/haleakala/denx/eldk/4.1/boot.its
${BuildRoot}/src/results/haleakala/denx/eldk/4.1/boot/boot.itb
    FIT format handling
    Trying to execute "dtc -I dts -O dtb -p 500
build/haleakala/denx/eldk/4.1/boot.its >
${BuildRoot}/src/results/haleakala/denx/eldk/4.1/boot/boot.itb.tmp"
    DTC: dts->dtb  on file "build/haleakala/denx/eldk/4.1/boot.its"
    Added timestamp successfully
    rm build/haleakala/denx/eldk/4.1/boot.its

The contents of boot.its.in are:

    / {
        description = "Linux Kernel with Device Tree";
    
        #address-cells = <1>;
    
        images {
            kernel at 1 {
                description = "Kernel";
                data = /incbin/("@KERNEL@");
                type = "kernel";
                arch = "@ARCH@";
                os = "@OS@";
                compression = "gzip";
                load = <00000000>;
                entry = <00000000>;
                hash at 1 {
                    algo = "crc32";
                };
            };
            fdt at 1 {
                description = "Device Tree";
                data = /incbin/("@FDT@");
                type = "flat_dt";
                arch = "@ARCH@";
                compression = "none";
                hash at 1 {
                    algo = "crc32";
                };
            };
        };
    
        configurations {
            default = "config at 1";
    
            config at 1 {
                description = "Kernel with Device Tree";
                kernel = "kernel at 1";
                fdt = "fdt at 1";
            };
        };
    };

Back on the target board:

    => version
    U-Boot 1.3.3 (Jul 18 2008 - 13:09:15)
    => run boot0
    Loading from NAND 64MiB 3,3V 8-bit, offset 0x0
    Fit image detected...
       FIT description: Linux Kernel with Device Tree
        Image 0 (kernel at 1)
         Description:  Kernel
         Type:         Kernel Image
         Compression:  gzip compressed
         Data Start:   0x008000c8
         Data Size:    1295427 Bytes =  1.2 MB
         Architecture: PowerPC
         OS:           Linux
         Load Address: 0x00000000
         Entry Point:  0x00000000
         Hash algo:    crc32
         Hash value:   403f3fdd
        Image 1 (fdt at 1)
         Description:  Device Tree
         Type:         Flat Device Tree
         Compression:  uncompressed
         Data Start:   0x0093c5e4
         Data Size:    12288 Bytes = 12 kB
         Architecture: PowerPC
         Hash algo:    crc32
         Hash value:   d726e662
        Default Configuration: 'config at 1'
        Configuration 0 (config at 1)
         Description:  Kernel with Device Tree
         Kernel:       kernel at 1
         FDT:          fdt at 1
    ## Booting kernel from FIT Image at 00800000 ...
       Using 'config at 1' configuration
       Trying 'kernel at 1' kernel subimage
         Description:  Kernel
         Type:         Kernel Image
         Compression:  gzip compressed
         Data Start:   0x008000c8
         Data Size:    1295427 Bytes =  1.2 MB
         Architecture: PowerPC
         OS:           Linux
         Load Address: 0x00000000
         Entry Point:  0x00000000
         Hash algo:    crc32
         Hash value:   403f3fdd
       Verifying Hash Integrity ... crc32+ OK
       Uncompressing Kernel Image ... OK
    ## Flattened Device Tree from FIT Image at 00800000
       Using 'config at 1' configuration
       Trying 'fdt at 1' FDT blob subimage
         Description:  Device Tree
         Type:         Flat Device Tree
         Compression:  uncompressed
         Data Start:   0x0093c5e4
         Data Size:    12288 Bytes = 12 kB
         Architecture: PowerPC
         Hash algo:    crc32
         Hash value:   d726e662
       Verifying Hash Integrity ... crc32+ OK
       Booting using the fdt blob at 0x93c5e4
       Loading Device Tree to 007fd000, end 007fffff ... OK

Regards,

Grant Erickson

-- 
Principal
Nuovation System Designs, LLC




More information about the U-Boot mailing list