[U-Boot] Booting kernel/dtb with FIT image

Hi,
Here is a problem I presently meet, any help or track to follow would be welcome.
My U-boot (2016.09) loads a kernel and a dtb, and "bootm" all this. This is my reference, and this is correctly running.
From this, I'm trying to implement FIT image management, so I enabled
CONFIG_FIT.
On the other side, I constructed the ITS FILE from my kernel and my dtb, as described below:
*/dts-v1/;* */ {* * description = "Simple image with single Linux kernel and FDT blob";* * #address-cells = <0x1>;* * images {* * kernel@1 {* * description = "My Linux kernel";* * data = /incbin/("./uImage");* * type = "kernel";* * arch = "arm";* * os = "linux";* * compression = "none";* * load = <0x40008000>;* * entry = <0x40008000>;* * hash@1 {* * algo = "md5";* * };* * hash@2 {* * algo = "sha1";* * };* * };* * fdt@1 {* * description = "My Flattened Device Tree blob";* * data = /incbin/("./mydtb.dtb");* * type = "flat_dt";* * arch = "arm";* * compression = "none";* * hash@1 {* * algo = "md5";* * };* * hash@2 {* * algo = "sha1";* * };* * };* * };* */* a notable concept of FIT, configurations */* * configurations {* * default = "conf@1";* * conf@1 {* * description = "Boot Linux kernel with FDT blob";* * kernel = "kernel@1";* * fdt = "fdt@1";* * };* * };* *};*
I managed to construct the ITB (using the mkimage of my u-boot, in tools directory) and to store it on my target.
I load this ITB at 0x60000000 address of memory.
The "bootm 0x60000000" gives the following error: "Ramdisk image is corrupt or invalid". Indeed I have no ramdisk. Not what was described in tutorials.
The "bootm 0x60000000 - " gives a better result: *## Loading kernel from FIT Image at 60000000 ...* * Using 'conf@1' configuration* * Trying 'kernel@1' kernel subimage* * Description: My Linux kernel* * Type: Kernel Image* * Compression: uncompressed* * Data Start: 0x600000e4* * Data Size: 5568600 Bytes = 5.3 MiB (Note: same size as the original file!)* * Architecture: ARM* * OS: Linux* * Load Address: 0x40008000* * Entry Point: 0x40008000* * Hash algo: md5* * Hash value: 0cccb060e1c4f50e98d8f6c8ed61242e* * Hash algo: sha1* * Hash value: f0442dd1b8c4f006b25533c3148df2742fc8a7ad* * Verifying Hash Integrity ... md5+ sha1+ OK* *## Loading fdt from FIT Image at 60000000 ...* * Using 'conf@1' configuration* * Trying 'fdt@1' fdt subimage* * Description: My Flattened Device Tree blob* * Type: Flat Device Tree* * Compression: uncompressed* * Data Start: 0x6054fa70* * Data Size: 55154 Bytes = 53.9 KiB **(Note: same size as the original file!)* * Architecture: ARM* * Hash algo: md5* * Hash value: a201db29486c7c70b707e085d0196fda* * Hash algo: sha1* * Hash value: adb751ba04c1aed120a329bb4812a9c8f0bb68a7* * Verifying Hash Integrity ... md5+ sha1+ OK* * Booting using the fdt blob at 0x6054fa70* * Loading Kernel Image ... OK* * Using Device Tree in place at 6054fa70, end 605601e1*
*Starting kernel ...*
And unfortunately nothing else after.
I have the feeling to be in the same conditions, but I do not have the same result.
If you have any idea of what could be wrong, please let me know, it would be welcomed. Maybe some corrections have been pushed in this domain since v2016.09? Thanks in advance.
Best Regards Nicolas

On Fri, Jan 13, 2017 at 6:13 PM, Nicolas le bayon nlebayon@gmail.com wrote:
Hi,
Here is a problem I presently meet, any help or track to follow would be welcome.
My U-boot (2016.09) loads a kernel and a dtb, and "bootm" all this. This is my reference, and this is correctly running.
From this, I'm trying to implement FIT image management, so I enabled CONFIG_FIT.
On the other side, I constructed the ITS FILE from my kernel and my dtb, as described below:
*/dts-v1/;* */ {*
- description = "Simple image with single Linux kernel and FDT blob";*
- #address-cells = <0x1>;*
- images {*
kernel@1 {*
description = "My Linux kernel";*
data = /incbin/("./uImage");*
Usually kernel images can be considered to vmlinux.bin or vmlinux.bin.gz (if compressed) in its
type = "kernel";*
arch = "arm";*
os = "linux";*
compression = "none";*
load = <0x40008000>;*
entry = <0x40008000>;*
hash@1 {*
algo = "md5";*
};*
hash@2 {*
algo = "sha1";*
};*
};*
fdt@1 {*
description = "My Flattened Device Tree blob";*
data = /incbin/("./mydtb.dtb");*
type = "flat_dt";*
arch = "arm";*
compression = "none";*
hash@1 {*
algo = "md5";*
};*
hash@2 {*
algo = "sha1";*
};*
};*
- };*
*/* a notable concept of FIT, configurations */*
- configurations {*
default = "conf@1";*
conf@1 {*
description = "Boot Linux kernel with FDT blob";*
kernel = "kernel@1";*
fdt = "fdt@1";*
};*
- };*
*};*
I managed to construct the ITB (using the mkimage of my u-boot, in tools directory) and to store it on my target.
I load this ITB at 0x60000000 address of memory.
The "bootm 0x60000000" gives the following error: "Ramdisk image is corrupt or invalid". Indeed I have no ramdisk. Not what was described in tutorials.
Sorry I didn't see "Ramdisk image" correct on below log, shall I miss?
thanks!

On 13/01/17 17:13, Nicolas le bayon wrote:
Hi,
Here is a problem I presently meet, any help or track to follow would be welcome.
My U-boot (2016.09) loads a kernel and a dtb, and "bootm" all this. This is my reference, and this is correctly running.
From this, I'm trying to implement FIT image management, so I enabled CONFIG_FIT.
On the other side, I constructed the ITS FILE from my kernel and my dtb, as described below:
*/dts-v1/;* */ {*
- description = "Simple image with single Linux kernel and FDT blob";*
- #address-cells = <0x1>;*
- images {*
kernel@1 {*
description = "My Linux kernel";*
data = /incbin/("./uImage");*
uImage is usually the name of a kernel wrapped into a _legacy U-Boot image_. Now you are using the new FIT image, so I would use zImage as the source here instead, otherwise you will have it double wrapped. I guess U-Boot can't cope with that, also it would be a bit weird. So copy arch/arm/boot/zImage and use that instead.
Cheers, Andre.
type = "kernel";*
arch = "arm";*
os = "linux";*
compression = "none";*
load = <0x40008000>;*
entry = <0x40008000>;*
hash@1 {*
algo = "md5";*
};*
hash@2 {*
algo = "sha1";*
};*
};*
fdt@1 {*
description = "My Flattened Device Tree blob";*
data = /incbin/("./mydtb.dtb");*
type = "flat_dt";*
arch = "arm";*
compression = "none";*
hash@1 {*
algo = "md5";*
};*
hash@2 {*
algo = "sha1";*
};*
};*
- };*
*/* a notable concept of FIT, configurations */*
- configurations {*
default = "conf@1";*
conf@1 {*
description = "Boot Linux kernel with FDT blob";*
kernel = "kernel@1";*
fdt = "fdt@1";*
};*
- };*
*};*
I managed to construct the ITB (using the mkimage of my u-boot, in tools directory) and to store it on my target.
I load this ITB at 0x60000000 address of memory.
The "bootm 0x60000000" gives the following error: "Ramdisk image is corrupt or invalid". Indeed I have no ramdisk. Not what was described in tutorials.
The "bootm 0x60000000 - " gives a better result: *## Loading kernel from FIT Image at 60000000 ...*
- Using 'conf@1' configuration*
- Trying 'kernel@1' kernel subimage*
Description: My Linux kernel*
Type: Kernel Image*
Compression: uncompressed*
Data Start: 0x600000e4*
Data Size: 5568600 Bytes = 5.3 MiB (Note: same size as the
original file!)*
Architecture: ARM*
OS: Linux*
Load Address: 0x40008000*
Entry Point: 0x40008000*
Hash algo: md5*
Hash value: 0cccb060e1c4f50e98d8f6c8ed61242e*
Hash algo: sha1*
Hash value: f0442dd1b8c4f006b25533c3148df2742fc8a7ad*
- Verifying Hash Integrity ... md5+ sha1+ OK*
*## Loading fdt from FIT Image at 60000000 ...*
- Using 'conf@1' configuration*
- Trying 'fdt@1' fdt subimage*
Description: My Flattened Device Tree blob*
Type: Flat Device Tree*
Compression: uncompressed*
Data Start: 0x6054fa70*
Data Size: 55154 Bytes = 53.9 KiB **(Note: same size as the
original file!)*
Architecture: ARM*
Hash algo: md5*
Hash value: a201db29486c7c70b707e085d0196fda*
Hash algo: sha1*
Hash value: adb751ba04c1aed120a329bb4812a9c8f0bb68a7*
- Verifying Hash Integrity ... md5+ sha1+ OK*
- Booting using the fdt blob at 0x6054fa70*
- Loading Kernel Image ... OK*
- Using Device Tree in place at 6054fa70, end 605601e1*
*Starting kernel ...*
And unfortunately nothing else after.
I have the feeling to be in the same conditions, but I do not have the same result.
If you have any idea of what could be wrong, please let me know, it would be welcomed. Maybe some corrections have been pushed in this domain since v2016.09? Thanks in advance.
Best Regards Nicolas _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

2017-01-13 23:39 GMT+01:00 André Przywara andre.przywara@arm.com:
On 13/01/17 17:13, Nicolas le bayon wrote:
Hi,
Here is a problem I presently meet, any help or track to follow would be welcome.
My U-boot (2016.09) loads a kernel and a dtb, and "bootm" all this. This
is
my reference, and this is correctly running.
From this, I'm trying to implement FIT image management, so I enabled CONFIG_FIT.
On the other side, I constructed the ITS FILE from my kernel and my dtb,
as
described below:
*/dts-v1/;* */ {*
- description = "Simple image with single Linux kernel and FDT blob";*
- #address-cells = <0x1>;*
- images {*
kernel@1 {*
description = "My Linux kernel";*
data = /incbin/("./uImage");*
uImage is usually the name of a kernel wrapped into a _legacy U-Boot image_. Now you are using the new FIT image, so I would use zImage as the source here instead, otherwise you will have it double wrapped. I guess U-Boot can't cope with that, also it would be a bit weird. So copy arch/arm/boot/zImage and use that instead.
Cheers, Andre.
You're right André, using zImage is the solution to bot correctly the kernel, the header is weel-recognized by the system. Many thanks for your help! Best Regards Nicolas
type = "kernel";*
arch = "arm";*
os = "linux";*
compression = "none";*
load = <0x40008000>;*
entry = <0x40008000>;*
hash@1 {*
algo = "md5";*
};*
hash@2 {*
algo = "sha1";*
};*
};*
fdt@1 {*
description = "My Flattened Device Tree blob";*
data = /incbin/("./mydtb.dtb");*
type = "flat_dt";*
arch = "arm";*
compression = "none";*
hash@1 {*
algo = "md5";*
};*
hash@2 {*
algo = "sha1";*
};*
};*
- };*
*/* a notable concept of FIT, configurations */*
- configurations {*
default = "conf@1";*
conf@1 {*
description = "Boot Linux kernel with FDT blob";*
kernel = "kernel@1";*
fdt = "fdt@1";*
};*
- };*
*};*
I managed to construct the ITB (using the mkimage of my u-boot, in tools directory) and to store it on my target.
I load this ITB at 0x60000000 address of memory.
The "bootm 0x60000000" gives the following error: "Ramdisk image is
corrupt
or invalid". Indeed I have no ramdisk. Not what was described in
tutorials.
The "bootm 0x60000000 - " gives a better result: *## Loading kernel from FIT Image at 60000000 ...*
- Using 'conf@1' configuration*
- Trying 'kernel@1' kernel subimage*
Description: My Linux kernel*
Type: Kernel Image*
Compression: uncompressed*
Data Start: 0x600000e4*
Data Size: 5568600 Bytes = 5.3 MiB (Note: same size as the
original file!)*
Architecture: ARM*
OS: Linux*
Load Address: 0x40008000*
Entry Point: 0x40008000*
Hash algo: md5*
Hash value: 0cccb060e1c4f50e98d8f6c8ed61242e*
Hash algo: sha1*
Hash value: f0442dd1b8c4f006b25533c3148df2742fc8a7ad*
- Verifying Hash Integrity ... md5+ sha1+ OK*
*## Loading fdt from FIT Image at 60000000 ...*
- Using 'conf@1' configuration*
- Trying 'fdt@1' fdt subimage*
Description: My Flattened Device Tree blob*
Type: Flat Device Tree*
Compression: uncompressed*
Data Start: 0x6054fa70*
Data Size: 55154 Bytes = 53.9 KiB **(Note: same size as the
original file!)*
Architecture: ARM*
Hash algo: md5*
Hash value: a201db29486c7c70b707e085d0196fda*
Hash algo: sha1*
Hash value: adb751ba04c1aed120a329bb4812a9c8f0bb68a7*
- Verifying Hash Integrity ... md5+ sha1+ OK*
- Booting using the fdt blob at 0x6054fa70*
- Loading Kernel Image ... OK*
- Using Device Tree in place at 6054fa70, end 605601e1*
*Starting kernel ...*
And unfortunately nothing else after.
I have the feeling to be in the same conditions, but I do not have the
same
result.
If you have any idea of what could be wrong, please let me know, it would be welcomed. Maybe some corrections have been pushed in this domain since v2016.09? Thanks in advance.
Best Regards Nicolas _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
participants (3)
-
André Przywara
-
Jagan Teki
-
Nicolas le bayon