Problem running RTEMS on raspberrypi3
Niteesh
gsnb.gn at gmail.com
Sun Dec 15 18:46:12 UTC 2019
On Sun, Dec 15, 2019 at 10:15 PM Christian Mauderer <list at c-mauderer.de>
wrote:
> Hello Niteesh,
>
> On 15/12/2019 09:05, Niteesh wrote:
> > I am trying to get RTEMS examples running on the RPI3, the RPI3 is
> > similar to RPI2 so the examples built for RPI2 should technically run on
> > the RPi3.But they don't :(, I am really sure of what is causing the
> problem.
>
> Note that there are at least two different versions of the RPi3 which
> use different chips. The original RPi3 which uses a BCM2837 (same like
> later versions of RPi2) and the RPi3+ which uses a BCM2837B0. Broadcom
> is always quite sparse with documentation so it's not easy to tell the
> differences. Which one do you have?
>
I have Rpi3 model b v1.2 which uses BCM2837 SOC, in my bare-metal
programming I used the
2835 doc as a reference because the only major difference these two SOC is
the peripheral base address
offset. But this is arm cpu is also capable of executing in 64bit mode.
> > I followed the steps
> > from
> http://alanstechnotes.blogspot.com/2013/03/running-your-first-rtems-program-on.html
> (modified
> > commands to use rtems5) to build the kernel img.
>
> It's a bit odd that the Bootloader doesn't use some image format like
> U-Boot but if that's the case for Raspberry, that's OK.
>
Do you want me to try U-Boot, I was planning to use it for my bare-metal
stuff because copying the kernel
to SD-card was a real pain. Will it even work with RTEMS?
> > I did try running it on
> > Qemu but it doesn't always work, sometimes it gives weird output.
How did you run it on Qemu? Did you build some image for that too?
qemu-system-arm -M raspi2 -m 1G -kernel hello.exe -serial mon:stdio
-nographic
*qemu-system-aarch64: GLib: g_mapped_file_unref: assertion 'file != NULL'
failed *I get this error
while trying to emulate raspi3.
I ran qemu along with GDB to find what was causing the wrong output. I am
really not sure if this is right,
I still have a lot to learn, but my assumption's using GDB are as follows.
There are 4 active thread which run the same code.
(gdb) info thread
Id Target Id Frame
* 1 Thread 1.1 (CPU#0 [running]) _start () at
../../../../../../../../rtems/c/src/lib/libbsp/arm/raspberrypi/../../../../../../bsps/arm/shared/start/start.S:153
2 Thread 1.2 (CPU#1 [running]) _start () at
../../../../../../../../rtems/c/src/lib/libbsp/arm/raspberrypi/../../../../../../bsps/arm/shared/start/start.S:153
3 Thread 1.3 (CPU#2 [running]) _start () at
../../../../../../../../rtems/c/src/lib/libbsp/arm/raspberrypi/../../../../../../bsps/arm/shared/start/start.S:153
4 Thread 1.4 (CPU#3 [running]) _start () at
../../../../../../../../rtems/c/src/lib/libbsp/arm/raspberrypi/../../../../../../bsps/arm/shared/start/start.S:153
After some time one of the thread call's the BSP reset function this is
when the program crashes, the other threads complain "*executing thread is
NULL*"
*** FATAL ***
fatal source: 9 (RTEMS_FATAL_SOURCE_EXCEPTION)
R0 = 0x400005e6 R8 = 0x00000000
R1 = 0x00000001 R9 = 0x00000000
R2 = 0xbffffa1a R10 = 0x00000000
R3 = 0x00000000 R11 = 0x00000000
R4 = 0x002001db R12 = 0x00000000
R5 = 0x00000000 SP = 0x00300bd0
R6 = 0x00000000 LR = 0x00100fc4
R7 = 0x00000000 PC = 0x00100fc4
CPSR = 0x000001d3 VEC = 0x00000002
FPEXC = 0x40000000
FPSCR = 0x00000000
D00 = 0x0000000000000000
D01 = 0x0000000000000000
D02 = 0x0000000000000000
D03 = 0x0000000000000000
D04 = 0x0000000000000000
D05 = 0x0000000000000000
D06 = 0x0000000000000000
D07 = 0x0000000000000000
D08 = 0x0000000000000000
D09 = 0x0000000000000000
D10 = 0x0000000000000000
D11 = 0x0000000000000000
D12 = 0x0000000000000000
D13 = 0x0000000000000000
D14 = 0x0000000000000000
D15 = 0x0000000000000000
D16 = 0x0000000000000000
D17 = 0x0000000000000010
D18 = 0x0000000000000000
D19 = 0x0000000000000000
D20 = 0x0000000000000000
D21 = 0x0000000000000000
D22 = 0x0000000000000000
D23 = 0x0000000000000000
D24 = 0x0000000000000000
D25 = 0x0000000000000000
D26 = 0x0000000000000000
D27 = 0x0000000000000000
D28 = 0x0000000000000000
D29 = 0x0000000000000000
D30 = 0x0000000000000000
D31 = 0x0000000000000000
RTEMS version: 5.0.0.c6d8589bb00a9d2a5a094c68c90290df1dc44807-modified
RTEMS tools: 7.5.0 20191114 (RTEMS 5, RSB
83fa79314dd87c0a8c78fd642b2cea3138be8dd6, Newlib 3e24fbf6f)
executing thread is NULL
> The steps that I followed are:
> > 1. Created a bootable SD card using raspbian.
> > 2. Replaced the kernel.img file with RTEMS kernel.img file and modified
> > the config.txt to boot from the RTEMs kernel (boots in aarch32 bit mode).
> > I am still not able to wrap my head around the RPI bsp build process.
> > This is what I understood as of now, correct me if I am wrong.
> > Both RPi and Rpi2 are based on the same BSP, they just differ in the
> > peripheral offsets, hardcoded checks are used to select the right offset
> > at the time of compiling
>
> From what I know of the Raspberry BSPs that is correct.
>
> > and the linkercmd file is responsible for
> > building the final executable file.
>
> The linkercmd file is - like for all programs - responsible where the
> memory regions are that can be used for code or data. So you could more
> or less explain it like you did.
>
> > I looked at the linker script, it seem's to have the start section at
> > address 0x200000, I also loaded it in GDB and the start address is
> > *Start address 0x200080,*
>
> I agree with that. The different start in GDB is most likely because
> there is a vector table in front (at least if the Broadcom chip is
> similar to a lot of other processors that I have encountered).
>
> Does that mean that you have a debugger connected to the raspberry? Can
> you load code with it? If yes: Is the bootloader executed before you
> load your code? Otherwise the SDRAM might isn't initialized yet.
>
I don't have a debugger connected to it. I from what I have SDRAM is
initialized by the 3 stage bootloader(start.elf).
> > I did some bare metal programming on RPI3
> > there I had the start section at address 0x8000 Is this causing the
> problem?
>
> I assume that you used some internal RAM when you did bare metal
> programming. You maybe even skipped one or two bootloader stages. From a
> quick look Raspberry has a quite complex boot process with at least
> three bootloaders: http://lions-wing.net/maker/raspberry-1/boot.html
I don't think I have skipped any stages. The boot process is exactly the
same as how it boot's a normal raspbian or any other linux
distro, I just to replace the linux kernel with my own kernel.
>
> > I have no idea on how to debug this, any suggestion on how to start
> > would be really helpfull.
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20191216/7b6ca9eb/attachment.html>
More information about the devel
mailing list