Problem running RTEMS on raspberrypi3

Niteesh gsnb.gn at gmail.com
Wed Dec 18 18:05:08 UTC 2019


Yes, I did try that but still, it doesn't work.  I don't have any other
pi's with me, maybe let's wait for someone to try it out on any older
models.

On Wed, Dec 18, 2019 at 2:06 AM Christian Mauderer <list at c-mauderer.de>
wrote:

> That handler doesn't look like an RTEMS handler. So it failed at a very
> early stage.
>
> Did you try a go 0x200000 instead? Normally the first vector is a reset
> vector which jumps to the right start address. The jump can have a mode
> with it. So if you directly jump to 0x200080 the core might is in a
> wrong mode.
>
> On 16/12/2019 15:54, Niteesh wrote:
> > What about using U-boot? I just tried running my own bare metal example
> > using u-boot and it works fine.
> > The 3rd stage bootloader start the u-boot and I was able to interact
> > with it through serial. and then I used
> > fatload mmc 0 0x8000 kernel.img ; go 0x8000
> > to load and run the img. I tried the same for rtems
> > fatload mmc 0 0x200000 rtems_kernel.img ; go 0x200080
> > but this result's in a
> >
> >     ## Starting application at 0x00200080 ...
> >     "Synchronous Abort" handler, esr 0x02000000
> >     elr: ffffffffc1d29080 lr : 00000000000838b0 (reloc)
> >     elr: 0000000000200080 lr : 000000003e55a8b0
> >     x0 : 0000000000000001 x1 : 000000003e15e6c8
> >     x2 : 000000003e15e6c8 x3 : 0000000000200080
> >     x4 : 0000000000000000 x5 : 0000000000000000
> >     x6 : 0000000000c0c0c0 x7 : 000000000000000f
> >     x8 : 00000000ffffffd0 x9 : 0000000000000008
> >     x10: 0000000000000010 x11: 000000003e159cc0
> >     x12: 0000000000000000 x13: 0000000000000200
> >     x14: 0000000000000005 x15: 0000000000000008
> >     x16: 0000000000000000 x17: 0000000000000020
> >     x18: 000000003e152de0 x19: 000000003e15e6c8
> >     x20: 0000000000000002 x21: 0000000000200080
> >     x22: 000000003e15e6c0 x23: 0000000000000002
> >     x24: 000000003e5d4d44 x25: 0000000000000000
> >     x26: 0000000000000000 x27: 0000000000000000
> >     x28: 000000003e1567e0 x29: 000000003e152b20
> >
> >     Code: 0020b048 0020b048 0020b048 0020b048 (e1a05001)
> >     Resetting CPU ...
> >
> >
> > On Mon, Dec 16, 2019 at 8:11 PM Niteesh <gsnb.gn at gmail.com
> > <mailto:gsnb.gn at gmail.com>> wrote:
> >
> >     But I am not able to boot using the 3 stage bootloader. Can someone
> >     try booting any examples on raspi3 or other newer models? If it's
> >     work's please
> >     post the instructions. The steps that I followed are:
> >     1. arm-rtems5-objcopy -Obinary hello.exe kernel.img
> >     2. copied the kernel image to sd card and modified the config.txt to
> >     load the kernel img.
> >     No success in following these steps.
> >     I think this is maybe because of the different start addresses. The
> >     default kernel load address for raspberry pi is 0x8000 in 32bit mode
> >     and 0x80000 in 64bit mode.
> >     but RTEMS has a start address of 0x200080.
> >
> >
> >     On Mon, Dec 16, 2019 at 7:51 PM Christian Mauderer
> >     <list at c-mauderer.de <mailto:list at c-mauderer.de>> wrote:
> >
> >         I think I have guided you to a wrong path here. I mentioned
> U-Boot
> >         because it is often used on a lot of evaluation boards. In the
> >         raspberry
> >         case it seems that the stage 3 loader is something different. But
> >         everything should work with that stage 3 loader. I don't think
> that
> >         U-Boot is necessary.
> >
> >         On 16/12/2019 14:01, Niteesh wrote:
> >         > I got uboot running on my raspi3. But I can't figure out to
> >         load and run
> >         > a custom kernel. Can you explain the steps or point me to some
> >         > reference.
> >         > On Mon, Dec 16, 2019 at 5:13 PM Niteesh <gsnb.gn at gmail.com
> >         <mailto:gsnb.gn at gmail.com>
> >         > <mailto:gsnb.gn at gmail.com <mailto:gsnb.gn at gmail.com>>> wrote:
> >         >
> >         >     On Mon, Dec 16, 2019 at 2:36 AM Christian Mauderer
> >         >     <list at c-mauderer.de <mailto:list at c-mauderer.de>
> >         <mailto:list at c-mauderer.de <mailto:list at c-mauderer.de>>> wrote:
> >         >
> >         >
> >         >
> >         >         On 15/12/2019 21:29, Niteesh wrote:
> >         >         >
> >         >         >
> >         >         > On Mon, Dec 16, 2019 at 12:53 AM Christian Mauderer
> >         >         <list at c-mauderer.de <mailto:list at c-mauderer.de>
> >         <mailto:list at c-mauderer.de <mailto:list at c-mauderer.de>>
> >         >         > <mailto:list at c-mauderer.de
> >         <mailto:list at c-mauderer.de> <mailto:list at c-mauderer.de
> >         <mailto:list at c-mauderer.de>>>> wrote:
> >         >         >
> >         >         >     On 15/12/2019 19:46, Niteesh wrote:
> >         >         >     >
> >         >         >     >
> >         >         >     > On Sun, Dec 15, 2019 at 10:15 PM Christian
> >         Mauderer
> >         >         >     <list at c-mauderer.de <mailto:list at c-mauderer.de>
> >         <mailto:list at c-mauderer.de <mailto:list at c-mauderer.de>>
> >         >         <mailto:list at c-mauderer.de <mailto:list at c-mauderer.de>
> >         <mailto:list at c-mauderer.de <mailto:list at c-mauderer.de>>>
> >         >         >     > <mailto:list at c-mauderer.de
> >         <mailto:list at c-mauderer.de> <mailto:list at c-mauderer.de
> >         <mailto:list at c-mauderer.de>>
> >         >         <mailto:list at c-mauderer.de <mailto:list at c-mauderer.de>
> >         <mailto:list at c-mauderer.de <mailto: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.
> >         >         >
> >         >         >     OK. Did you check, whether the offset is
> >         correct? In the
> >         >         raspberrypi.h
> >         >         >     in RTEMS there is the following define:
> >         >         >
> >         >         >     #if (BSP_IS_RPI2 == 1)
> >         >         >        #define RPI_PERIPHERAL_BASE      0x3F000000
> >         >         >     #else
> >         >         >        #define RPI_PERIPHERAL_BASE      0x20000000
> >         >         >     #endif
> >         >         >
> >         >         > The offsets are right.
> >         >
> >         >         Good.
> >         >
> >         >         >
> >         >         >     >
> >         >         >     >     > 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?
> >         >         >
> >         >         >     The manual that you linked uses the default
> >         Raspberry
> >         >         bootloader. I'm
> >         >         >     not sure whether it's an U-Boot. If you skip the
> >         >         bootloader entirely,
> >         >         >     your SDRAM might isn't initialized.
> >         >         >
> >         >         > The manual uses the default bootloader. I don't
> >         think we have
> >         >         to worry
> >         >         > about the SDRAM initialization
> >         >         > because all of that is taken care of by the GPU.
> >         >
> >         >         Sounds OK.
> >         >
> >         >         > When using Uboot, the
> >         >         > GPU will load the uboot image and
> >         >         > pass the control to the CPU. And then the uboot
> >         continue's
> >         >         it's execution.
> >         >         >
> >         >
> >         >         I don't wanted to suggest to use an extra U-Boot. I
> >         was just not
> >         >         sure
> >         >         whether the stage 3 loader is an U-Boot. Your approach
> >         sounds
> >         >         fine so far.
> >         >
> >         >         >
> >         >         >
> >         >         >     PS: You answered that further below. You are
> >         using the
> >         >         stage 3 loader.
> >         >         >
> >         >         >     >
> >         >         >     >     > 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.
> >         >         >
> >         >         >     That sounds like a problem with Qemu. Is there
> some
> >         >         official test image
> >         >         >     for rpi3 on qemu? Note that this isn't really
> >         relevant for
> >         >         your current
> >         >         >     problem. So if you don't have some manual just
> >         ignore the
> >         >         question.
> >         >         >
> >         >         >     >
> >         >         >     > 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
> >         >         >
> >         >         >     In this case that are not threads but it's the
> >         CPU cores.
> >         >         GDB shows them
> >         >         >     as threads. Most likely it wouldn't be able to
> >         detect the
> >         >         RTEMS threads.
> >         >         >
> >         >         >     It's a bit odd that they are all pointing to
> >         start.S:153.
> >         >         That's the
> >         >         >     entry point for the program. It looks like not
> >         even one
> >         >         instruction has
> >         >         >     been executed yet.
> >         >         >
> >         >         > I took this output before executing the program,
> >         that the
> >         >         reason why not
> >         >         > even a single instruction has been
> >         >         > executed yet.
> >         >
> >         >         OK.
> >         >
> >         >         >
> >         >         >     >
> >         >         >     > 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*"
> >         >         >
> >         >         >     I would rather assume that one core tries to do
> the
> >         >         initialization while
> >         >         >     the others hang in a endless loop till they are
> >         needed.
> >         >         The one core
> >         >         >     doing the initialization work hits an exception
> >         somewhere
> >         >         and calls the
> >         >         >     exception handler which calls the bsp reset
> >         function.
> >         >         >
> >         >         >     The executing thread is NULL is a sign that it
> >         happens
> >         >         somewhere during
> >         >         >     initialization when the RTEMS threading hasn't
> been
> >         >         started yet.
> >         >         >
> >         >         >     The PC has an odd value. The linker command file
> >         tells
> >         >         that there is a
> >         >         >     RAM_MMU at 0x00100000. It only puts a
> >         >         bsp_translation_table there but
> >         >         >     there shouldn't be any code. So I don't know
> >         what the
> >         >         processor is doing
> >         >         >     there. You could try to set a breakpoint on the
> >         address
> >         >         0x00100fc4 and
> >         >         >     take a look at why the processor is there with a
> >         "bt"
> >         >         (backtrace).
> >         >         >
> >         >         > When I re-run it again, it now stops at a different
> >         address.
> >         >         As you said
> >         >         > that the other cores are put
> >         >         > in an endless loop, I don't think that's is
> happening. I
> >         >         single stepped
> >         >         > the instruction and later at some point checked the
> >         threads
> >         >         >
> >         >         >     (gdb) info threads
> >
> >         >
> >         >         >
> >
> >         >
> >         >         >
> >
> >         >         >         Target Id                    Frame
> >         >         >       1    Thread 1.1 (CPU#0 [running])
> >         arm_ccsidr_get_line_power
> >         >         >     (ccsidr=<optimized out>)
> >         >         >         at
> >         >         >
> >         >
> >
>    /home/niteesh/development/rtems/kernel/rtems/cpukit/score/cpu/arm/include/libcpu/arm-cp15.h:850
> >         >         >       2    Thread 1.2 (CPU#1 [running])
> >         >         arm_cp15_cache_invalidate_level
> >         >         >     (inst_data_fl=0, level=1)
> >         >         >        at
> >         >         >
> >         >
> >
>    /home/niteesh/development/rtems/kernel/rtems/cpukit/score/cpu/arm/include/libcpu/arm-cp15.h:1162
> >         >         >      3    Thread 1.3 (CPU#2 [running])
> >         arm_ccsidr_get_line_power
> >         >         >     (ccsidr=<optimized out>)
> >         >         >        at
> >         >         >
> >         >
> >
>    /home/niteesh/development/rtems/kernel/rtems/cpukit/score/cpu/arm/include/libcpu/arm-cp15.h:850
> >         >         >     * 4    Thread 1.4 (CPU#3 [running])
> >         >         >     arm_cp15_get_cache_size_id_for_level
> >         (level_and_inst_dat=0)
> >         >         >         at
> >         >         >
> >         >
> >
>    /home/niteesh/development/rtems/kernel/rtems/cpukit/score/cpu/arm/include/libcpu/arm-cp15.h:936
> >         >         >     (gdb)
> >         >         >
> >         >         > They all are executing different instructions at the
> >         same time.
> >         >
> >         >         Some of the initialization is done on all cores. Some
> >         isn't. I
> >         >         took a
> >         >         look at the initialization and it seems that I was
> >         wrong: There
> >         >         is no
> >         >         wait loop. All processors are running through the
> >         initialization
> >         >         process. Some just skip parts. The part where they
> >         really start to
> >         >         differ is in bsp_start_hook_0.
> >         >
> >         >         > I> googled about just running one thread or CPU as
> >         you said at
> >         >         a time and
> >         >         > used "*set scheduler-locking on" *on doing this I
> >         always get
> >         >         the right
> >         >         > output.
> >         >         >
> >         >         >     (gdb) info threads
> >         >         >       Id   Target Id                    Frame
> >         >         >     * 1    Thread 1.1 (CPU#0 [running]) bsp_reset ()
> >         >         >         at
> >         >         >
> >         >
> >
>    ../../../../../../../../rtems/c/src/lib/libbsp/arm/raspberrypi/../../../../../../bsps/arm/raspberrypi/start/bspreset.c:18
> >         >         >       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
> >         >         >     (gdb)
> >         >         >
> >         >         > The above command allow's only a single thread to
> run.
> >         >
> >         >         Maybe there is a timing difference between the
> >         simulator and the
> >         >         real
> >         >         hardware. I'm not sure how well tested the SMP code is
> >         on the
> >         >         Raspberry.
> >         >         There can be a hidden bug.
> >         >
> >         >         Just a guess: If there is a bug it could be possible
> >         that you hit it
> >         >         with your rpi3 too. Maybe it would be good to try a
> >         single core
> >         >         version
> >         >         of the BSP. I assume you have configured with
> >         "--enable-smp"?
> >         >         Can you
> >         >         try to build without it?
> >         >
> >         >     I built 2 versions with SMP enabled and disabled, the one
> >         we are
> >         >     talking about is the SMP disabled version, I ran
> >         >     the example with SMP enabled, still, the error's are
> >         similar, I only
> >         >     difference is, in the disabled one, there are only 4 or
> >         less panic's
> >         >     (maybe corresponding to 4 cpu's) but the other one has a
> >         higher
> >         >     number of panics.
> >         >
> >         >         > Won't it be a good idea to make a separate BSP for
> rpi3?
> >         >
> >         >         As soon as it is necessary: Sure. But from what you
> >         told me it seems
> >         >         that the hardware is very similar so that we won't hit
> >         this
> >         >         point soon.
> >         >         Or do you already see differences that would make it
> >         necessary.
> >         >
> >         >         I haven't had a look at the details but it could also
> >         be possible to
> >         >         unify the BSPs and entirely remove the rpi2 variant if
> the
> >         >         information
> >         >         from the flattened device tree are used.
> >         >
> >         >     Can you explain how FDT work in RTEMS. Can you mention
> >         some BSP's
> >         >     which use FDT so I can use them as a reference to learn.
> >         >     I previously took a look at the beagle FDT project
> >         (#3784), you
> >         >     mentioned about hardcoded values and initialization
> >         functions, can
> >         >     you explain more about what exactly do the initialization
> >         functions
> >         >     do? Do they assign a function to a particular pin, like in
> >         raspi
> >         >     the pins are multiplexed for various functions, so do the
> >         >     initialization functions assign those pins to a particular
> >         function?
> >         >
> >         >     And also please explain how does the initialization of the
> >         system
> >         >     happen from the DT file.
> >         >
> >         >         >
> >         >         >     >     *** 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).
> >         >         >
> >         >         >     That should be OK and it answers my question
> above.
> >         >         >
> >         >         >     >
> >         >         >     >     > 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.
> >         >         >
> >         >         >     Sounds reasonable. Does the bootloader print
> >         anything
> >         >         where it puts the
> >         >         >     kernel image? Maybe the start address changed
> >         during the
> >         >         raspberry
> >         >         >     versions.
> >         >         >
> >         >         > the default kernel load address is 0x8000 in 32bit
> >         mode and
> >         >         0x80000 in
> >         >         > 64bit mode I have no idea about the raspberry 1,
> >         >         > but the load address is same for rpi2 and 3.
> >         >
> >         >         That sounds odd. Do you have a memory map somewhere?
> >         From the linker
> >         >         command file it seems quite clear that RTEMS is build
> >         for a
> >         >         0x200000.
> >         >
> >         >         >
> >         >         >     >
> >         >         >     >
> >         >         >     >     > 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/20191218/8726cf8e/attachment-0001.html>


More information about the devel mailing list