Take the 2-minute tour ×
Raspberry Pi Stack Exchange is a question and answer site for users and developers of hardware and software for Raspberry Pi. It's 100% free, no registration required.

I know it runs Linux and there are real time patches available for Linux. Would those patches work?

Has anybody tried another real-time-os on the Raspberry Pi?

The idea is to use the board for regulation and control jobs that are time critical.

share|improve this question
1  
I would think the only unique reason that comes to mind why you couldn't would be if the closed GPU solution were to get in the way. Provided you can decided to just ignore the GPU while in your realtime tasks, I would think the realtime extensions could be made to work. –  Chris Stratton Aug 2 '12 at 20:45
5  
The entire raspberry pi system is not open for you to modify; the question would be if the part which isn't (the GPU) would be willing to stay out of the way while you are running your realtime tasks, or if that is unavoidably going to demand either bus cycles to access ram or even "attention" from the ARM core in a way that would frustrate hard timing goals. –  Chris Stratton Aug 3 '12 at 16:32
3  
Apparently RISCOS is quite well suited to certain realtime applications and it's Raspberry Pi port is going well. *8') –  Mark Booth Aug 6 '12 at 12:06
2  
RISCOS is not a real-time os(according to your Wikipedia link) so how could it help ? –  Lars Pötter Aug 7 '12 at 21:33
3  
The CONFIG_PREEMPT_RT Patch has been demonstrated on several ARM processors running Linux. There may be some latency issues, but these should be measurable on the order of microseconds. –  Breakthrough Aug 8 '12 at 15:34

7 Answers 7

up vote 10 down vote accepted

You may be interested in running Xenomai on RaspberryPi. Here you can find a tutorial on how to do this. In a nutshell, Xenomai is a project that created custom Linux kernel (they provide patches that has to be applied to the kernel sources) enabling it to run another kernel (Xenomai core) that is a realtime one. This makes it possible to run Xenomai applications on wide range of hardware without the need to write drivers for them (since Linux is working on very wide range of hardware). This allows writing RT userspace applications using couple different RT APIs available.

share|improve this answer

In linux kernel, enabling PREEMPT_RT will provide bounded latencies and realtime APIs. Besides configuring PREEMPT_RT, the SCHED_FIFO and SCHED_RR policies also need to be selected. And the applications need to set realtime parameters by calling appropriate APIs or by using appropriate utilities.

According to a free-electrons training: Realtime in Embedded Linux, PREEMPT_RT was a project that brings realtime capability into kernel. It has folded fully into 2.6.33 and 3.0 kernel stream. See the document you'll find everything.

Basically there have been two approaches to bring realtime capability to linux kernel:

  • Modify inside the kernel, that is PREEMPT_RT project.
  • Run the realtime part side-by-side with a normal kernel and below the normal kernel, there have been three generations: RTLinux, RTAI, and Xenomai. (Aedos as Avio mentions below?)

Edit:

share|improve this answer
1  
Welcome to Raspberry Pi, nice answer! The RT PREEMPT patch by Ingo Molnar used together with High Resolution Timers (HRT) support, allow the kernel to achieve hard-realtime capabilities. At present, its support reaches 3.4.11 kernels, and the "good news" are that the patch "is shrinking", so it seems that most of it is getting included in the mainstream kernel sources. You can find an excelent tutorial for how to apply and use it here. –  Avio Sep 29 '12 at 17:26
1  
Uh, and don't forget to cite Adeos amongst the alternatives to provide hard real-time support in Linux. –  Avio Sep 29 '12 at 17:31
1  
I must mention that getting PREEMPT_RT working with the Raspberry Pi kernel is not a straighforward matter, simply applying the patch produces a non-working kernel. Also, there are a lot of new drivers in the Raspberry Pi kernel, and these drivers have not been tested with PREEMPT_RT, nor have they been cleared of overly long blocking sleeps. This is very much a work in progress, that is. –  Nakedible Sep 29 '12 at 18:05
1  
Any updates on this one? Are the drivers now stable enough to use this kernel patch? I'd love a working tutorial for people who have not yet compiled a kernel. –  fabb Jan 13 '13 at 16:44
    
@fabb: Even after many years there will still be drivers that have glitchs against the rt requirement. You will only find out by running it. By the way, recently I see some network glitch once bumped up priorities of some user space applications, that is unexpected. Though all these kind of situations are highly configuration and application specific. –  minghua Jan 26 '13 at 18:58

