<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dzu's Blog (Posts about embedded)</title><link>https://blog.lazy-evaluation.net/</link><description></description><atom:link href="https://blog.lazy-evaluation.net/categories/embedded.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 &lt;a href="mailto:dzu@member.fsf.org"&gt;Detlev Zundel&lt;/a&gt; </copyright><lastBuildDate>Wed, 18 Mar 2026 10:36:03 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Basic AMP on the i.MX8M Mini with Rpmsg</title><link>https://blog.lazy-evaluation.net/posts/embedded/imx8mm-evk-simple-rpmsg.html?pk_campaign=feed</link><dc:creator>Detlev Zundel</dc:creator><description>&lt;div&gt;&lt;div style="text-align:center" class="imageblock" id="org4efd794"&gt;

&lt;div id="org5a720ae" class="figure"&gt;
&lt;p&gt;&lt;img src="https://blog.lazy-evaluation.net/images/giant-gd1d82756c_640.jpg" alt="giant-gd1d82756c_640.jpg" title="Big and Little" align="middle" width="150"&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;p&gt;
In a &lt;a href="https://blog.lazy-evaluation.net/posts/embedded/imx8mm-evk-m4-intro.html"&gt;recent post&lt;/a&gt;, I described the basics to execute code on the Cortex
M4 micro controller inside the &lt;a href="https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i-mx-applications-processors/i-mx-8-processors/i-mx-8m-mini-arm-cortex-a53-cortex-m4-audio-voice-video:i.MX8MMINI"&gt;i.MX8M Mini&lt;/a&gt; SoC.  However there was no
communication going on between Linux on the Cortex A cores and the
application running on the M4.  In this post, I will look at an
example using the &lt;a href="https://source.codeaurora.org/external/imx/linux-imx/tree/Documentation/staging/remoteproc.rst?h=lf-5.10.y"&gt;remoteproc&lt;/a&gt; and &lt;a href="https://source.codeaurora.org/external/imx/linux-imx/tree/Documentation/staging/rpmsg.rst?h=lf-5.10.y"&gt;rpmsg&lt;/a&gt; (Remote Processor Messaging)
frameworks for communication between the processors.  The remoteproc
subsystem implements basic house keeping for co-processors in Linux
and the rpmsg framework implements the actual data channels.
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.lazy-evaluation.net/posts/embedded/imx8mm-evk-simple-rpmsg.html?pk_campaign=feed"&gt;Read more…&lt;/a&gt; (13 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>embedded</category><category>imx8</category><category>linux</category><category>mcu</category><category>mcuxpresso</category><category>nxp</category><category>remoteproc</category><category>rpmsg</category><guid>https://blog.lazy-evaluation.net/posts/embedded/imx8mm-evk-simple-rpmsg.html</guid><pubDate>Sat, 16 Apr 2022 12:48:52 GMT</pubDate></item><item><title>Using the M4 MCU on the i.MX8M Mini</title><link>https://blog.lazy-evaluation.net/posts/embedded/imx8mm-evk-m4-intro.html?pk_campaign=feed</link><dc:creator>Detlev Zundel</dc:creator><description>&lt;div&gt;&lt;div style="text-align:center" class="imageblock" id="orgb937d53"&gt;

&lt;div id="org5b4d051" class="figure"&gt;
&lt;p&gt;&lt;img src="https://blog.lazy-evaluation.net/images/giant-gd1d82756c_640.jpg" alt="giant-gd1d82756c_640.jpg" title="Big and Little" align="middle" width="150"&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;p&gt;
Over the last few years, SoCs targeted at embedded GNU/Linux
applications became heterogenous architectures.  Instead of
adding more identical copies of CPU cores (Cortex-A class), a small
companion micro controller core (Cortex-M class) was added.  Compared
to the complex architecture of Cortex-A systems, including their
multi-layer caches, those cores are usually deterministic and thus
predestined for low-latency "real time" jobs.  NXP's first such SoC is
the &lt;a href="https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i-mx-applications-processors/i-mx-6-processors/i-mx-6solox-processors-heterogeneous-processing-with-arm-cortex-a9-and-cortex-m4-cores:i.MX6SX"&gt;i.MX6 Solo X&lt;/a&gt; device featuring an Cortex-M4 next to an Cortex-A9
core.  The &lt;a href="https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i-mx-applications-processors/i-mx-8-processors:IMX8-SERIES"&gt;i.MX8 family&lt;/a&gt; moved the Cortex-A cores into the 64 bit world
and there are different combinations of Cortex-M companion micro
controllers, but all of them do feature them as they are pretty
"cheap" in terms of die space and transistor count.
&lt;/p&gt;

