[[!meta title="Linux Target for Simulink® Embedded Coder®"]]
[[!img ert_linux_snapshot1.png size="300x" align=right alt="Screenshot or ert_linux"]]
Linux ERT target for [MathWorks]' [Simulink]® Embedded Coder® allows
to compile a model of designed control system to the C-code and
combine it with target specific support functions. The resulting
executable/controller can be run in real-time on the target Linux
system. The running dynamic system can be augmented via tunable block
parameters in the Simulink model and data can be acquired and
visualized with Simulink scopes.
Linux ERT target uses heavily real-time capabilities of
[real-time variant of the Linux kernel](https://rt.wiki.kernel.org/index.php/CONFIG_PREEMPT_RT_Patch)
that provides bounded maximal latencies. The resulting control system
supports sampling frequencies **up to 20 kHz**. Matlab/Simulink GUI
running on the same GNU/Linux desktop system as the generated
real-time application is supported.
More information about initial version developed by Michal Sojka at [Department of Control Engineering](https://control.fel.cvut.cz/) [FEE](http://www.fel.cvut.cz/)
[CTU](https://www.cvut.cz/) can be found in
[Michal Sojka's blog post](http://rtime.felk.cvut.cz/~sojka/blog/on-generating-linux-applications-from-simulink/).
[MathWorks]: http://www.mathworks.com/
[Simulink]: http://en.wikipedia.org/wiki/Simulink
**Page Contents**
[[!toc]]
Recent News
--------------------
- The real time control of DC and BDLC motors from plain C and Matlab/Simulink with
ert_linux target hands-on session is planned at 29th February 2020 at 15:00–16:55
at place of the project origin ([DCE](https://control.fel.cvut.cz/) labs) in the frame
of [InstallFest 2020](https://installfest.cz/if20/) conference.
See [details](https://pretalx.installfest.cz/installfest-2020/talk/HSNJCM/).
- The a paper
[Usable Simulink Embedded Coder Target for Linux](https://www.osadl.org/?id=2018)
and RPi motor control has been presented at
[16th Real Time Linux Workshop](https://www.osadl.org/RTLWS-2014.rtlws-2014.0.html)
taking place on 12 and 13 October 2014 in Dusseldorf Germany. The
[Paper](http://rtime.felk.cvut.cz/publications/public/ert_linux.pdf)
and
[slides](http://rtime.felk.cvut.cz/publications/public/ert_linux-rtlws2014.pdf)
are available from our
[publications archive](http://rtime.felk.cvut.cz/publications/).
- The ert_linux project has been presented at
[Amper exhibition](http://www.amper.cz/en/online-catalog/list-of-exhibitors.html/e9595_0-fakulta-elektrotechnicka-cvut-v-praze)
from 18th to 21st March 2014 in Brno, Czech Republic.
- Linux ERT at Embedded World exhibition – 25 until 27 February 2014 - Visit
[DCE CTU](http://www.ask-embedded-world.de/index.php5?id=342793&Action=showCompany)
developers and researchers at the OSADL booth (hall 5 booth 276).
I/O and communication interface support
--------------------
- [Humusoft MF624 data acquisition card](https://www.humusoft.com/datacq/mf624/).
UIO driver and Simulink blockset
has been developed. The UIO driver is already
[included in the mainline Linux kernel](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=06849faab58fc7ff9f4eae2532380c2a746a6f47).
Simulink blockset is available from a
[separate repository](https://rtime.felk.cvut.cz/gitweb/mf624-simulink.git).
More documentation about the UIO driver can be found on
[DCE HW Wiki page](http://rtime.felk.cvut.cz/hw/index.php/Humusoft_MF6xx).
- The Bhanderi's [ComediToolbox](http://www.mathworks.com/matlabcentral/fileexchange/15792-comedi-toolbox-v1-0-for-linux-based-rtw-targets) suitable for most Linux [Comedi](http://www.comedi.org/)
driver supported analog and digital inputs/output cards has been
successfully tested with ert_linux target. The little updated
version with target configuration example is available in
**lintarget** project
[download area](https://sourceforge.net/projects/lintarget/files/).
- The basic blocks for [CAN bus communication](can_bus/index.html)
under Linux are implemented.
RT-Capable Platform and Kernel
--------------------
Standard distribution Linux kernel does not guarantee bounded
latencies for many operations. The use of
[real-time variant](http://rt.wiki.kernel.org/) of
[Linux](http://en.wikipedia.org/wiki/Linux) kernel is required to
guarantee bounded latencies. This kernel variants minimizes regions
where switch to the highest priority (e.g. Linux ERT generated) task
is blocked by kernel when servicing system calls for other tasks.
Selection of the right version of the kernel is not enough for
non-disruptive operation. Computer system hardware selection is
critical as well. The system has to provide enough computational power
for compiled in blocks data evaluation evaluation and Linux kernel
services processing. Other critical disturbance sources are hardware
caused latencies and lags in a program processing by CPU. The source
can be bus systems load by other subsystems (i.e. graphic processor
memory access, peripheral DMA - SSD, SD-card, Flash controller etc.).
The other critical source of latencies in x86 based systems is
[SMI](http://en.wikipedia.org/wiki/System_Management_Mode) processing.
The SMI enable and processing is under BIOS and motherboard vendor
control and this problem cannot be resolved by the operating system.
This means that proper hardware selection is critical.
A long period evaluation data of different combinations of Linux
kernel version running on many CPU architectures and boards from many
vendors is [OSADL](http://www.osadl.org/)
[Quality Assurance Farm](http://www.osadl.org/Quality-assurance-at-the-OSADL-QA-Farm.osadl-services-qa.0.html).
According to these track records carefully selected x86 or embedded
GNU/Linux system can run real-time tasks with sampling frequencies up
to 20 kHz with no losing sample per months.
Source Code and Download
--------------------
- [Download area at Sourceforge](https://sourceforge.net/projects/lintarget/files/)
contains released versions of the Linux target and CANopen based
distributed system
- Linux ERT source code repository [GitHub DCE](https://github.com/aa4cc/ert_linux)
(the lastest version for now, with examples for native, ARM and AArch64/ARM64 builds),
[GitHub IIG](https://github.com/CTU-IIG/ert_linux),
[Original RTIME Repo](http://rtime.felk.cvut.cz/gitweb/ert_linux.git).
- [Humusoft MF624 card support blockset](http://rtime.felk.cvut.cz/gitweb/mf624-simulink.git)
Initial version of blockset supporting analog and digital
input/output, IRC, PWM and PWM measurement for MF624 cards.
Project Background
--------------------
The Linux ERT has been initially developed at
[DCE of CTU](https://control.fel.cvut.cz/en) in order to create a dynamic
environment model for hardware (airplane) in the loop testing of a
fly-by-wire system at [AERO Vodochody a.s.](http://www.aero.cz/en).
Simulink has been run on Windows host computer initially and code
generated for GNU/Linux embedded target system was compiled under
[MinGW/MSYS](http://en.wikipedia.org/wiki/Mingw) environment and then
uploaded to PowerPC based
[BOA5200](http://rtime.felk.cvut.cz/hw/index.php/Boa5200) computer.
The target computer was equipped with two CAN interfaces.
[CANopen](http://en.wikipedia.org/wiki/Canopen) blockset based on
[CANfestival](http://canfestival.org/) project was used to control
distributed servosystem used to simulate fly-by-wire system load.
Simulink CANopen blockset integrates a
[SocketCAN](http://en.wikipedia.org/wiki/Socketcan) driver
configuration and CAN messages processing support to the generated
code and enables the user to develop distributed embedded control
applications with CANopen communication.