[U-Boot] Help needed: Boot signed RTOS

Hi,
I try to boot a signed RTOS as FIT Image with the bootm command and I'm kind of stuck here - any help well appreciated. When booting, U-Boot shows the following error message: “No Linux ARM Kernel Image Image ERROR: can't get kernel image!”
My questions: - Is it possible to boot a signed RTOS with U-Boot? - Is there something I do wrong (I'm rather new to U-Boot)?
I use the following setup: - U-Boot 2013.07 - i.MX28 board - safeRTOS which I can boot with the bootelf command
The following mkimage command (which does not yet create a signature) works and produces a with bootm bootable "u-rtos" file: mkimage -A arm -C none -O qnx -T kernel_noload -d safeRTOS u-rtos
I tried to re-build the above parameters in my .its File (which I need to use the signing features of mkimage):
/dts-v1/; / { description = "MY-RTOS"; #address-cells = <1>; images { kernel@1 { description = "MY-RTOS"; data = /incbin/("./my-rtos-image"); type = "kernel_noload"; arch = "arm"; os = "qnx"; compression = "none"; signature@1 { algo = "sha1,rsa2048"; key-name-hint = "dev"; }; }; }; configurations { default = "conf@1"; conf@1 { kernel = "kernel@1"; hash@1 { algo = "sha1"; }; }; }; };
I run the following command to get my FIT-file: mkimage -f rtos.its -k <path-to-my-keys> rtos.fit
When booting the FIT file with bootm, I get the following output:
=> bootm 0x42000000 ## Loading kernel from FIT Image at 42000000 ... Using 'conf@1' configuration Verifying Hash Integrity ... OK Trying 'kernel@1' kernel subimage Description: safeRTOS Kernel Type: Kernel Image (no loading done) Compression: uncompressed Data Start: 0x420000b8 Data Size: 1543860 Bytes = 1.5 MiB Sign algo: sha1,rsa2048:dev Sign value: 45bd54112.........99d0d710 Verifying Hash Integrity ... sha1,rsa2048:dev+ OK No Linux ARM Kernel Image Image ERROR: can't get kernel image!
It seems that the whole signature-checking works. However U-Boot apparently expects a kernel and instead gets my RTOS to boot. How can I tell U-Boot that I want to run my bootelf-runable RTOS?
I'm really stuck here - any help is very much appreciated!
thank you & best regards, Christopher

Hi Christopher,
On Wed, Nov 20, 2013 at 10:49 AM, Christopher Preschern < christopher.preschern@tugraz.at> wrote:
Hi,
I try to boot a signed RTOS as FIT Image with the bootm command and I'm kind of stuck here - any help well appreciated. When booting, U-Boot shows the following error message: “No Linux ARM Kernel Image Image ERROR: can't get kernel image!”
My questions:
- Is it possible to boot a signed RTOS with U-Boot?
- Is there something I do wrong (I'm rather new to U-Boot)?
I use the following setup:
- U-Boot 2013.07
- i.MX28 board
- safeRTOS which I can boot with the bootelf command
The following mkimage command (which does not yet create a signature) works and produces a with bootm bootable "u-rtos" file: mkimage -A arm -C none -O qnx -T kernel_noload -d safeRTOS u-rtos
I tried to re-build the above parameters in my .its File (which I need to use the signing features of mkimage):
/dts-v1/; / { description = "MY-RTOS"; #address-cells = <1>; images { kernel@1 { description = "MY-RTOS"; data = /incbin/("./my-rtos-image"); type = "kernel_noload"; arch = "arm"; os = "qnx"; compression = "none"; signature@1 { algo = "sha1,rsa2048"; key-name-hint = "dev"; }; }; }; configurations { default = "conf@1"; conf@1 { kernel = "kernel@1"; hash@1 { algo = "sha1"; }; }; }; };
I run the following command to get my FIT-file: mkimage -f rtos.its -k <path-to-my-keys> rtos.fit
When booting the FIT file with bootm, I get the following output:
=> bootm 0x42000000 ## Loading kernel from FIT Image at 42000000 ... Using 'conf@1' configuration Verifying Hash Integrity ... OK Trying 'kernel@1' kernel subimage Description: safeRTOS Kernel Type: Kernel Image (no loading done)
This means Linux kernel. You probably need a new type - the one you are using is this one (common/image.c):
{ IH_TYPE_KERNEL_NOLOAD, "kernel_noload", "Kernel Image (no loading done)", },
You can add a new type in include/image.h but will need to also add support for it in a few places.
Compression: uncompressed Data Start: 0x420000b8 Data Size: 1543860 Bytes = 1.5 MiB Sign algo: sha1,rsa2048:dev Sign value: 45bd54112.........99d0d710 Verifying Hash Integrity ... sha1,rsa2048:dev+ OK
No Linux ARM Kernel Image Image ERROR: can't get kernel image!
It seems that the whole signature-checking works. However U-Boot apparently expects a kernel and instead gets my RTOS to boot. How can I tell U-Boot that I want to run my bootelf-runable RTOS?
I'm really stuck here - any help is very much appreciated!
thank you & best regards, Christopher
--
| Christopher Preschern | Institute for Technical Informatics - TU Graz | Tel: +43 (316) 873 - 6404 | EMail: christopher.preschern@tugraz.at
Regards, Simon

Hi Simon,
thanks for the quick answer.
=> bootm 0x42000000 ## Loading kernel from FIT Image at 42000000 ... Using 'conf@1' configuration Verifying Hash Integrity ... OK Trying 'kernel@1' kernel subimage Description: safeRTOS Kernel Type: Kernel Image (no loading done)
This means Linux kernel. You probably need a new type
ok thanks - I guess that's a bit too big for me - I don't really have the expertise to make these changes.
I had hoped that I just have the wrong configuration in the .its file and that it is already possible to boot my FIT-packed ELF file.
thanks anyway.
Best regards, Christopher

Hi Christopher,
On Thu, Nov 21, 2013 at 4:04 AM, Christopher Preschern < christopher.preschern@tugraz.at> wrote:
Hi Simon,
thanks for the quick answer.
=> bootm 0x42000000
## Loading kernel from FIT Image at 42000000 ... Using 'conf@1' configuration Verifying Hash Integrity ... OK Trying 'kernel@1' kernel subimage Description: safeRTOS Kernel Type: Kernel Image (no loading done)
This means Linux kernel. You probably need a new type
ok thanks - I guess that's a bit too big for me - I don't really have the expertise to make these changes.
I had hoped that I just have the wrong configuration in the .its file and that it is already possible to boot my FIT-packed ELF file.
Well I suppose you can use the split version of the bootm command to do this. Something like: 'bootm start <addr>; bootm loados; bootm prep; loadelf ...'
thanks anyway.
Best regards, Christopher
--
| Christopher Preschern | Institute for Technical Informatics - TU Graz | Tel: +43 (316) 873 - 6404 | EMail: christopher.preschern@tugraz.at
Regards, SImon

Hi Simon,
Well I suppose you can use the split version of the bootm command to do this. Something like: 'bootm start <addr>; bootm loados; bootm prep; loadelf ...'
that helped me out - it works. I use the following commands to check and load my RTOS.
setenv checkrtos 'bootm start 0x44000000' tftp 0x44000000 rtos.fit if run checkrtos; then bootelf 440000b4; else echo FAILD TO CHECK SAFERTOS SIGNATURE; fi
Thank you & best regards, Christopher

Hi Christopher,
On Fri, Nov 22, 2013 at 5:56 AM, Christopher Preschern < christopher.preschern@tugraz.at> wrote:
Hi Simon,
Well I suppose you can use the split version of the bootm command to do
this. Something like: 'bootm start <addr>; bootm loados; bootm prep; loadelf ...'
that helped me out - it works. I use the following commands to check and load my RTOS.
setenv checkrtos 'bootm start 0x44000000' tftp 0x44000000 rtos.fit if run checkrtos; then bootelf 440000b4; else echo FAILD TO CHECK SAFERTOS SIGNATURE; fi
OK good. You may want to look at putting a load address into the FIT image rather than what seems to be a hard-coded offset from the start.
Thank you & best regards,
Christopher
Regards, Simon
participants (2)
-
Christopher Preschern
-
Simon Glass