Problems running RTEMS on Raspberry Pi2

Chris Johns chrisj at rtems.org
Fri Jul 26 00:25:34 UTC 2019


Hi Nils,

Many thanks for taking the time to review the code, it is appreciated.

On 25/7/19 10:17 pm, Nils Hölscher wrote:
> Hi,
> 
> I think r7 no longer holds the expected value in line 242
> <https://git.rtems.org/rtems/tree/bsps/arm/shared/start/start.S?id=bdec62c4d5aa25e5a98b9fafe78936a7beb96a6e#n242> and
> that is why it breaks.

The RPi2 does not support SMP and this instruction is in in an RTEMS_SMP block.

On an SMP build the process index is checked and left in r7. It looks ok to me.

> In the old file r7 was holding the value after this
> <https://git.rtems.org/rtems/tree/bsps/arm/shared/start/start.S?id=af80b0a3406bef73dc6550421947a981c939da27#n155> instruction.
> however this not he case in the newer version.
> r7 is used as destination register in more instructions and not only for holding
> the stack sizes.
> https://git.rtems.org/rtems/tree/bsps/arm/shared/start/start.S?id=bdec62c4d5aa25e5a98b9fafe78936a7beb96a6e#n164
> https://git.rtems.org/rtems/tree/bsps/arm/shared/start/start.S?id=bdec62c4d5aa25e5a98b9fafe78936a7beb96a6e#n172

The issue is r3 is a poor choice for holding the stack address. On ARMs low
number registers are arguments or local scratch registers when calling C code.
The call to `bsp_start_arm_drop_hyp_mode` trashes r3.

I will post a patch to devel with a tested fix ...

$ sudo rtems-run --rtems-bsp=raspberrypi2 \
     --user-config=/home/chris/.rtemstesterrc `find . -name hello.exe`
Password:
RTEMS Testing - Run, 5.0.not_released
 Command Line: /opt/work/rtems/5/bin/rtems-run --rtems-bsp=raspberrypi2
--user-config=/home/chris/.rtemstesterrc
./arm-rtems5/c/raspberrypi2/testsuites/samples/hello.exe
 Host: FreeBSD ruru 12.0-RELEASE-p3 FreeBSD 12.0-RELEASE-p3 GENERIC amd64
 Python: 3.6.6 (default, Oct  2 2018, 01:22:29) [GCC 4.2.1 Compatible FreeBSD
Clang 6.0.0 (tags/RELEASE_600/final 326565)]
Host: FreeBSD-12.0-RELEASE-p3-amd64-64bit-ELF (FreeBSD ruru 12.0-RELEASE-p3
FreeBSD 12.0-RELEASE-p3 GENERIC amd64 amd64)


U-Boot 2016.09-rc2-00067-gb615267-dirty (Sep 07 2016 - 17:12:15 +1000)

DRAM:  128 MiB
RPI 2 Model B (0xa01041)
MMC:   bcm2835_sdhci: 0
reading uboot.env
In:    serial
Out:   serial
Err:   serial
Net:   Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot:  0
starting USB...
USB0:   Core Release: 2.80a
scanning bus 0 for devices... 3 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
       scanning usb for ethernet devices... 1 Ethernet Device(s) found
Waiting for Ethernet connection... done.
BOOTP broadcast 1
DHCP client bound to address 10.10.5.147 (8 ms)
Waiting for Ethernet connection... done.
Using sms0 device
TFTP from server 10.10.5.2; our IP address is 10.10.5.147
Filename '/rpi2/rtems.img'.
Load address: 0x1000000
Loading: ##################################################  53.8 KiB
         2.8 MiB/s
done
Bytes transferred = 55081 (d729 hex)
CACHE: Misaligned operation at range [01000000, 0100d729]
## Booting kernel from Legacy Image at 01000000 ...
   Image Name:   RTEMS
   Image Type:   ARM RTEMS Kernel Image (gzip compressed)
   Data Size:    55017 Bytes = 53.7 KiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
## Transferring control to RTEMS (at address 00008000) ...


*** BEGIN OF TEST HELLO WORLD ***
*** TEST VERSION: 5.0.0.6eae5860507aa19d30b8ad1464896a5e9208a7bd-modified
*** TEST STATE: EXPECTED-PASS
*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API
*** TEST TOOLS: 7.4.0 20181206 (RTEMS 5, RSB
0956a2c089faf2600047577bb153afcaaba22288, Newlib 1d35a003f)
Hello World

*** END OF TEST HELLO WORLD ***


*** FATAL ***
fatal source: 5 (RTEMS_FATAL_SOURCE_EXIT)
fatal code: 0 (0x00000000)
RTEMS version: 5.0.0.6eae5860507aa19d30b8ad1464896a5e9208a7bd-modified
RTEMS tools: 7.4.0 20181206 (RTEMS 5, RSB
0956a2c089faf2600047577bb153afcaaba22288, Newlib 1d35a003f)
executing thread ID: 0x08a010001
executing th

U-Boot 2016.09-rc2-00067-gb615267-dirty (Sep 07 2016 - 17:12:15 +1000)

DRAM:  128 MiB
RPI 2 Model B (0xa01041)
MMC:   bcm2835_sdhci: 0
reading uboot.env
In:    serial
Out:   serial
Err:   serial
Net:   Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot:  0
starting USB...
USB0:   Core Release: 2.80a
scanning bus 0 for devices... 3 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
       scanning usb for ethernet devices... 1 Ethernet Device(s) found
Run time     : 0:00:20.535828

Chris


More information about the users mailing list