2
votes

I'm searching an embedded RTOS which supports the functionality to update the software without to compile/link the whole kernel and application SW. The concept would be like in Windows or Unix Desktop Systems: Download an application module (compiled/linked binary) to the target without touching the kernel (decoupled from kernel). One RTOS which supports such Memory Protected Downloadable Application Modules (DAM) is ThreadX from ExpressLogic ( www.rtos.com/products/threadx/ ).

Does anybody know other RTOS (small footprint, target CPU Cortex-M3), which supports such DAM concept?

Does anybody have experience with DAM of ThreadX? Some approved literature?

Thanks in advance!

3
There are a lot of RTOSes that support what you're looking for. What other features do you care about? - Carl Norum
Not much more than a preemtive scheduler, tasks with priorities. But low interrupt latency time, small kernel size (2k), small RAM usage. - DannyD
@Carl Norum: which RTOSes support this concept? - DannyD
The ability to dynamically load and execute modules in a 2K kernel may be asking a lot! That is probably the minimum size of a kernel with scheduling and IPC and nothing much else. How large is a ThreadX kernel when this feature is included? It is probably smaller than any of my suggestions. - Clifford
@Carl: The answer to that would be an answer to the question, not a comment. If he knows of any, hopefully he will post an answer in due course ;-) - Clifford

3 Answers

1
votes

QNX Neutrino can do that. It is a complete RTOS rather than just a kernel, and has a Unix-like interface and POSIX API. It uses the Korn shell by default, but can use alternative shells or a windowing GUI interface. It is far smaller and more scalable than Linux or Windows Embedded, while being a true RTOS.


WindowsCE is real-time capable (though not as flexible or as fast as a typical RTOS, but deterministic and with a true priority based pre-emptive scheduler).


VxWorks can dynamically load and link object modules to an already loaded and running kernel.

It is not quite the same as on Windows or Linux, it works by partial linkage on the development host, then linkage is completed at run-time on the target. Any unresolved link dependencies in the object file being loaded must exist in the target, either in the kernel or in previously loaded object files.

The resulting run-time still behaves as a monolithic application as if it had been fully linked on a development host, so each module must have unique external symbols and no main() function. The runtime loader/linker does not execute the loaded module, but the VxWorks shell is capable of directly executing any public function by function name, so you simply call the loaded module's entry point from the command line or a script.


0
votes

Am not an expert on Cortex-M3, but why not use Linux for Cortex? Linux has the concept of "modules" which can be loaded and unloaded at runtime. Not the entire kernel, and not all functionality of course.

You may want to check out Linux Lodable Kernel Modules HOWTO which provides excellent documentation on the subject:

"One advantage is that you don't have to rebuild your kernel as often. This saves you time and spares you the possibility of introducing an error in rebuilding and reinstalling the base kernel. Once you have a working base kernel, it is good to leave it untouched as long as possible."

0
votes

The footprint is very small. The kernel, module manager, a small demo app with memory protection and module support comes under 15kB.

With threadx you can do this under cortex m3 as it can use the mpu, no mmu necessary. As far as I know other OSes have trouble there.