&lt;p&gt;
From what I can see, it is still uncommon to use those micro
controllers in actual projects though.  Today I want to take a short
look on how to run simple programs on the Cortex-M4 of the &lt;a href="https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i-mx-applications-processors/i-mx-8-processors/i-mx-8m-mini-arm-cortex-a53-cortex-m4-audio-voice-video:i.MX8MMINI"&gt;i.MX8M Mini&lt;/a&gt;
SoC, especially we will use the official &lt;a href="https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/evaluation-kit-for-the-i-mx-8m-mini-applications-processor:8MMINILPD4-EVK"&gt;i.MX8M Mini EVK&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.lazy-evaluation.net/posts/embedded/imx8mm-evk-m4-intro.html?pk_campaign=feed"&gt;Read more…&lt;/a&gt; (21 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>embedded</category><category>imx8</category><category>linux</category><category>mcu</category><category>mcuxpresso</category><category>nxp</category><guid>https://blog.lazy-evaluation.net/posts/embedded/imx8mm-evk-m4-intro.html</guid><pubDate>Mon, 11 Apr 2022 17:01:30 GMT</pubDate></item><item><title>Testing Preempt RT on the i.MX8MM SoC in 15 minutes</title><link>https://blog.lazy-evaluation.net/posts/embedded/imx8mm-rt-preempt.html?pk_campaign=feed</link><dc:creator>Detlev Zundel</dc:creator><description>&lt;div&gt;&lt;div style="text-align:center" class="imageblock" id="org3d432d8"&gt;

&lt;div id="org716c057" class="figure"&gt;
&lt;p&gt;&lt;img src="https://blog.lazy-evaluation.net/images/preempt-rt-logo.png" alt="preempt-rt-logo.png" title="Linux Preempt RT Logo" align="middle"&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;p&gt;
Looking at the kernel sources for NXP's i.MX8M SoCs, I noticed
branch names like "lf-5.10.72-rt-2.2.0" and I wondered if NXP finally
was going to offer RT preempt support within their BSP.  Some 
other vendors have started supporting the patch set already a while
ago but for NXP this is new.
&lt;/p&gt;

&lt;p&gt;
In this post we are going to run this real-time enabled kernel on the
i.MX8M-Mini evaluation board from NXP to get a first hand impression
of what is required on the kernel level.  We will not use the Yocto
build system as this is only a wrapper around the distribution
agnostic kernel development.
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.lazy-evaluation.net/posts/embedded/imx8mm-rt-preempt.html?pk_campaign=feed"&gt;Read more…&lt;/a&gt; (8 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>embedded</category><category>imx8</category><category>linux</category><category>nxp</category><category>preempt-rt</category><category>realtime</category><guid>https://blog.lazy-evaluation.net/posts/embedded/imx8mm-rt-preempt.html</guid><pubDate>Wed, 23 Feb 2022 20:34:30 GMT</pubDate></item><item><title>Taming The Serial Console</title><link>https://blog.lazy-evaluation.net/posts/embedded/taming-serial-console.html?pk_campaign=feed</link><dc:creator>Detlev Zundel</dc:creator><description></description><category>embedded</category><category>linux</category><category>serial</category><category>xterm</category><guid>https://blog.lazy-evaluation.net/posts/embedded/taming-serial-console.html</guid><pubDate>Sat, 20 Mar 2021 10:41:57 GMT</pubDate></item><item><title>Starting My Rust Journey</title><link>https://blog.lazy-evaluation.net/posts/rust/rust-introduction.html?pk_campaign=feed</link><dc:creator>Detlev Zundel</dc:creator><description>&lt;div&gt;&lt;p&gt;With a few things coming together, I have finally decided to look into
yet another programming language.  On the one hand learning a new
language is usually a good way to broaden the fundamenetal
understanding of programming, but this time I do have a specific goal
in mind that I want to reach.&lt;/p&gt;
&lt;p&gt;Only recently I have been looking at various 32 bit Cortex-M ARM
micro-controllers with the vendor provided &lt;code class="docutils literal"&gt;C&lt;/code&gt; programming
environments.  Knowing modern programming languages like Haskell,
OCaml or Go got me so frustrated with these environments that I
decided to find a modern language also fit for this embedded space and
no, I don't think Python is the answer to every problem just as Java
wasn't.  Ultimately, I would like to see a functional programming
language in this space, but I am open to other approaches fitting the
embedded space.&lt;/p&gt;
&lt;p&gt;Being an FSF Emacs user for decades, I am also averse to these
proprietary programming environments that may have some nice features
but ultimately only try to lock the developer into a vendor controlled
ecosystem.  Usually they are all Eclipse based anyway but are
incompatible with one another.  It gives me the shivers installing the
n-th copy of Eclipse for yet another Cortex-M based micro-controller
and I really wonder how we ended up in this very frustrating assembly
of walled in environments.&lt;/p&gt;
&lt;p&gt;So this is the start of a small series of posts that evaluate how easy
it will be to setup a programming environment on GNU/Linux for &lt;a class="reference external" href="https://www.rust-lang.org/"&gt;Rust&lt;/a&gt; based on &lt;a class="reference external" href="https://www.gnu.org/software/emacs/"&gt;GNU Emacs&lt;/a&gt;.  Ultimately I want to target
micro-controllers without a full GNU/Linux system running on them, so
the aim is to also get a cross-compilation setup working.&lt;/p&gt;
&lt;img alt="Rust Logo" class="align-center" src="https://blog.lazy-evaluation.net/images/Rust_programming_language_black_logo.png" style="width: 200px;"&gt;
&lt;p&gt;&lt;a href="https://blog.lazy-evaluation.net/posts/rust/rust-introduction.html?pk_campaign=feed"&gt;Read more…&lt;/a&gt; (4 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>emacs</category><category>embedded</category><category>rust</category><guid>https://blog.lazy-evaluation.net/posts/rust/rust-introduction.html</guid><pubDate>Sun, 24 Feb 2019 20:38:22 GMT</pubDate></item></channel></rss>