<p dir="ltr"><br>
On Mar 7, 2014 4:37 PM, Hesham Moustafa <heshamelmatary@gmail.com> wrote:<br>
><br>
> I have some questions about how RTEMS, GCC, newlib interact with each other,<br>
> and which parts of them should I care and know about when porting RTEMS<br>
> to OpenRISC.<br>
><br>
> For example, the newlib port for OpenRISC includes some functions that deal with<br>
> interrupts, exceptions, writing to SPRs, Caches, MMU, etc [1]. How this should<br>
> be used within RTEMS ?</p>
<p dir="ltr">Most Newlib ports do not include things like this. They only add stuff like setjmp and maybe str* and mem* to libc/machine. Plus some .h file tweaks to know the architecture.</p>
<p dir="ltr">What directory are these in? If in libgloss, we would have to figure out how to reuse them. Libgloss is not used by RTEMS.</p>
<p dir="ltr">><br>
> What is the main distinction between code in score/cpu and rtems/libcpu and<br>
> which functions to place in either one?<br>
> For previous projects I worked on, there were some duplicate code between both.</p>
<p dir="ltr">Score/cpu is only allowed to know what can be determined by GCC multilibs. No peripherals or cpu model specific information.</p>
<p dir="ltr">Libcpu had broader scope initially but I would probably stick to supporting cache methods there now and do all the code under libbsp. Libbsp/openrisc/shared for common pieces. Since there is reusable IP, the question is whether it is openrisc specific or available to other architectures. Then it should be in something like libbsp/shared/opencores/...</p>
<p dir="ltr">The bsp itself represents a single instance of a system on chip and board configuration. It may support a related family and easily could in this case.</p>
<p dir="ltr">> Also there are some functions within OpenRISC newlib port that implement board<br>
> specific functions. How these functions should interact with RTEMS libbsp ?<br>
> wrappers maybe ?</p>
<p dir="ltr">Most likely just example code.</p>
<p dir="ltr">> How could I identify which function needs to be implemented in RTEMS (and<br>
> where), and which to use from newlib/gcc ?</p>
<p dir="ltr">Technically the openrisc Newlib patch should have all we need. They need to get it submitted to Newlib for review.</p>
<p dir="ltr">If they have driver-ish code, it should be in libgloss and since we do not use that code, it is technically just examples for building a bsp. But if they have .h files for chip and peripherals, we want to find a reasonable way to reuse it.</p>
<p dir="ltr">> Which parts of GCC/binuitls toolchain I need to know about (other than the<br>
> backend and OpenRISC port) and modify to fit with RTEMS ?</p>
<p dir="ltr">Most of the time, all we end up with is gcc/config/CPU/rtems.h and some configure script additions. Look at what was done for other ports. Nothing radical. First try to build their or1k elf tools and we move from there.</p>
<p dir="ltr">I would also dig back in the rtems repo and see if what used to exist as a port is useful. If the architecture is the same, the port will be easier. </p>
<p dir="ltr">> [1] http://opencores.org/or1k/Newlib<br>
><br>
> Thanks,<br>
> Hesham<br>
> _______________________________________________<br>
> rtems-devel mailing list<br>
> rtems-devel@rtems.org<br>
> http://www.rtems.org/mailman/listinfo/rtems-devel<br>
</p>