Wyolum mas the aLaMode (I call it the Almond Pi) to fit on top of the Pi in a stackable manner. It has a real-time clock, uses a aTiny 328, feeds of the GPIO Real UART / power and is flashable in various ways. It is great because the Pi can do whatever you want it do , web server/database while the Arduino runs in real-time interrupt.

enter image description here

share|improve this answer
1  
Might seem a little bit impractical to have 2 microcontrollers running, but on the other hand this ensures real-time operation if the other approaches are not fast enough. –  fabb Jan 15 '13 at 9:46
    
Any hints on how the RPi would cleanly communicate with the other µC without slowing its control loop down? –  fabb Jan 15 '13 at 9:49
    
Hardware UART on the GPIO pins? –  ppumkin Jan 15 '13 at 11:22
    
Yes, but the µC would have to poll the UART I guess in order to not let UART interrupts postpone the control loop timer interrupt. Would I then poll the UART at the beginning of the control loop and make sure I don't read to many bytes so it does not take too long? Or could the UART buffers overflow too easily that way? Or would the control loop frequency be so much higher than the UART speed that reading one byte each loop, if available, would be more than enough? –  fabb Jan 15 '13 at 11:35
    
Not sure what you mean exactly? Possibly asking a very technical question that I am oblivious too? the Atmega has a built in uart buffer that will interrupt your main if you attach to it, or you can call check uart buffer when you want it to. If you do not like uart you can use I2C but the Pi does not support that properly yet. The uart on the Pi- well you run it a a separate thread to read/write/respond to whatever you want. If you were bitbanging then it would complicate stuff. –  ppumkin Jan 15 '13 at 11:41

The best solution I've seen to this is the X10i - Real Time Control Board for Raspberry Pi from Heber.

X10i is a universal, powerful and secure real-time controller that permits control over multiple inputs/outputs, via USB, from any PC system. Heber now offers support in many programming languages to make it even easier for programmers, inventors and developers to connect with the outside world from their PC.

The link above provides excellent and extensive documentation and they try and keep the drivers up to date with the latest version of Debian for Pi.

share|improve this answer
    
SO you need a ribbon connector from the Pi to this? Can't find a hires photo of the thing but it looks really bulky. It has allot of examples so that is good I suppose . +1 –  ppumkin Jan 15 '13 at 11:27
    
I can't say I've used it, but I would expect so, although I seem to remember the guy using a USB interface in the demo. It is pretty bulky though yes. –  Jivings Jan 15 '13 at 19:43

Here is an article (french translated by google translate) on Raspberry Pi running with Xenomai.

share|improve this answer
2  
Hi there. Typically we discourage answers that are simply links in case the linked page moves. Could you summarise the information on that page in your answer? You can then include the link as a reference. Thanks! –  Jivings Oct 26 '12 at 17:00

RODOS is yet another option. It's an Open Source project developed by the German Aerospace Center and Prof. Montenegro's University team and students.

It's using C++, is completely written the object oriented way and supports ARM7, Atmel AVR, STM32/Cortex-M3, Xilinx, Raspberry Pi :), ...

It's currently used in satellite TET and in LoTTo machines if I didn't get that wrong.

Of course I would prefer running it above Linux (what is possible) to have the best of both worlds - but then the REAL TIME questions remain, because I'm not sure if it is possible that Linux can provide the correct API.

To get RODOS one has to write a message to Prof. Sergio Montenegro or the DLR (German Aerospace Center).

share|improve this answer

besides linux, there are real time operating systems. quite popular among the open sourced ones is ChibiOS/RT:

is a complete, portable, open source, compact and extremely fast RTOS (Real-Time Operating System)

a brief introduction is at http://chibios.org/dokuwiki/doku.php?id=chibios:documents:introduction. being different from linux you might also like the readings of

Well, there are some design choices that should be explained and contribute to make ChibiOS/RT a peculiar design. Nothing really new in itself but the whole is interesting.

or not. if you do like it - experimenting on the pi might be worth the experience at https://github.com/steve-bate/ChibiOS-RPi:

ChibiOS fork for Raspberry PI experimentation.

the author adds a nice guide at

http://www.stevebate.net/chibios-rpi/GettingStarted.html

personally, when it comes to rtos, for me linux is like carrying cross-alpine equipment for plain country needs. you might just not need it. even a pi might be too much. check out http://forum.arduino.cc/index.php?topic=144715.0 for even less weight :)

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.