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