Loading RTEMS-application with U-boot on Raspberry Pi

Jan Sommer soja-lists at aries.uberspace.de
Wed Apr 6 22:33:22 UTC 2016


Hello,

I tried (and failed) again to start an RTEMS-application for the raspberry pi using u-boot.
If I start the same binary file directly from the sd-card (i.e. renaming it to kernel.img) it works fine.
In order to test my u-boot I compiled some of the baremetal programs from [1].

There, I can load the binary directly to address 0x8000 and start it with go and I can load the elf-file somewhere into the memory (e.g. 0x100000) and use bootelf to run the program. Both works fine.

However as soon as I try the same mechanisms with a similar RTEMS-application which simply blinks an LED the program never starts.

If I look at the output of readelf for the RTEMS-program [2] I noticed that the entry point address is not 0x8000, but 0x8040.
In comparison the elf-file of the baremetal program [3] has entry point address 0x8000 and under "Flags" it says  "has entry point".
I am not very experienced when it comes to linker scripts and elf-format, so I am not sure how to interpret all the different information. Am I on the right track at all here?

Has someone else managed to run RTEMS-applications using u-boot (even on a different platform)?

Best regards,

   Jan


[1] https://github.com/dwelch67/raspberrypi

[2] blinker-rtems/o-optimize$ arm-rtems4.12-readelf -e blinker-rtems.exe
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x8040
  Start of program headers:          52 (bytes into file)
  Start of section headers:          3492848 (bytes into file)
  Flags:                             0x5000200, Version5 EABI, soft-float ABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         4
  Size of section headers:           40 (bytes)
  Number of section headers:         34
  Section header string table index: 31

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .start            PROGBITS        00008000 0000b4 000348 00  AX  0   0  4
  [ 2] .xbarrier         PROGBITS        00000000 010640 000000 00   W  0   0  1
  [ 3] .text             PROGBITS        00008348 0003fc 00ef88 00 WAX  0   0  4
  [ 4] .init             PROGBITS        000172d0 00f384 000018 00  AX  0   0  4
  [ 5] .fini             PROGBITS        000172e8 00f39c 000018 00  AX  0   0  4
  [ 6] .robarrier        NOBITS          00017300 00f3b4 0e8d00 00  WA  0   0  1
  [ 7] .rodata           PROGBITS        00100000 00f3c0 000c51 00   A  0   0  4
  [ 8] .ARM.exidx        ARM_EXIDX       00100c54 010014 000008 00  AL  3   0  4
  [ 9] .eh_frame         PROGBITS        00100c5c 01001c 000004 00   A  0   0  4
  [10] .init_array       INIT_ARRAY      00100c60 010020 000004 00  WA  0   0  4
  [11] .fini_array       FINI_ARRAY      00100c64 010024 000004 00  WA  0   0  4
  [12] .jcr              PROGBITS        00100c68 010028 000004 00  WA  0   0  4
  [13] .rtemsroset       PROGBITS        00100c6c 01002c 000038 00  WA  0   0  4
  [14] .rwbarrier        PROGBITS        00100ca4 010640 000000 00   W  0   0  1
  [15] .vector           NOBITS          00000000 0000b4 001440 00  WA  0   0  1
  [16] .data             PROGBITS        00100ca8 010068 0005d8 00  WA  0   0  8
  [17] .bss              NOBITS          00101280 010640 0018f0 00  WA  0   0 32
  [18] .work             NOBITS          00102b70 010640 7ef9490 00  WA  0   0  1
  [19] .stack            PROGBITS        07ffc000 010640 000000 00   W  0   0  1
  [20] .nocachenoload    PROGBITS        07ffc000 010640 000000 00   W  0   0  1
  [21] .comment          PROGBITS        00000000 010640 000075 01  MS  0   0  1
  [22] .debug_aranges    PROGBITS        00000000 0106b8 002cf8 00      0   0  8
  [23] .debug_info       PROGBITS        00000000 0133b0 27217b 00      0   0  1
  [24] .debug_abbrev     PROGBITS        00000000 28552b 03004c 00      0   0  1
  [25] .debug_line       PROGBITS        00000000 2b5577 050cb6 00      0   0  1
  [26] .debug_frame      PROGBITS        00000000 306230 0051c8 00      0   0  4
  [27] .debug_str        PROGBITS        00000000 30b3f8 0152f2 01  MS  0   0  1
  [28] .debug_loc        PROGBITS        00000000 3206ea 020a63 00      0   0  1
  [29] .debug_ranges     PROGBITS        00000000 34114d 0059e0 00      0   0  1
  [30] .ARM.attributes   ARM_ATTRIBUTES  00000000 346b2d 000036 00      0   0  1
  [31] .shstrtab         STRTAB          00000000 354aa8 000148 00      0   0  1
  [32] .symtab           SYMTAB          00000000 346b64 008ab0 10     33 1649  4
  [33] .strtab           STRTAB          00000000 34f614 005494 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  EXIDX          0x010014 0x00100c54 0x00100c54 0x00008 0x00008 R   0x4
  LOAD           0x0000b4 0x00000000 0x00000000 0x00000 0x01440 RW  0x1
  LOAD           0x0000b4 0x00008000 0x00008000 0x0f300 0xf8000 RWE 0x4
  LOAD           0x00f3c0 0x00100000 0x00100000 0x01280 0x7efc000 RW  0x20

 Section to Segment mapping:
  Segment Sections...
   00     .ARM.exidx 
   01     .vector 
   02     .start .text .init .fini .robarrier 
   03     .rodata .ARM.exidx .eh_frame .init_array .fini_array .jcr .rtemsroset .data .bss .work 

============================================================================

[3] blinker02/plus$ arm-none-eabi-readelf -e blinker02.elf 
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x8000
  Start of program headers:          52 (bytes into file)
  Start of section headers:          33424 (bytes into file)
  Flags:                             0x5000202, has entry point, Version5 EABI, soft-float ABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         1
  Size of section headers:           40 (bytes)
  Number of section headers:         7
  Section header string table index: 4

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .text             PROGBITS        00008000 008000 0000bc 00  AX  0   0  4
  [ 2] .ARM.attributes   ARM_ATTRIBUTES  00000000 0080bc 00002b 00      0   0  1
  [ 3] .comment          PROGBITS        00000000 0080e7 000038 01  MS  0   0  1
  [ 4] .shstrtab         STRTAB          00000000 00811f 00003a 00      0   0  1
  [ 5] .symtab           SYMTAB          00000000 00815c 0000f0 10      6  10  4
  [ 6] .strtab           STRTAB          00000000 00824c 000043 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x000000 0x00000000 0x00000000 0x080bc 0x080bc R E 0x10000

 Section to Segment mapping:
  Segment Sections...
   00     .text 



More information about the users mailing list