<?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>TinyComputers.io (Posts about pine64)</title><link>https://tinycomputers.io/</link><description></description><atom:link href="https://tinycomputers.io/categories/pine64.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 A.C. Jokela 
&lt;!-- div style="width: 100%" --&gt;
&lt;a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"&gt;&lt;img alt="" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/80x15.png" /&gt; Creative Commons Attribution-ShareAlike&lt;/a&gt;&amp;nbsp;|&amp;nbsp;
&lt;!-- /div --&gt;
</copyright><lastBuildDate>Mon, 06 Apr 2026 22:12:56 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Pine64 Board Comparison: RockPro64 vs Quartz64-B</title><link>https://tinycomputers.io/posts/pine64-board-comparison-rockpro64-vs-quartz64-b.html?utm_source=feed&amp;utm_medium=rss&amp;utm_campaign=rss</link><dc:creator>A.C. Jokela</dc:creator><description>&lt;h2&gt;Pine64 Board Comparison: RockPro64 vs Quartz64-B&lt;/h2&gt;
&lt;div class="audio-widget"&gt;
&lt;div class="audio-widget-header"&gt;
&lt;span class="audio-widget-icon"&gt;🎧&lt;/span&gt;
&lt;span class="audio-widget-label"&gt;Listen to this article&lt;/span&gt;
&lt;/div&gt;
&lt;audio controls preload="metadata"&gt;
&lt;source src="https://tinycomputers.io/pine64-board-comparison-rockpro64-vs-quartz64-b_tts.mp3" type="audio/mpeg"&gt;
&lt;/source&gt;&lt;/audio&gt;
&lt;div class="audio-widget-footer"&gt;10 min · AI-generated narration&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Executive Summary&lt;/h3&gt;
&lt;p&gt;This comprehensive review compares two Pine64 single-board computers: the RockPro64 running FreeBSD and the Quartz64-B running Debian Linux. Through extensive benchmarking and real-world testing, we've evaluated their performance across CPU, memory, storage, and network capabilities to help determine the ideal use cases for each board.&lt;/p&gt;
&lt;h3&gt;Test Environment&lt;/h3&gt;
&lt;h4&gt;Hardware Specifications&lt;/h4&gt;
&lt;h5&gt;RockPro64 (10.1.1.130)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CPU&lt;/strong&gt;: Rockchip RK3399 - 6 cores (2x Cortex-A72 @ 2.0GHz + 4x Cortex-A53 @ 1.5GHz)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RAM&lt;/strong&gt;: 4GB DDR4&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OS&lt;/strong&gt;: FreeBSD 14.1-RELEASE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage&lt;/strong&gt;: 52GB UFS root filesystem&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network&lt;/strong&gt;: Gigabit Ethernet (dwc0)&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Quartz64-B (10.1.1.88)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CPU&lt;/strong&gt;: Rockchip RK3566 - 4 cores (4x Cortex-A55 @ 1.8GHz)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RAM&lt;/strong&gt;: 4GB DDR4&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OS&lt;/strong&gt;: Debian 12 (Bookworm) - Plebian Linux&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage&lt;/strong&gt;: 59GB eMMC&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network&lt;/strong&gt;: Gigabit Ethernet (end0)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Performance Benchmarks&lt;/h3&gt;
&lt;h4&gt;1. CPU Performance&lt;/h4&gt;
&lt;p&gt;The RockPro64's heterogeneous big.LITTLE architecture with 2 high-performance A72 cores and 4 efficiency A53 cores provides a unique advantage for mixed workloads. In our simple loop benchmark:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RockPro64&lt;/strong&gt;: 0.92 seconds (100k iterations)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quartz64-B&lt;/strong&gt;: 0.99 seconds (100k iterations)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The RockPro64 shows approximately &lt;strong&gt;7.6% better single-threaded performance&lt;/strong&gt;, likely benefiting from its A72 cores when handling single-threaded tasks.&lt;/p&gt;
&lt;h4&gt;2. Memory Bandwidth&lt;/h4&gt;
&lt;p&gt;Memory bandwidth testing revealed a significant advantage for the Quartz64-B:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RockPro64&lt;/strong&gt;: 1.7 GB/s&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quartz64-B&lt;/strong&gt;: 3.7 GB/s&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Quartz64-B demonstrates &lt;strong&gt;117% higher memory bandwidth&lt;/strong&gt;, indicating more efficient memory controller implementation or better memory configuration. This advantage is crucial for memory-intensive applications.&lt;/p&gt;
&lt;h4&gt;3. Storage Performance&lt;/h4&gt;
&lt;p&gt;Storage benchmarks showed contrasting strengths:&lt;/p&gt;
&lt;h5&gt;Sequential Write (500MB file)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RockPro64&lt;/strong&gt;: 332.8 MB/s&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quartz64-B&lt;/strong&gt;: 20.1 MB/s&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Sequential Read&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RockPro64&lt;/strong&gt;: 762.5 MB/s&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quartz64-B&lt;/strong&gt;: 1,461.0 MB/s&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The RockPro64 excels in write performance with &lt;strong&gt;16.5x faster writes&lt;/strong&gt;, while the Quartz64-B shows &lt;strong&gt;1.9x faster reads&lt;/strong&gt;. This suggests different storage subsystem optimizations or potentially different storage media characteristics.&lt;/p&gt;
&lt;h5&gt;Random I/O (100 operations)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RockPro64&lt;/strong&gt;: 0.87 seconds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quartz64-B&lt;/strong&gt;: 0.605 seconds&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Quartz64-B completed random I/O operations &lt;strong&gt;30% faster&lt;/strong&gt;, indicating better handling of small, random file operations.&lt;/p&gt;
&lt;h4&gt;4. Network Performance&lt;/h4&gt;
&lt;p&gt;Using iperf3 for network testing showed comparable gigabit Ethernet performance:&lt;/p&gt;
&lt;h5&gt;Throughput (TCP)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RockPro64 → Quartz64-B&lt;/strong&gt;: 93.5 Mbps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quartz64-B → RockPro64&lt;/strong&gt;: 95.4 Mbps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both boards achieve similar network performance, approaching the theoretical maximum for 100Mbps connections. The slight variations are within normal network fluctuations.&lt;/p&gt;
&lt;h3&gt;Use Case Analysis&lt;/h3&gt;
&lt;h4&gt;RockPro64 - Ideal Use Cases&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Build Servers &amp;amp; CI/CD&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Superior write performance makes it excellent for compilation tasks&lt;/li&gt;
&lt;li&gt;6-core configuration provides better parallel build capabilities&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;FreeBSD's stability benefits long-running server applications&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Database Servers&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;High sequential write speeds benefit transaction logs&lt;/li&gt;
&lt;li&gt;Additional CPU cores help with concurrent queries&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Better suited for write-heavy database workloads&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;File Servers &amp;amp; NAS&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Excellent sequential write performance for large file transfers&lt;/li&gt;
&lt;li&gt;6 cores provide overhead for file serving while maintaining responsiveness&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;FreeBSD's ZFS support (if configured) adds enterprise-grade features&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Development Workstations&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;More CPU cores benefit compilation and development tools&lt;/li&gt;
&lt;li&gt;Balanced performance across different workload types&lt;/li&gt;
&lt;li&gt;FreeBSD environment suitable for BSD-specific development&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Quartz64-B - Ideal Use Cases&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Media Streaming Servers&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Superior read performance benefits content delivery&lt;/li&gt;
&lt;li&gt;Efficient Cortex-A55 cores provide good performance per watt&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Better memory bandwidth helps with buffering&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Web Servers&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Fast random I/O benefits web application performance&lt;/li&gt;
&lt;li&gt;High memory bandwidth helps with caching&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Debian's extensive package repository provides easy deployment&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Container Hosts&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Docker already configured (as seen in network interfaces)&lt;/li&gt;
&lt;li&gt;Better memory bandwidth benefits containerized applications&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Efficient for running multiple lightweight services&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IoT Gateway&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Power-efficient Cortex-A55 cores&lt;/li&gt;
&lt;li&gt;Good balance of performance and efficiency&lt;/li&gt;
&lt;li&gt;Debian's wide hardware support for peripherals&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Power Efficiency Considerations&lt;/h3&gt;
&lt;p&gt;While power consumption wasn't directly measured, architectural differences suggest:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quartz64-B&lt;/strong&gt;: More power-efficient with its uniform Cortex-A55 cores&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RockPro64&lt;/strong&gt;: Higher peak power consumption but better performance scaling with big.LITTLE&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Software Ecosystem&lt;/h3&gt;
&lt;h4&gt;FreeBSD (RockPro64)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Excellent for network services and servers&lt;/li&gt;
&lt;li&gt;Superior security features and jail system&lt;/li&gt;
&lt;li&gt;Smaller but high-quality package selection&lt;/li&gt;
&lt;li&gt;Better suited for experienced BSD administrators&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Debian Linux (Quartz64-B)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Vast package repository&lt;/li&gt;
&lt;li&gt;Better hardware peripheral support&lt;/li&gt;
&lt;li&gt;Larger community and more tutorials&lt;/li&gt;
&lt;li&gt;Docker and container ecosystem readily available&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Both boards offer compelling features for different use cases:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Choose the RockPro64 if you need:&lt;/strong&gt;
- Maximum CPU cores for parallel workloads
- Superior write performance for storage
- FreeBSD's specific features (jails, ZFS, etc.)
- A proven platform for server workloads&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Choose the Quartz64-B if you need:&lt;/strong&gt;
- Better memory bandwidth for data-intensive tasks
- Superior read performance for content delivery
- Modern, efficient CPU architecture
- Broader Linux software compatibility&lt;/p&gt;
&lt;h4&gt;Overall Verdict&lt;/h4&gt;
&lt;p&gt;The RockPro64 remains a powerhouse for traditional server workloads, particularly those requiring strong write performance and CPU parallelism. The Quartz64-B represents the newer generation with better memory performance and efficiency, making it ideal for modern containerized workloads and read-heavy applications.&lt;/p&gt;
&lt;p&gt;For general-purpose use, the Quartz64-B's better memory bandwidth and more modern architecture give it a slight edge, while the RockPro64's additional cores and superior write performance make it the better choice for build servers and write-intensive databases.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Benchmark Summary Table&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;RockPro64&lt;/th&gt;
&lt;th&gt;Quartz64-B&lt;/th&gt;
&lt;th&gt;Winner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CPU Cores&lt;/td&gt;
&lt;td&gt;6 (2×A72 + 4×A53)&lt;/td&gt;
&lt;td&gt;4 (4×A55)&lt;/td&gt;
&lt;td&gt;RockPro64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU Speed (100k loops)&lt;/td&gt;
&lt;td&gt;0.92s&lt;/td&gt;
&lt;td&gt;0.99s&lt;/td&gt;
&lt;td&gt;RockPro64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory Bandwidth&lt;/td&gt;
&lt;td&gt;1.7 GB/s&lt;/td&gt;
&lt;td&gt;3.7 GB/s&lt;/td&gt;
&lt;td&gt;Quartz64-B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage Write&lt;/td&gt;
&lt;td&gt;332.8 MB/s&lt;/td&gt;
&lt;td&gt;20.1 MB/s&lt;/td&gt;
&lt;td&gt;RockPro64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage Read&lt;/td&gt;
&lt;td&gt;762.5 MB/s&lt;/td&gt;
&lt;td&gt;1,461 MB/s&lt;/td&gt;
&lt;td&gt;Quartz64-B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Random I/O&lt;/td&gt;
&lt;td&gt;0.87s&lt;/td&gt;
&lt;td&gt;0.605s&lt;/td&gt;
&lt;td&gt;Quartz64-B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network Send&lt;/td&gt;
&lt;td&gt;93.5 Mbps&lt;/td&gt;
&lt;td&gt;95.4 Mbps&lt;/td&gt;
&lt;td&gt;Tie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network Receive&lt;/td&gt;
&lt;td&gt;94.1 Mbps&lt;/td&gt;
&lt;td&gt;92.1 Mbps&lt;/td&gt;
&lt;td&gt;Tie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="Performance Comparison Charts" src="https://tinycomputers.io/images/pine64_comparison.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Both boards tested on the same local network segment&lt;/em&gt;
&lt;em&gt;All tests repeated multiple times for consistency&lt;/em&gt;&lt;/p&gt;</description><category>arm</category><category>benchmarks</category><category>cortex-a55</category><category>cortex-a72</category><category>debian</category><category>freebsd</category><category>performance</category><category>pine64</category><category>quartz64-b</category><category>rk3399</category><category>rk3566</category><category>rockchip</category><category>rockpro64</category><category>sbc</category><category>single board computer</category><guid>https://tinycomputers.io/posts/pine64-board-comparison-rockpro64-vs-quartz64-b.html</guid><pubDate>Wed, 24 Sep 2025 17:42:29 GMT</pubDate></item><item><title>Pine64 ROCKPro64 SATA Software RAID5</title><link>https://tinycomputers.io/posts/pine64-rockpro64-sata-software-raid5.html?utm_source=feed&amp;utm_medium=rss&amp;utm_campaign=rss</link><dc:creator>A.C. Jokela</dc:creator><description>&lt;div class="audio-widget"&gt;
&lt;div class="audio-widget-header"&gt;
&lt;span class="audio-widget-icon"&gt;🎧&lt;/span&gt;
&lt;span class="audio-widget-label"&gt;Listen to this article&lt;/span&gt;
&lt;/div&gt;
&lt;audio controls preload="metadata"&gt;
&lt;source src="https://tinycomputers.io/pine64-rockpro64-sata-software-raid5_tts.mp3" type="audio/mpeg"&gt;
&lt;/source&gt;&lt;/audio&gt;
&lt;div class="audio-widget-footer"&gt;11 min · AI-generated narration&lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
  td {
      /*color: red;*/
      text-align: center;
      border-right: thin dotted grey;
      padding; 4px;
    };
  th {
    padding: 4px;
    text-align: center;
    width: 100%;
    border-top: thin dotted grey;
  };
  tr {
    text-align: center;
    border-bottom: thin dotted grey;
    margin: 2px;
  };
&lt;/style&gt;

&lt;p&gt;&lt;img src="https://tinycomputers.io/images/rockpro64-nas-signal-2023-01-04-182040_003.jpeg.webp" style="zoom:33%; text-align: left; float: left; padding: 50px;" loading="lazy"&gt;&lt;/p&gt;
&lt;p&gt;I love experimenting with all sorts of single board computers (SBCs) and systems on modules (SoMs) - like the Raspberry Pi CM4 or Pine64 SOQuartz.  This extends even to needing to make a network-attached storage (NAS).  One of the requirements is the ability to attached a bunch of disks to a tiny computer.  The easiest way to accomplish this is using a PCIe SATA controller. To use this, you need a PCIe lane exposed.  Luckily, there are a number of &lt;a href="https://tinycomputers.io/posts/raspberry-pi-cm4-and-pin-compatible-modules.html"&gt;system on modules&lt;/a&gt; with PCIe support.  There is also Pine64 single board computers with an exposed PCIe lanes.  These are the Quartz64 model A as well as the ROCKPro64.  The former does not have the performance capabilities that the latter does, as such, we will be using the ROCKPro64.&lt;/p&gt;
&lt;p&gt;My requirements for a NAS are bare-bones.  I want &lt;a href="https://baud.rs/NpkekN"&gt;network file system&lt;/a&gt; support; and secondarily, Windows' SMB support via the open source project &lt;a href="https://baud.rs/zQPDkD"&gt;Samba&lt;/a&gt;. Samba is of secondary importance because the primary use case for this particular NAS is providing additional disk space to other SBCs that are running some flavor of Linux or BSD (like &lt;a href="https://baud.rs/SxjjCl"&gt;NetBSD&lt;/a&gt;).  &lt;/p&gt;
&lt;p&gt;When the &lt;a href="https://baud.rs/T8S7mv"&gt;Turing Pi 2&lt;/a&gt; was being promoted on &lt;a href="https://baud.rs/q7l0GT"&gt;Kickstarter&lt;/a&gt;, I had pledged to the project and then purchased a &lt;a href="https://baud.rs/gUG1iH"&gt;2U shallow depth rack ITX server case&lt;/a&gt;.  The project has been moving along but is taking longer than I had anticipated. In the mean time, I decided to re-purpose the server case and use it for a simple NAS.&lt;/p&gt;
&lt;p&gt;I purchased four &lt;a href="https://baud.rs/EyWWgB"&gt;Seagate IronWolf 10TB drives&lt;/a&gt;. These are spinning metal drives not fancy NVME drives. NVME is too cost prohibitive and would ultimately not be performative; e.g. the bottleneck would be the ROCKPro64.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://tinycomputers.io/images/jumpered-power-supply-IMG_0776.jpg.webp" style="zoom:25%; float: right; padding: 50px;" loading="lazy"&gt;&lt;/p&gt;
&lt;p&gt;One of the four drives turned out to be a dud; there are only three in the above picture.  The original goal was have 30TB of RAID5 -- 30TB of storage with 10TB for parity.  But, because I did not want to spend much more on this project, I opted to return the broken drive and settle for 20TB of storage with 10TB of parity.&lt;/p&gt;
&lt;p&gt;The setup is fairly simple.  The 2U case, three 10TB drives, a ROCKPro64 4GB single board computer, and a &lt;a href="https://baud.rs/EyWWgB"&gt;450W ATX power supply&lt;/a&gt;.  &lt;/p&gt;
&lt;p&gt;Here's a pro-tip on using a power supply without a motherboard: while holding the power connector with the latching tab towards you, use a paper clip, or in my case, a piece of MIG welding wire, to short out the third and fourth connectors.  This probably will void the warranty if something happens to the power supply.&lt;/p&gt;
&lt;p&gt;Here is a bit of information on the &lt;a href="https://baud.rs/4HgAEn"&gt;tech specs&lt;/a&gt; of the ROCKPro64.&lt;/p&gt;
&lt;p&gt;The drive setup is straight forward.  Three drives, running in a RAID5 configuration producing a total of 20TB of usable storage.  Setting up software RAID under Linux is simple. I used &lt;a href="https://baud.rs/Ua9ImI"&gt;this&lt;/a&gt; as a foundation for setting up software RAID.  We are using software RAID because hardware RAID controllers are expensive and have limited support with single board computers.  The &lt;a href="https://baud.rs/92Ihjg"&gt;one that appears to work&lt;/a&gt;, is about &lt;a href="https://baud.rs/isLwkh"&gt;$600&lt;/a&gt;.  It is not that I would not be against spending that much on a shiny new controller, it is that I do not feel there would be a noticeable benefit over a pure software solution.  I will go into performance characteristics of the software RAID configuration later in this article.&lt;/p&gt;
&lt;h3&gt;How To Create RAID5 Arrays with mdadm&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://baud.rs/UIrtD6"&gt;RAID5&lt;/a&gt; has a requirement of at least three drives.  As previously mentioned, this gives you &lt;code&gt;n - 1&lt;/code&gt; drives of storage with one drive's worth of storage for parity.  This parity is not stored on the single drive, it is stored across all of the drives but it is equal in total to the size of one drive.  There is the assumption that all drives are of equal size.&lt;/p&gt;
&lt;p&gt;Get a pretty list of all the available disk:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;lsblk&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
NAME&lt;span class="w"&gt;          &lt;/span&gt;SIZE&lt;span class="w"&gt; &lt;/span&gt;FSTYPE&lt;span class="w"&gt;  &lt;/span&gt;TYPE&lt;span class="w"&gt;  &lt;/span&gt;MOUNTPOINT
sda&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;.1T&lt;span class="w"&gt;         &lt;/span&gt;disk&lt;span class="w"&gt;  &lt;/span&gt;
sdb&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;.1T&lt;span class="w"&gt;         &lt;/span&gt;disk&lt;span class="w"&gt;  &lt;/span&gt;
sdc&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;.1T&lt;span class="w"&gt;         &lt;/span&gt;disk&lt;span class="w"&gt;  &lt;/span&gt;
mtdblock0&lt;span class="w"&gt;      &lt;/span&gt;16M&lt;span class="w"&gt;         &lt;/span&gt;disk&lt;span class="w"&gt;  &lt;/span&gt;
mmcblk2&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;58&lt;/span&gt;.2G&lt;span class="w"&gt;         &lt;/span&gt;disk&lt;span class="w"&gt;  &lt;/span&gt;
└─mmcblk2p1&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;57&lt;/span&gt;.6G&lt;span class="w"&gt; &lt;/span&gt;ext4&lt;span class="w"&gt;    &lt;/span&gt;part&lt;span class="w"&gt;  &lt;/span&gt;/
mmcblk2boot0&lt;span class="w"&gt;    &lt;/span&gt;4M&lt;span class="w"&gt;         &lt;/span&gt;disk&lt;span class="w"&gt;  &lt;/span&gt;
mmcblk2boot1&lt;span class="w"&gt;    &lt;/span&gt;4M&lt;span class="w"&gt;         &lt;/span&gt;disk&lt;span class="w"&gt;  &lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You will see we have three, "10TB" drives.&lt;/p&gt;
&lt;p&gt;To create a RAID 5 array with the three 9.1T disks, pass them into the &lt;code&gt;mdadm --create&lt;/code&gt; command. We will have to specify the device name you wish to create, the RAID level, and the number of devices. We will be naming the device &lt;code&gt;/dev/md0&lt;/code&gt;, and include the disks that will build the array:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mdadm&lt;span class="w"&gt; &lt;/span&gt;--create&lt;span class="w"&gt; &lt;/span&gt;--verbose&lt;span class="w"&gt; &lt;/span&gt;/dev/md0&lt;span class="w"&gt; &lt;/span&gt;--level&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--raid-devices&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/dev/sda&lt;span class="w"&gt; &lt;/span&gt;/dev/sdb&lt;span class="w"&gt; &lt;/span&gt;/dev/sdc
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This will start to configure the array. &lt;code&gt;mdam&lt;/code&gt; uses the recovery process to build the array. This process can and will take some time to complete, but the array can be used during this time. You can monitor the progress of the mirroring by checking the &lt;code&gt;/proc/mdstat&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;cat&lt;span class="w"&gt; &lt;/span&gt;/proc/mdstat
Personalities&lt;span class="w"&gt; &lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;raid6&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;raid5&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;raid4&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;linear&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;multipath&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;raid0&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;raid1&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;raid10&lt;span class="o"&gt;]&lt;/span&gt;
md0&lt;span class="w"&gt; &lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;active&lt;span class="w"&gt; &lt;/span&gt;raid5&lt;span class="w"&gt; &lt;/span&gt;sda&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sdc&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sdb&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;19532609536&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;blocks&lt;span class="w"&gt; &lt;/span&gt;super&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.2&lt;span class="w"&gt; &lt;/span&gt;level&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;512k&lt;span class="w"&gt; &lt;/span&gt;chunk,&lt;span class="w"&gt; &lt;/span&gt;algorithm&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;/3&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;UUU&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;bitmap:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;/73&lt;span class="w"&gt; &lt;/span&gt;pages&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;0KB&lt;span class="o"&gt;]&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;65536KB&lt;span class="w"&gt; &lt;/span&gt;chunk

unused&lt;span class="w"&gt; &lt;/span&gt;devices:&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;none&amp;gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;For this 20TB to build, it took over 2000 minutes or about a day and half.  Once the building is complete, your &lt;code&gt;/proc/mdstat&lt;/code&gt; will look similar to the above.&lt;/p&gt;
&lt;p&gt;Make a file system on our new array:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mkfs.ext4&lt;span class="w"&gt; &lt;/span&gt;-F&lt;span class="w"&gt; &lt;/span&gt;/dev/md0
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Make a directory:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;/mnt/md0
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mount the new array device&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;/dev/md0&lt;span class="w"&gt; &lt;/span&gt;/mnt/md0
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Check to see if the new array is available:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;df&lt;span class="w"&gt; &lt;/span&gt;-h&lt;span class="w"&gt; &lt;/span&gt;-x&lt;span class="w"&gt; &lt;/span&gt;devtmpfs&lt;span class="w"&gt; &lt;/span&gt;-x&lt;span class="w"&gt; &lt;/span&gt;tmpfs
Filesystem&lt;span class="w"&gt;      &lt;/span&gt;Size&lt;span class="w"&gt;  &lt;/span&gt;Used&lt;span class="w"&gt; &lt;/span&gt;Avail&lt;span class="w"&gt; &lt;/span&gt;Use%&lt;span class="w"&gt; &lt;/span&gt;Mounted&lt;span class="w"&gt; &lt;/span&gt;on
/dev/mmcblk2p1&lt;span class="w"&gt;   &lt;/span&gt;57G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;.7G&lt;span class="w"&gt;   &lt;/span&gt;48G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/
/dev/md0&lt;span class="w"&gt;         &lt;/span&gt;19T&lt;span class="w"&gt;   &lt;/span&gt;80K&lt;span class="w"&gt;   &lt;/span&gt;18T&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/mnt/md0
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now, let's save our array's configuration:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mdadm&lt;span class="w"&gt; &lt;/span&gt;--detail&lt;span class="w"&gt; &lt;/span&gt;--scan&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tee&lt;span class="w"&gt; &lt;/span&gt;-a&lt;span class="w"&gt; &lt;/span&gt;/etc/mdadm/mdadm.conf
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Update &lt;code&gt;initramfs&lt;/code&gt;so we can use our new array on boot:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;update-initramfs&lt;span class="w"&gt; &lt;/span&gt;-u
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add our device to &lt;code&gt;fstab&lt;/code&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tee&lt;span class="w"&gt; &lt;/span&gt;-a&lt;span class="w"&gt; &lt;/span&gt;/etc/fstab
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;From some of the other documentation, there is a note that dumping the configuration to &lt;code&gt;/etc/mdadm/mdadm.conf&lt;/code&gt; before the array is completely built, could result in the number of spare devices not being set correctly.  This is what &lt;code&gt;mdadm.conf&lt;/code&gt; looks like:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;mdadm&lt;/span&gt;.&lt;span class="nv"&gt;conf&lt;/span&gt;
#
#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nv"&gt;NB&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;update&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;initramfs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;updating&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;.
#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nv"&gt;NB&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;will&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ensure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;initramfs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;has&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;an&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;uptodate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;copy&lt;/span&gt;.
#
#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Please&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;refer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;mdadm&lt;/span&gt;.&lt;span class="nv"&gt;conf&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;information&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;about&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;.
#

#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;built&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;in&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;partitions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;proc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;partitions&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;all&lt;/span&gt;
#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;containers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;superblocks&lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;alternatively&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;specify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;devices&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;scan&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;using&lt;/span&gt;
#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;wildcards&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;desired&lt;/span&gt;.
#&lt;span class="nv"&gt;DEVICE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;partitions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;containers&lt;/span&gt;

#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;automatically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;arrays&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;belonging&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;system&lt;/span&gt;
&lt;span class="nv"&gt;HOMEHOST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;system&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;instruct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;monitoring&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;daemon&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;send&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;mail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;alerts&lt;/span&gt;
&lt;span class="nv"&gt;MAILADDR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;root&lt;/span&gt;

#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;definitions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;existing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;arrays&lt;/span&gt;

#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;configuration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;was&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;auto&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;generated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Thu&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Dec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2022&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;:&lt;span class="mi"&gt;46&lt;/span&gt;:&lt;span class="mi"&gt;51&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;0500&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;mkconf&lt;/span&gt;
&lt;span class="nv"&gt;ARRAY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;md0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;.&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;spares&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;k8s&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;controlplane&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;01&lt;/span&gt;:&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="nv"&gt;e3b0e3&lt;/span&gt;:&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="nv"&gt;cccb921&lt;/span&gt;:&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;fc8e646&lt;/span&gt;:&lt;span class="nv"&gt;ac33bd0f&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Note &lt;code&gt;spares=1&lt;/code&gt; is correct in the case of my set up.&lt;/p&gt;
&lt;p&gt;By this point, if you have waited until the array has been successfully built - my 20TB array took about a day and half to complete.&lt;/p&gt;
&lt;h3&gt;Performance&lt;/h3&gt;
&lt;p&gt;We now have a shiny, new 20TB of available disk space, but what are the performance characteristics of a 20TB, Software RAID5?&lt;/p&gt;
&lt;p&gt;We will be using &lt;a href="https://baud.rs/JdEQcS"&gt;iozone&lt;/a&gt;.  Iozone has been around for decades; I first used it while in college and having a rack full of servers was all the rage -- before the creation of utility-scale cloud computing, as well as tiny computers.&lt;/p&gt;
&lt;p&gt;Download iozone from &lt;a href="https://baud.rs/oAq7hs"&gt;iozone.org&lt;/a&gt;.  Extract and compile:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;iozone3_494/src/current
$&lt;span class="w"&gt; &lt;/span&gt;make&lt;span class="w"&gt; &lt;/span&gt;linux
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You will end up with the executable &lt;code&gt;iozone&lt;/code&gt; in the &lt;code&gt;src/current&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Run &lt;code&gt;iozone&lt;/code&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;./iozone&lt;span class="w"&gt; &lt;/span&gt;-a&lt;span class="w"&gt; &lt;/span&gt;-b&lt;span class="w"&gt; &lt;/span&gt;output.xls&lt;span class="w"&gt; &lt;/span&gt;/mnt/md0
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This will both output a lot of numbers as well as take a while to complete.  When it is complete, you will have an Excel spreadsheet with the results in &lt;code&gt;output.xls&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;At this point, I am going to stop doing a step by step of what I have executing and running.  Why, I am going to show some visualizations and analyses of our results.  My steps will be roughly:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Break out each block of metrics into its own csv file; for example, the first block found in &lt;code&gt;output.xls&lt;/code&gt; would be saved in its own csv file; let's call it &lt;code&gt;writer.csv&lt;/code&gt;; exclude the header &lt;code&gt;Writer Report&lt;/code&gt;from the csv.
   Repeat this step for all blocks of reports.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;
Writer Report                                                   
4   8   16  32  64  128 256 512 1024    2048    4096    8192    16384
64  703068  407457  653436  528618  566551                              
128 504196  306992  433727  962469  498114  757430                          
256 805021  475990  850282  594276  571198  582035  733527                      
512 660600  573916  439445  1319250 549959  645703  926116  591299                  
1024    1102176 1053512 610617  704230  902151  1326505 1011817 1161176 919928              
2048    608964  1398145 1329751 822175  1140942 841094  1332432 1308682 1082427 1311879         
4096    1066886 1304093 1168634 946820  1467135 881253  1360802 931521  1047309 1018923 1047054     
8192    955344  1295186 1329052 1354035 1019915 1192806 1373082 1197294 1053501 866339  1116235 1368760
16384   1471798 1219970 2029709 1957942 2031269 1533341 1570127 1494752 1873291 1370365 1761324 1647601 1761143
32768   0   0   0   0   1948388 1734381 1389173 1315295 1848047 1916465 1944804 1646551 1632605
65536   0   0   0   0   1938246 1933611 1638071 1910004 1885763 1876212 1844374 1721776 1578535
131072  0   0   0   0   1969167 1962833 1921089 1757021 1644607 1780142 1869709 1566404 1356993
262144  0   0   0   0   2025197 2037129 2036955 1747487 1961757 1954913 1934085 1718841 1596327
524288  0   0   0   0   2041397 2080623 2087150 2049656 2007421 2005253 1930617 1876761 1813078
&lt;/pre&gt;

&lt;ol&gt;
&lt;li&gt;I used a combination of using Excel (using LibreOffice Calc would work, too) and a &lt;a href="https://baud.rs/D92xhT"&gt;Jupyter Notebook&lt;/a&gt;.  Excel was used to pull out each report's block and then save each to a CSV file; the &lt;a href="https://tinycomputers.io/pages/rockpro64-armbian-raid5-iozone.html"&gt;Notebook&lt;/a&gt; contains python code for reading in CSVs, and using &lt;code&gt;matplotlib&lt;/code&gt; to produce visualizations.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Select Visualizations&lt;/h3&gt;
&lt;p&gt;&lt;img alt="" src="https://tinycomputers.io/images/rockpro64-software-raid/Read-3D.png.webp"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="https://tinycomputers.io/images/rockpro64-software-raid/Read-heatmap.png.webp"&gt;&lt;/p&gt;
&lt;p&gt;There actually is relatively consistent reads across the file sizes and transfer sizes.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="https://tinycomputers.io/images/rockpro64-software-raid/Write-3D.png.webp"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="https://tinycomputers.io/images/rockpro64-software-raid/Write-heatmap.png.webp"&gt;&lt;/p&gt;
&lt;script type="text/javascript"&gt;
amzn_assoc_placement = "adunit0";
amzn_assoc_tracking_id = "tinycompute05-20";
amzn_assoc_ad_mode = "search";
amzn_assoc_ad_type = "smart";
amzn_assoc_marketplace = "amazon";
amzn_assoc_region = "US";
amzn_assoc_title = "Goodies";
amzn_assoc_default_search_phrase = "seagate sata pcie";
amzn_assoc_default_category = "All";
amzn_assoc_linkid = "5fc86499de521ab9aacd2a8118914cfd";
amzn_assoc_rows = "4";
amzn_assoc_design = "text_links";
&lt;/script&gt;
&lt;script src="//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US"&gt;&lt;/script&gt;</description><category>iozone</category><category>pine64</category><category>pine64 rockpro64</category><category>raid</category><category>single board computers</category><guid>https://tinycomputers.io/posts/pine64-rockpro64-sata-software-raid5.html</guid><pubDate>Sat, 07 Jan 2023 00:01:26 GMT</pubDate></item><item><title>Raspberry Pi CM4 and Pin Compatible Modules</title><link>https://tinycomputers.io/posts/raspberry-pi-cm4-and-pin-compatible-modules.html?utm_source=feed&amp;utm_medium=rss&amp;utm_campaign=rss</link><dc:creator>A.C. Jokela</dc:creator><description>&lt;div style="padding-bottom: 50px; padding-top: 50px;"&gt;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;UPDATE: 2023/02/04:&lt;/span&gt; &lt;a href="https://tinycomputers.io/posts/bigtreetech-cb1-review.html"&gt;Review of BIGTREETECH CB1 - RPi CM4 Pin Compatible Module&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;div class="audio-widget"&gt;
&lt;div class="audio-widget-header"&gt;
&lt;span class="audio-widget-icon"&gt;🎧&lt;/span&gt;
&lt;span class="audio-widget-label"&gt;Listen to this article&lt;/span&gt;
&lt;/div&gt;
&lt;audio controls preload="metadata"&gt;
&lt;source src="https://tinycomputers.io/raspberry-pi-cm4-and-pin-compatible-modules_tts.mp3" type="audio/mpeg"&gt;
&lt;/source&gt;&lt;/audio&gt;
&lt;div class="audio-widget-footer"&gt;38 min · AI-generated narration&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Hardware, in our modern era, does not exist in a vacuum; it requires software to function and be useful. One of main benefits of living within the Raspberry Pi ecosystem is you get up-to-date software that is maintained by a large network of source code contributors.  Just for the &lt;a href="https://baud.rs/TlfHWz"&gt;linux kernel&lt;/a&gt; used in Raspberry Pi OS, there have been over 5,000 people contributing to the project.  That's hundreds of thousands of lines of code added, removed and modified. Raspberry Pi is successful because of its ecosystem.  It is so large, it is self-sustaining. The Raspberry Pi Compute Module 4 (&lt;em&gt;announcement of the &lt;a href="https://baud.rs/Apl872"&gt;"CM4"&lt;/a&gt;&lt;/em&gt;) was introduced about two years ago.  &lt;a href="https://baud.rs/3BKSA3"&gt;Official Raspberry Pi CM4 Datasheet&lt;/a&gt;. It is a followup to the wildly successful &lt;a href="https://baud.rs/pTI87p" target="_blank"&gt;Raspberry Pi 4b&lt;/a&gt;.  The CM4 is a different form factor from the 4b.  Unlike the 4b, it requires a &lt;a href="https://baud.rs/Do6Piv" target="_blank"&gt;carrier or IO board&lt;/a&gt; to be useful. The good news is it is compatible with a &lt;a href="https://baud.rs/J064D2"&gt;bewildering array of carrier and IO boards&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Raspberry Pi CM4&lt;/h3&gt;
&lt;div style="width: 100%; text-align: center; padding-bottom: 1em;"&gt;
    &lt;img src="https://tinycomputers.io/images/rpi-cm4-1gb-signal-2022-12-19-162656.png.webp" style="width:45%; text-align:center; float:center; padding: 2px;" loading="lazy"&gt;&lt;br&gt;
Raspberry Pi Compute Module 4, 1GB memory
&lt;/div&gt;

&lt;div&gt;&lt;/div&gt;

&lt;p&gt;There are IO boards that give you the same form factor as the RPi 4b, there are also IO boards that turn your CM4 into a KVM for a server management, there are boards with two ethernet ports -- allowing for the creation of a simple router.  There also boards that expose the CM4's PCIe bus. This opens up the possibilities for using peripherals like addition network adapters or SATA controllers. More on that later.&lt;/p&gt;
&lt;p&gt;Since the CM4's release, there have been a few pin compatible modules developed by other firms.  By &lt;em&gt;pin compatible&lt;/em&gt;, I mean that these other modules can correctly be attached via &lt;a href="https://baud.rs/XzHRWI"&gt;Hirose mating connectors&lt;/a&gt; to the IO boards.&lt;/p&gt;
&lt;p&gt;One of the primary benefits of using a genuine Raspberry Pi CM4, as I mentioned in the first paragraph, is the ecosystem.  The CM4 uses the same operating system as the 4b.  This allows for nearly all the same software to be usable across the RPi family of single board computers.  This sheds light on one of the most commonly brought up issues with non-Raspberry Pi single board computers: the software ecosystem just is not as robust as Raspberry Pi.  This is not limited to the alternatives to the CM4.   There are an array of alternatives to the RPi family, like the boards made by &lt;a href="https://baud.rs/Gm3wOf"&gt;Pine64&lt;/a&gt;, or &lt;a href="https://baud.rs/kIdGna"&gt;Libre&lt;/a&gt;, or &lt;a href="https://baud.rs/tb2333"&gt;Hardkernel's&lt;/a&gt; Odroid series.  These all cannot run the official Raspberry Pi OS.&lt;/p&gt;
&lt;p&gt;Jeff Geerling does a fantastic job of &lt;a href="https://baud.rs/81s7YT"&gt;reviewing the RPi CM4&lt;/a&gt;.  I am not going to give a complete, indepth review; Jeff has already done that.&lt;/p&gt;
&lt;p&gt;Core Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Optional eMMC, zero to 32GB&lt;/li&gt;
&lt;li&gt;Optional Wireless (WiFi and Bluetooth)&lt;/li&gt;
&lt;li&gt;Variety of memory sizes, 1GB to 8GB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If by some chance you stumbled onto this post and you need assistance in getting Raspberry Pi OS running on a CM4 unit, check out &lt;a href="https://baud.rs/Da8w5j"&gt;this&lt;/a&gt;.  I'm not going to go into details here; it is &lt;a href="https://baud.rs/Da8w5j"&gt;a solved problem&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Many of the alternatives to Raspberry Pi OS have a very similar feel and shallow curve for learning and setting up, but they are not 100% the same.  Take for example, the the multi-board Linux distribution &lt;a href="https://baud.rs/So0E3c"&gt;Armbian&lt;/a&gt;.  Armbian supports over 160 different single board computers.  If you have a well established board, there is a good chance there's an Armbian build for it.  Armbian is very similar to RPi OS; they are both derivatives of &lt;a href="https://baud.rs/afjxQe"&gt;Debian&lt;/a&gt;, both can use standard Ubuntu and Debian packages, both have a similar method of writing a disk image to an SD card and booting the OS.  There is no guarantee, however, that all software designed for the Raspberry Pi OS will run under Armbian.  Particularly when dealing with third party shields and GPIO boards as well as things that I tend to ignore like video encoding/decoding and sound.&lt;/p&gt;
&lt;p&gt;The common quip as of late goes something like this: &lt;em&gt;because of the shortage of Raspberry Pi computers, some people have turned to alternatives.&lt;/em&gt; This might be the case for some, but this is not going to be my justification for using or testing out the three alternatives that will be present throughout the rest of this article.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;All Raspberry Pi single board computers and modules are in tight supply for the retail and hobbists markets.  Check out &lt;a href="https://baud.rs/T47bcN"&gt;Raspberry Pi Locator&lt;/a&gt; for places that might have supply.  If you are willing to pay a significant premium, &lt;a href="https://baud.rs/TiQUmU"&gt;eBay has quite a few available&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With the RPi CM4 having been covered extensively - like &lt;a href="https://baud.rs/81s7YT"&gt;Jeff Geerling's Review&lt;/a&gt;; instead, I'll be looking at the remaining three modules.
&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;h4&gt;Performance Metrics&lt;/h4&gt;
&lt;table style="width: 100%; text-align: center; border: thin dotted grey; padding: 2px;"&gt;
  &lt;tr style="text-align: center; border-bottom: thin dotted grey; margin: 2px;"&gt;
    &lt;th colspan="3" style="text-align: left; font-weight: bold; margin-left: 2px; padding-left: 10px;"&gt;
      &lt;a href="https://baud.rs/f75xQY" target="_blank"&gt;Geekbench Metrics&lt;/a&gt;
    &lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;
      Module
    &lt;/th&gt;
    &lt;th&gt;
      Single CPU Metrics
    &lt;/th&gt;
    &lt;th&gt;
      Multi-CPU Metrics
    &lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr style="background-color: #F5F5F5;"&gt;
    &lt;td&gt;
      &lt;a href="https://baud.rs/ChASve" target="_blank"&gt;Raspberry Pi CM4&lt;/a&gt;
    &lt;/td&gt;
    &lt;td&gt;228&lt;/td&gt;&lt;td&gt;644&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href="https://baud.rs/axATbL" target="_blank"&gt;Radxa CM3&lt;/a&gt;
    &lt;/td&gt;
    &lt;td&gt;163&lt;/td&gt;&lt;td&gt;508&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="background-color: #F5F5F5;"&gt;
    &lt;td&gt;
      &lt;a href="https://baud.rs/4oDIbw" target="_blank"&gt;Pine64 SOQuartz&lt;/a&gt;
    &lt;/td&gt;
    &lt;td&gt;156&lt;/td&gt;&lt;td&gt;491&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="text-align: center;"&gt;
    &lt;td&gt;
      &lt;a href="https://baud.rs/OM5ve0" target="_blank"&gt;Banana Pi CM4&lt;/a&gt;
    &lt;/td&gt;
    &lt;td&gt;295&lt;/td&gt;&lt;td&gt;1087&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;div style="height: 3em;"&gt;&lt;/div&gt;
&lt;table style="width: 100%; text-align: center; border: thin dotted grey; padding: 2px;"&gt;
  &lt;tr style="text-align: center; border-bottom: thin dotted grey; margin: 2px;"&gt;
    &lt;th colspan="5" style="text-align: left; font-weight: bold; margin-left: 2px; padding-left: 10px;"&gt;
    Features Comparison
    &lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey; text-align: center;"&gt;
    &lt;th&gt;&lt;/th&gt;
    &lt;th&gt;&lt;a href="https://baud.rs/DhjhXx" target="_blank"&gt;Raspberry Pi CM4&lt;/a&gt;&lt;/th&gt;
    &lt;th&gt;&lt;a href="https://baud.rs/yZ7msy" target="_blank"&gt;Radxa CM3&lt;/a&gt;&lt;/th&gt;
    &lt;th&gt;&lt;a href="https://baud.rs/Ixvxd7" target="_blank"&gt;Pine64 SOQuartz&lt;/a&gt;&lt;/th&gt;
    &lt;th&gt;&lt;a href="https://baud.rs/lBRH90" target="_blank"&gt;Banana Pi CM&lt;/a&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr style="background-color: #F5F5F5;"&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;a href="https://baud.rs/AVEUtR" target="_blank"&gt;Specifications&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;&lt;a href="https://baud.rs/uHkpAS" target="_blank"&gt;Specifications&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;&lt;a href="https://baud.rs/Sedjyf" target="_blank"&gt;Specifications&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;&lt;a href="https://baud.rs/eDS2LT" target="_blank"&gt;Specifications&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;Core&lt;/td&gt;
    &lt;td&gt;Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz&lt;/td&gt;
    &lt;td&gt;Rockchip RK3566, Quad core Cortex-A55 (ARM v8) 64-bit SoC @ 2.0GHz&lt;/td&gt;
    &lt;td&gt;Rockchip RK3566, Quad core Cortex-A55 (ARM v8) 64-bit SoC @ 1.8GHz and Embedded 32-bit RISC-V CPU&lt;/td&gt;
    &lt;td&gt;Amlogic A311D Quad core ARM Cortex-A73 and dual core ARM Cortex-A53 CPU&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey; background-color: #F5F5F5;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;NPU&lt;/td&gt;
    &lt;td&gt;-&lt;/td&gt;
    &lt;td&gt;0.8T NPU&lt;/td&gt;
    &lt;td&gt;0.8 TOPS Neural Network Acceleration Engine&lt;/td&gt;
    &lt;td&gt;5.0 TOPS&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;GPU&lt;/td&gt;
    &lt;td&gt;-&lt;/td&gt;
    &lt;td&gt;Mali G52 GPU&lt;/td&gt;
    &lt;td&gt;Mali-G52 2EE Bifrost GPU&lt;/td&gt;
    &lt;td&gt;Arm Mali-G52 MP4 (6EE) GPU&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey; background-color: #F5F5F5;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;Memory&lt;/td&gt;
    &lt;td&gt;1GB, 2GB, 4GB or 8GB LPDDR4&lt;/td&gt;
    &lt;td&gt;1GB, 2GB, 4GB or 8GB LPDDR4&lt;/td&gt;
    &lt;td&gt;2GB, 4GB, 8GB LPDDR4&lt;/td&gt;
    &lt;td&gt;4GB LPDDR4&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;eMMC&lt;/td&gt;
    &lt;td&gt;On module - 0GB to 32GB&lt;/td&gt;
    &lt;td&gt;On module - 0GB to 128GB&lt;/td&gt;
    &lt;td&gt;External - 16GB to 128GB&lt;/td&gt;
    &lt;td&gt;On module - 16GB to 128G)&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey; background-color: #F5F5F5;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;Network&lt;/td&gt;
    &lt;td&gt;1Gbit Ethernet - Option for WiFi5 with Bluetooth 5.0&lt;/td&gt;
    &lt;td&gt;1Gbit Ethernet - Option for WiFi5 with Bluetooth 5.0&lt;/td&gt;
    &lt;td&gt;1Gbit Ethernet - WiFi 802.11 b/g/n/ac with Bluetooth 5.0&lt;/td&gt;
    &lt;td&gt;1Gbit Ethernet&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;PCIe&lt;/td&gt;
    &lt;td&gt;1-lane&lt;/td&gt;
    &lt;td&gt;1-lane&lt;/td&gt;
    &lt;td&gt;1-lane&lt;/td&gt;
    &lt;td&gt;1-lane&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey; background-color: #F5F5F5;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;HDMI&lt;/td&gt;
    &lt;td&gt;2x HDMI&lt;/td&gt;
    &lt;td&gt;1x HDMI&lt;/td&gt;
    &lt;td&gt;1x HDMI&lt;/td&gt;
    &lt;td&gt;1x HDMI&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;GPIO&lt;/td&gt;
    &lt;td&gt;28 pin&lt;/td&gt;
    &lt;td&gt;&lt;a href="https://baud.rs/Bc6LKT" target="_blank"&gt;40 pin&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;28 pin&lt;/td&gt;
    &lt;td&gt;26 pin&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey; background-color: #F5F5F5;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;Extras&lt;/td&gt;
    &lt;td&gt;-&lt;/td&gt;
    &lt;td&gt;-&lt;/td&gt;
    &lt;td&gt;-&lt;/td&gt;
    &lt;td&gt;SATA ports, one shared with USB 3, one shared with PCIe; Audio Codec&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;Geekbench Score - Single CPU&lt;/td&gt;
    &lt;td&gt;228&lt;/td&gt;
    &lt;td&gt;163&lt;/td&gt;
    &lt;td&gt;156&lt;/td&gt;
    &lt;td&gt;295&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey; background-color: #F5F5F5;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;Geekbench Score - Multi CPU&lt;/td&gt;
    &lt;td&gt;644&lt;/td&gt;
    &lt;td&gt;508&lt;/td&gt;
    &lt;td&gt;491&lt;/td&gt;
    &lt;td&gt;1087&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;Price of Tested*&lt;/td&gt;
    &lt;td&gt;$65&lt;/td&gt;
    &lt;td&gt;$69&lt;/td&gt;
    &lt;td&gt;$49&lt;/td&gt;
    &lt;td&gt;$105&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr style="border-bottom: thin dotted grey; background-color: #F5F5F5;"&gt;
    &lt;td style="border-right: thin dotted grey;"&gt;Power Consumption&lt;/td&gt;
    &lt;td&gt;7 watts&lt;/td&gt;
    &lt;td&gt;N/A&lt;/td&gt;
    &lt;td&gt;2 watts&lt;/td&gt;
    &lt;td&gt;N/A&lt;/td&gt;
  &lt;/tr&gt;

&lt;/table&gt;

&lt;div&gt;
    * Prices exclude shipping
&lt;/div&gt;
&lt;div style="height: 3em;"&gt;&lt;/div&gt;

&lt;h3&gt;Pine64 SOQuartz&lt;/h3&gt;
&lt;div style="width: 100%; text-align: center; padding-bottom: 1em;"&gt;
    &lt;img src="https://tinycomputers.io/images/signal-2022-11-30-202052_004-SOQuartz-module.png.webp" style="width:45%; text-align:center; float:center; padding: 2px;" loading="lazy"&gt;&lt;br&gt;
Pine64 SOQuartz Module, 4GB memory
&lt;/div&gt;

&lt;p&gt;For whatever reason, I really like &lt;a href="https://baud.rs/Ixvxd7"&gt;Pine64's SOQuartz module&lt;/a&gt;.  It is by far the least performant of the four compute modules I have tried.  It has a wonky antenna and needs a far from mainstream variety of Linux to be useful. There are two Linux distributions available: &lt;a href="https://baud.rs/C90mkB"&gt;DietPI&lt;/a&gt; and &lt;a href="https://baud.rs/YHvnIM"&gt;Plebian Linux&lt;/a&gt;. I settled upon using Plebian.  I would have gone with DietPi but my initial use case of making a two ethernet router using a &lt;a href="https://baud.rs/yEWFBM"&gt;Waveshare Dual Gigabit Ethernet Base Board Designed for Raspberry Pi Compute Module 4&lt;/a&gt;, but I was unable to get both ethernet ports working.  Plebian was simpler.  For those interested in trying Plebian, you can download recent disk images by going to &lt;a href="https://baud.rs/AlW7P2"&gt;Plebian Linux's Github Actions&lt;/a&gt;, and select one of the recent "Build Quartz64 Images"; at the bottom there will be zipped disk image Artifacts to download for the various flavors of Quartz64.  Plebian is a bit rough around the edges.  It is derived from Debian Testing (currently codenamed &lt;em&gt;bookworm&lt;/em&gt;) and runs a release candidate Linux Kernel. Its developer, &lt;a href="https://baud.rs/TRsCK2"&gt;CounterPillow&lt;/a&gt;, also states that "&lt;strong&gt;&lt;em&gt;This is a work-in-progress project. Things don't work yet. Please do not flash these images yet unless you are trying to help develop this pipeline.&lt;/em&gt;&lt;/strong&gt;" The interactions with the system feel similar to that of &lt;a href="https://baud.rs/SxjjCl"&gt;NetBSD&lt;/a&gt; from the early-2010s.  It is not to say it is not a modern flavor of Linux, it is simply lacking some of the usual expectations.  You want your network interfaces to be named &lt;code&gt;eth0&lt;/code&gt;?  How about no.  Interfaces have not been aliased, if you can get WiFi drivers working, you will end up with a device named something like &lt;code&gt;wlxe84e069541e6&lt;/code&gt; instead of &lt;code&gt;wlan0&lt;/code&gt;.  Given that it is running a testing branch of Debian, things like docker and the like will likely not work without some significant wrangling.  &lt;/p&gt;
&lt;p&gt;Why do I like this compute module?  I like Pine64's products.  I like the community that has grown up around the products.  In the course of trying to get an operating system up and running, I had numerous questions that I asked on &lt;a href="https://baud.rs/qTkb1S"&gt;Pine64's Discord Server&lt;/a&gt;.  Everyone was extremely helpful and despite my own feelings that some of my questions were simplistic, no one expressed that sentiment.  There were no massive egos to speak of.&lt;/p&gt;
&lt;p&gt;Core Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Variety of memory options: 2gb to 8gb&lt;/li&gt;
&lt;li&gt;external eMMC module support: 8gb to 128gb&lt;/li&gt;
&lt;li&gt;Wifi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Getting Plebian running on a SOQuartz module is straightforward; write the appropriate image to an eMMC module, attach the eMMC onto the SOQuartz and place it into a carrier or IO board.  You should get working HDMI, one ethernet port, along with USB working.  A quick run down of the steps are as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Get a USB to eMMC adapter; Pine64 has &lt;a href="https://baud.rs/kYq1jk"&gt;one available&lt;/a&gt;; you could also try &lt;a href="https://baud.rs/KhNPnd"&gt;eBay&lt;/a&gt;; you may need to get a micro SD to USB adapter, too.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get an eMMC module. Pine64 has &lt;a href="https://baud.rs/7jS57l"&gt;a few available&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Obvious step: connect your eMMC to your USB to eMMC adapter and then connect that to your desktop/laptop/etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download a SOQuartz Plebian Linux disk image from &lt;a href="https://baud.rs/AlW7P2"&gt;Plebian Linux's Github Actions&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download&lt;code&gt;SOQuartz CM4 IO Board Image&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Unzip the contents&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You will end up with a file called &lt;code&gt;plebian-debian-bookworm-soquartz-cm4.img.xz&lt;/code&gt;;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write to your eMMC module.  You could use something &lt;a href="https://baud.rs/aD1DsC"&gt;balena Etcher&lt;/a&gt; or, if you're command-line-comfortable, use &lt;code&gt;dd&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;balena Etcher will take care of decompressing &lt;code&gt;plebian-debian-bookworm-soquartz-cm4.img.xz&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;using &lt;code&gt;dd&lt;/code&gt;, you can do something like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bash
 sudo xzcat plebian-debian-bookworm-soquartz-cm4.img.xz | sudo dd of=/dev/mmcblk1 status=progress&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;where &lt;code&gt;/dev/mmcblk1&lt;/code&gt; is the correct device for your USB to eMMC adapter.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="https://tinycomputers.io/images/2022-12-19%2022-28-59.png.webp"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Attach your eMMC module to your SOQuartz module and attach the module to an IO or carrier board.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Attach peripherals and apply power.  You'll eventually get presented with a prompt to set the password for the user &lt;code&gt;pleb&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If would be more cost effective if you were to buy a SOQuartz module, an USB to eMMC adapter and an eMMC module all at once; for orders being shipped to the United States, it is roughly a $9 flat rate.&lt;/p&gt;
&lt;p&gt;Finally, if you really feel like going for an alternative to Linux, &lt;a href="https://baud.rs/SxjjCl"&gt;NetBSD&lt;/a&gt; will also work on the SOQuartz, but it is more complicated.  You will need to download a &lt;a href="https://baud.rs/9ys0JN"&gt;Generic 64bit&lt;/a&gt; image from under the NetBSD-daily HEAD tab.  This will need to be written to an eMMC module.  Next, you will need to write the appropriate &lt;a href="https://baud.rs/1QWxpx"&gt;UEFI image&lt;/a&gt; to an SD card from Jared McNeill's port of &lt;a href="https://baud.rs/fLhWeN"&gt;Tianocore&lt;/a&gt; to the Quartz64 family.  UEFI and the disk image cannot exist on the same media.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pine64 sells &lt;a href="https://baud.rs/SZPeXv"&gt;SOQuartz modules&lt;/a&gt; directly from their site.  The modules I have purchased and used are the 4gb models.  They are about $50 excluding shipping.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Radxa CM3&lt;/h3&gt;
&lt;div style="width: 100%; text-align: center; padding-bottom: 1em;"&gt;
    &lt;img src="https://tinycomputers.io/images/RADXA-CM3-IMG_0733.png.webp" style="width:45%; text-align:center; float:center; padding: 2px;" loading="lazy"&gt;&lt;br&gt;
Radxa CM3, 4GB memory, without heatsinks
&lt;/div&gt;

&lt;p&gt;As far as performance goes, the &lt;a href="https://baud.rs/EhCt5f"&gt;Radxa CM3&lt;/a&gt; is just above Pine64's SOQuartz module but below Raspberry Pi CM4.  Radxa is better known for its &lt;a href="https://baud.rs/gs6UMD"&gt;Rock3&lt;/a&gt; and &lt;a href="https://baud.rs/MHLWc7"&gt;Rock5&lt;/a&gt; series of single board computers; available from &lt;a href="https://baud.rs/gPp8C4"&gt;ALLNET.China&lt;/a&gt; and &lt;a href="https://baud.rs/HtzTer"&gt;eBay&lt;/a&gt;.  The CM3 is in the Rock3 series of boards and modules.  The series features Rockchip RK3566/RK3568 processors, the RK3566 also is used in Pine64's Quartz64 and SOQuartz boards.  Even though the module will function without issue on a carrier or IO board designed for Raspberry Pi CM4, the &lt;a href="https://baud.rs/1FBRAx"&gt;CM3 IO board&lt;/a&gt; by Radxa exposes two SATA ports in addition to the PCIe 1x lane.  The CM3 has an &lt;a href="https://baud.rs/nLD0Ny"&gt;&lt;em&gt;official&lt;/em&gt; Debian&lt;/a&gt; and &lt;a href="https://baud.rs/FINKqE"&gt;Ubuntu&lt;/a&gt; distributions, but like all the other compute modules, these are artisanally crafted specifically for the CM3.  That means, you can not take an actual-official Debian or Ubuntu disk image for &lt;a href="https://baud.rs/8dbtmL"&gt;Arm64&lt;/a&gt; and have it just have it work.  Radxa does, however, maintain an up-to-date Github build pipeline for producing both &lt;a href="https://baud.rs/Srcxcu"&gt;Debian and Ubuntu images&lt;/a&gt; for the CM3.  Like the operating system's need to be different, so is the eMMC - it is not flashed in a typical manner - like what you would expect from a Raspberry Pi CM4 or even the Pine64 SOQuartz.  In order to install Linux on the onboard eMMC, you need to use tools provided by Rockchip.  The &lt;a href="https://baud.rs/6jhsLH"&gt;Radxa Wiki page for CM3&lt;/a&gt; is a good place to start.  The CM3 and its installation process are about as far from Raspberry Pi CM4 territory as you will deal with for the modules presented in this article.  The following instructions are available from &lt;a href="https://baud.rs/rMQyR2"&gt;wiki.radxa.com&lt;/a&gt; but they are found across a disparate set of pages; some describing the rockchip tools with references to disk images but with no clear and convenient place to download the files.  This is an attempt to streamline the process.  Let's get at it!&lt;/p&gt;
&lt;p&gt;Core Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On-module eMMC of 16 to 128GB&lt;/li&gt;
&lt;li&gt;Two SATA (when using the appropriate IO board)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Rockchip tools are available on Windows as well as macOS/Linux.  Downloading, compiling and running the macOS/Linux tool is straightforward; Windows involves a set of drivers and an executable tool.&lt;/p&gt;
&lt;h5&gt;Linux/macOS&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Install necessary USB and &lt;code&gt;autoconf&lt;/code&gt; packages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get install libudev-dev libusb-1.0-0-dev dh-autoreconf pkg-config libusb-1.0&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clone the &lt;a href="https://baud.rs/h25r9A"&gt;github&lt;/a&gt; repository&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rockchip&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rkdeveloptool&lt;/span&gt;
&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rkdeveloptool&lt;/span&gt;
&lt;span class="n"&gt;autoreconf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;
&lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="n"&gt;configure&lt;/span&gt;
&lt;span class="n"&gt;make&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;rkdeveloptool --help&lt;/code&gt;to verify it is installed&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Windows&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;Download &lt;a href="https://baud.rs/q8646k"&gt;RKDevTool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download &lt;a href="https://baud.rs/1gWMTJ"&gt;RKDriverAssistant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Unzip and execute RKDriverAssistant (&lt;code&gt;DriverInstall.exe&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Unzip RKDevTool&lt;/li&gt;
&lt;li&gt;Before executing the tool, you will want to change the language to English; change &lt;code&gt;Chinese.ini&lt;/code&gt; to &lt;code&gt;Englist.ini&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="" src="https://tinycomputers.io/images/rkdevtools-set-english-config.ini.png.webp"&gt;&lt;/p&gt;
&lt;p&gt;There is an assumption of using a &lt;a href="https://baud.rs/qCeIq9"&gt;Raspberry Pi CM4 IO Board&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;Boot into maskrom mode&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;Unplug the board and remove any SD card&lt;/li&gt;
&lt;li&gt;Plug a micro USB  to USB Type-A cable into the micro USB port on the IO board.  The other end of the cable gets plugged into your desktop or laptop.  My laptop only has USB-C, so I had to use an &lt;a href="https://baud.rs/H6VzqO"&gt;adapter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;On the CM3, there is a very tiny golden button; while pressing this, plug the power back in on the IO board&lt;/li&gt;
&lt;li&gt;After a few seconds, you can stop pressing the button&lt;/li&gt;
&lt;li&gt;Check for a USB device&lt;/li&gt;
&lt;li&gt;Linux/macOS should show &lt;code&gt;Bus 001 Device 112: ID 2207:350a Fuzhou Rockchip Electronics Company&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Windows, you will need to run &lt;code&gt;RKDevTool&lt;/code&gt;; the status at the bottom of the application should read &lt;code&gt;maskrom mode&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="width: 100%; text-align: center; padding-bottom: 1em;"&gt;
    &lt;img src="https://tinycomputers.io/images/radxa-cm3.png.webp" style="width:45%; text-align:center; float:center; padding: 2px;" loading="lazy"&gt;&lt;br&gt;
maskrom button
&lt;/div&gt;

&lt;h5&gt;Flashing/Writing a Disk Image&lt;/h5&gt;
&lt;p&gt;You will need to download two files:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://baud.rs/oKnlZU"&gt;rk356x_spl_loader_ddr1056_v1.06.110.bin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A Radax CM3 disk image from &lt;a href="https://baud.rs/D8ahKW"&gt;https://wiki.radxa.com/Rock3/downloads&lt;/a&gt; or &lt;a href="https://baud.rs/EMVLsQ"&gt;https://github.com/radxa-build/radxa-cm3-io/releases/latest&lt;/a&gt; or this &lt;a href="https://baud.rs/4tBfCb"&gt;mirror&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We will be using &lt;a href="https://baud.rs/twMlSZ"&gt;radxa-cm3-io-ubuntu-focal-server-arm64-20221101-0254-gpt.img.xz&lt;/a&gt;; it is advisable to follow &lt;a href="https://baud.rs/EMVLsQ"&gt;this&lt;/a&gt; and download a more recent disk image.&lt;/p&gt;
&lt;h5&gt;Linux Flashing&lt;/h5&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;rkdeveloptool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ld&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;DevNo=1    Vid=0x2207,Pid=0x350a,LocationID=104    Maskrom&lt;/code&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;rkdeveloptool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rk356x_spl_loader_ddr1056_v1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;06.110&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;
&lt;span class="n"&gt;rkdeveloptool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;radxa&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cm3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;focal&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;arm64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;20221101&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;0254&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gpt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xz&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Reboot CM3&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;rkdeveloptool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rd&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;Windows Flashing&lt;/h5&gt;
&lt;p&gt;&lt;img alt="" src="https://tinycomputers.io/images/RKDevTool-complete-english.png.webp"&gt;&lt;/p&gt;
&lt;p&gt;You will need to specify a &lt;code&gt;loader&lt;/code&gt; as well as an &lt;code&gt;image&lt;/code&gt;.  In the table on the left side of the screenshot, click in right-most the rectangle of the first row.  This should bring up a file dialog box.  Navigate to where you downloaded &lt;code&gt;rk356x_spl_loader_ddr1056_v1.06.110.bin&lt;/code&gt;. Likewise for the second row (&lt;code&gt;image&lt;/code&gt;), navigate to where you downloaded &lt;code&gt;radxa-cm3-io-ubuntu-focal-server-arm64-20221101-0254-gpt.img.xz&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Click &lt;code&gt;Run&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This operation will take several minutes; be patient.&lt;/p&gt;
&lt;p&gt;The CM3 should automatically boot and bring you to a login prompt.  &lt;strong&gt;The default user is &lt;code&gt;rock&lt;/code&gt; with a password of &lt;code&gt;rock&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;iframe width="100%" height="480" src="https://www.youtube-nocookie.com/embed/49zG4EZiJKo" title="Radxa CM3 Linux Booting" frameborder="0" loading="lazy" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;strong&gt;The Radxa CM3 can be purchased from &lt;a href="https://baud.rs/EhCt5f"&gt;ALLNET.China&lt;/a&gt; for about $70 excluding shipping.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Banana Pi CM4&lt;/h3&gt;
&lt;div style="width: 100%; text-align: center; padding-bottom: 1em;"&gt;
    &lt;img src="https://tinycomputers.io/images/BPi-CM4-IMG_0754.png" style="width:45%; text-align:center; float:center; padding: 2px;" loading="lazy"&gt;&lt;br&gt;
Banana Pi CM4, 4GB memory
&lt;/div&gt;
&lt;p&gt;Looking at the Geekbench table (above), you will notice at the Banana Pi CM4 seriously outperforms the other three modules I have tested.  It is also the most expensive module - including shipping - it was about $120.  This was not an inflated Raspberry Pi price, this is directly from &lt;a href="https://baud.rs/NY3ajd"&gt;Sinovoip&lt;/a&gt;, the company behind the Banana Pi family of single board computers.  But, before you start searching for where you can buy one, as of the time of this writing, I purchased Sinovoip's last module that they had allocated to developers and testers; and they have not started to commercially produce any, yet.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://tinycomputers.io/images/sinovoip-banana-pi-correspondence.png.webp" style="zoom:45%;" loading="lazy"&gt;&lt;/p&gt;
&lt;p&gt;Core Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4 x ARM Cortex-A73 CPU cores&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2 x ARM Cortex-A53 CPU cores&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4GB of memory&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Like the Radxa CM3, operating system software is very limited.  For very detail instructions on install an operating system, in this case Android, check out &lt;a href="https://baud.rs/V3k6T1"&gt;https://wiki.banana-pi.org/Getting_Started_with_CM4&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Installing and boot Linux is fairly straight forward. You can either boot from an SD card, or you can choose to boot from the on-board eMMC module. That said, nonetheless, you will need an SD card.&lt;/p&gt;
&lt;p&gt;Head over to &lt;a href="https://baud.rs/mTiyTj"&gt;https://wiki.banana-pi.org/Banana_Pi_BPI-M2S#Linux&lt;/a&gt;, and you find a similar table of distributions images:&lt;/p&gt;
&lt;h5&gt;Distributions&lt;/h5&gt;
&lt;h6&gt;Ubuntu&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;2022-06-20-ubuntu-20.04-mate-desktop-bpi-m2s-aarch64-sd-emmc.img.zip
  Baidu Cloud: https://pan.baidu.com/s/1kRukI-H-xliNqIqVacXWRw?pwd=8888 (pincode:8888)
  Google drive: https://drive.google.com/file/d/1P2YQUwdrREdiwidr8YtCvOdMmwLPerVu/view&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;S3 Mirror: https://s3.us-east-1.amazonaws.com/cdn.tinycomputers.io/banana-pi-m2s-cm4-linux/2022-06-20-ubuntu-20.04-mate-desktop-bpi-m2s-aarch64-sd-emmc.img.zip
  MD5:2945f225eadba1b350cd49f47817c0cd&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2022-06-20-ubuntu-20.04-server-bpi-m2s-aarch64-sd-emmc.img.zip
  Baidu Cloud:https://pan.baidu.com/s/1UoYR0k9YH9SE_A-MpqZ2fg?pwd=8888 (pincode: 8888)
  Google Drive:https://drive.google.com/file/d/1y0DUVDhLyhw_C7p6SD2q1EjOZLEV_c_w/view
  S3 Mirror: https://s3.us-east-1.amazonaws.com/cdn.tinycomputers.io/banana-pi-m2s-cm4-linux/2022-06-20-ubuntu-20.04-server-bpi-m2s-aarch64-sd-emmc.img.zip
  MD5:9b17a00cbc17c46e414a906e659e7ca2&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;Debian&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;2022-06-20-debian-10-buster-bpi-m2s-aarch64-sd-emmc.img.zip
  Baidu Cloud: https://pan.baidu.com/s/1TTsdyy5I7HLWS_Tptg7r2w?pwd=8888 (pincode: 8888)
  Google Drive:https://drive.google.com/file/d/116ZydpggYpZ1WoSyVsc4QuchdIa3vGyI/view&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;S3 Mirror: https://s3.us-east-1.amazonaws.com/cdn.tinycomputers.io/banana-pi-m2s-cm4-linux/2022-06-20-debian-10-buster-bpi-m2s-aarch64-sd-emmc.img.zip
  MD5:9d39558ad37e5da47d7d144c8afec45e&lt;/p&gt;
&lt;h5&gt;Flashing/Writing Images&lt;/h5&gt;
&lt;p&gt;Let's assume we are using &lt;code&gt;2022-06-20-debian-10-buster-bpi-m2s-aarch64-sd-emmc.img.zip&lt;/code&gt;; the handiest thing to start out with is making a bootable sd card.  On your laptop or desktop computer, and assuming you are using a flavor Linux, issue the following at a command line:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nv"&gt;unzip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2022&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;06&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;debian&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;buster&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;bpi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;m2s&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;aarch64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;sd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;emmc&lt;/span&gt;.&lt;span class="nv"&gt;img&lt;/span&gt;.&lt;span class="nv"&gt;zip&lt;/span&gt;
&lt;span class="nv"&gt;dd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2022&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;06&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;debian&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;buster&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;bpi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;m2s&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;aarch64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;sd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;emmc&lt;/span&gt;.&lt;span class="nv"&gt;img&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="nv"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;sda0&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Change &lt;code&gt;sda0&lt;/code&gt; to the appropriate device.&lt;/p&gt;
&lt;p&gt;Instead the sd card into the IO board, and apply power to the board.  That's it for booting from an SD card. In order to boot from eMMC, you will need to follow the above steps, but instead of downloading and writing the image from your laptop or desktop, you will be using the BPI CM4 instead.  Download and unzip the image file:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nv"&gt;unzip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2022&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;06&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;debian&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;buster&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;bpi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;m2s&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;aarch64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;sd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;emmc&lt;/span&gt;.&lt;span class="nv"&gt;img&lt;/span&gt;.&lt;span class="nv"&gt;zip&lt;/span&gt;
&lt;span class="nv"&gt;dd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2022&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;06&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;debian&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;buster&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;bpi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;m2s&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;aarch64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;sd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;emmc&lt;/span&gt;.&lt;span class="nv"&gt;img&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="nv"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;mmcblk0&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now, power down the IO board, and remove the SD card.  Apply power once more, and you should be booting up from eMMC.&lt;/p&gt;
&lt;p&gt;As a side note, when I first booted my CM4, it began an unattended system update and that took a while to complete.  It will be best if you let it finish this before doing any serious usage.  Just use &lt;code&gt;top&lt;/code&gt; to check on the running processes.&lt;/p&gt;
&lt;h5&gt;Other bits of information:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://baud.rs/IOB5X4"&gt;Forum posting and associated threads&lt;/a&gt; for discussion of BPI CM4 and its release.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://baud.rs/oYrAfm"&gt;Linux Board Support Package (BSP)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;As of this writing, the Banana Pi CM4 is currently unavailable for general purchase.&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;Final Thoughts&lt;/h4&gt;
&lt;p&gt;If you are needing to operate in a familiar environment, you will want to go with the Raspberry Pi CM4.  As of this writing, you will pay a premium - a 100% markup or more.  You can get high priced CM4s from &lt;a href="https://baud.rs/huy6c3"&gt;eBay&lt;/a&gt; or &lt;a href="https://baud.rs/voR4vd"&gt;Amazon&lt;/a&gt;.  If you need performance, and are not needing to use crazy shields and hats, you will want to go with the Banana Pi CM4, but the catch is, it has not been released yet.  It is hands down the most robust compute module. If you are looking to use bleed-edge Linux and want a bit of a challenge, the Pine64 SOQuartz module is for you.  And that leaves the Radxa CM3.  If you willing to use the Rockchip tools to flash the eMMC module, and you are not concerned with software compatibility for shields and hats and you want similar performance to an RPi CM4, the Radxa might be a good choice.&lt;/p&gt;
&lt;script type="text/javascript"&gt;
amzn_assoc_placement = "adunit0";
amzn_assoc_tracking_id = "tinycompute05-20";
amzn_assoc_ad_mode = "search";
amzn_assoc_ad_type = "smart";
amzn_assoc_marketplace = "amazon";
amzn_assoc_region = "US";
amzn_assoc_title = "Affiliate Links";
amzn_assoc_default_search_phrase = "raspberry pi compute module";
amzn_assoc_default_category = "All";
amzn_assoc_linkid = "5fc86499de521ab9aacd2a8118914cfd";
amzn_assoc_rows = "4";
amzn_assoc_design = "text_links";
&lt;/script&gt;
&lt;script src="//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US"&gt;&lt;/script&gt;</description><category>banana pi cm4</category><category>compute module</category><category>pine64</category><category>pine64 soquartz</category><category>radxa cm3</category><category>raspberry pi</category><category>raspberry pi cm4</category><guid>https://tinycomputers.io/posts/raspberry-pi-cm4-and-pin-compatible-modules.html</guid><pubDate>Thu, 22 Dec 2022 16:30:00 GMT</pubDate></item><item><title>Pine64 Quartz64 A - Running Docker</title><link>https://tinycomputers.io/posts/pine64-quartz64-a-running-docker.html?utm_source=feed&amp;utm_medium=rss&amp;utm_campaign=rss</link><dc:creator>A.C. Jokela</dc:creator><description>&lt;h3&gt;Getting Started&lt;/h3&gt;
&lt;p&gt;Getting &lt;a href="https://baud.rs/cNLdfp"&gt;docker&lt;/a&gt; installed and running on a Pine64 Quartz64 A is relatively straightforward once you have found a disk image that has a few necessary things.  We have a number of artisan-crafted operating systems.  Most are Debian/Ubuntu feeling; there is &lt;a href="https://baud.rs/C90mkB"&gt;DietPi&lt;/a&gt; which has a very nice look and feel - minimalist creation.  There is also &lt;a href="https://baud.rs/YHvnIM"&gt;Plebian Linux&lt;/a&gt;, which is maintained by &lt;a href="https://baud.rs/TRsCK2"&gt;CounterPillow&lt;/a&gt;. It is very bleeding edge for its development stage.  It feels less like a Linux system and more like a quirky &lt;a href="https://baud.rs/0xmpRk"&gt;NetBSD&lt;/a&gt; system. But, will not be using either of those; we will be using &lt;a href="https://baud.rs/91P8l3"&gt;Armbian&lt;/a&gt;. There are community maintained disk images but there is one problem: as of the time this post has been written, Dec 12, 2022, the images available from Armbian on Github do not have functioning ethernet.  There is a paragraph or so on Pine64's &lt;a href="https://baud.rs/BuoiM9"&gt;wiki&lt;/a&gt; about network connectivity, but I am not certain if the issue I am experiencing is related to that or if it is just a red herring.&lt;/p&gt;
&lt;p&gt;Even though DietPi and Plebian have that familiar Debian/Ubuntu smell, each has its own issue that makes us drive toward Armbian.  &lt;/p&gt;
&lt;p&gt;First, DietPi.  I love the minimalist feel but attempting to run &lt;code&gt;sudo apt install docker-ce&lt;/code&gt;results in &lt;code&gt;dpkg&lt;/code&gt; failing for some unclear reason.  I really wanted something that should easily follow instructions that are found just about anywhere on internet for installing Docker on a Debian/Ubuntu system -- I did not want to take time trying to figure what was causing this error.&lt;/p&gt;
&lt;p&gt;Second, Plebian. Plebian feels like NetBSD from early 2000s.  It's rough around the edges and according its maintainer, should not be used in any capacity other than trying to help develop the distribution.  The main issue that I found is it is based upon &lt;a href="https://baud.rs/wB1eOU"&gt;Debian bookworm&lt;/a&gt;, also known as &lt;em&gt;testing&lt;/em&gt;. Docker does not have readily available Debian packages for bookworm.  Bookworm is too new.  I could have taken the time to figure out how to handcraft an install, but that is not what I am looking to do.&lt;/p&gt;
&lt;p&gt;If you dig deep enough into the world of niche internet forums related to Pine64, Quartz64 or single board computers, you may find your way to &lt;a href="https://baud.rs/Y98KSY"&gt;Quartz64 Model A installation help&lt;/a&gt; --&amp;gt;&lt;/p&gt;
&lt;div class="audio-widget"&gt;
&lt;div class="audio-widget-header"&gt;
&lt;span class="audio-widget-icon"&gt;🎧&lt;/span&gt;
&lt;span class="audio-widget-label"&gt;Listen to this article&lt;/span&gt;
&lt;/div&gt;
&lt;audio controls preload="metadata"&gt;
&lt;source src="https://tinycomputers.io/pine64-quartz64-a-running-docker_tts.mp3" type="audio/mpeg"&gt;
&lt;/source&gt;&lt;/audio&gt;
&lt;div class="audio-widget-footer"&gt;2 min · AI-generated narration&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;brings you to &lt;a href="https://baud.rs/DM9S8L"&gt;this forum post&lt;/a&gt; on Armbian's main forum site.  Scroll down, and you find another link, this time to use &lt;a href="https://baud.rs/XKJUjo"&gt;balbes150's Armbian's file storage&lt;/a&gt; (&lt;a href="https://baud.rs/2c7TfP"&gt;mirror&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I selected a &lt;a href="https://baud.rs/M6rl5z"&gt;Jammy distribution image&lt;/a&gt;. Why? Because Docker has packages readily available for Jammy.&lt;/p&gt;
&lt;h3&gt;Write a Disk Image&lt;/h3&gt;
&lt;p&gt;There are literally thousands of examples of how to write a disk image to an SD card or eMMC module; everyone's setup maybe a different from others.  If you are GUI-inclined, I would recommend &lt;a href="https://baud.rs/aD1DsC"&gt;balena Etcher&lt;/a&gt;. One of the only issues I can see if it will not run on Arm-based computers, it is only available for x86|64.&lt;/p&gt;
&lt;p&gt;If you are more command line inclined, you can use the program &lt;code&gt;dd&lt;/code&gt;.  &lt;a href="https://baud.rs/PG4KMG"&gt;Here is one&lt;/a&gt; that is fairly indepth look at using &lt;code&gt;dd&lt;/code&gt;.  If you are impatient and know what the name is of your device, something like the following:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;xzcat Armbian-Quartz64-jammy-edge.img.xz | dd of=/dev/mmcblk1 status=progress
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This assumes many things, but as a skilled and sophisticated Linux/UNIX user, you should not have any issues writing an image to a media type.&lt;/p&gt;
&lt;h3&gt;&lt;img alt="dd-writing-image-to-media" src="https://tinycomputers.io/images/dd-writing-image-to-media.png.webp"&gt;&lt;/h3&gt;
&lt;h3&gt;Installing Docker&lt;/h3&gt;
&lt;p&gt;The following is a summarization of &lt;a href="https://baud.rs/pLkAux"&gt;Install Docker Engine on Ubuntu&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Cleanup Old Versions&lt;/h4&gt;
&lt;p&gt;Previous versions of &lt;code&gt;docker&lt;/code&gt; were called a few things; let's remove the cruft.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;remove&lt;span class="w"&gt; &lt;/span&gt;docker&lt;span class="w"&gt; &lt;/span&gt;docker-engine&lt;span class="w"&gt; &lt;/span&gt;docker.io&lt;span class="w"&gt; &lt;/span&gt;containerd&lt;span class="w"&gt; &lt;/span&gt;runc
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;With those things removed, we will move onto setting a few things up to use Docker's package repository.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;update
&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;ca-certificates&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;curl&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;gnupg&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;lsb-release
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add Docker's GPG key (this makes it so you are less likely to get a compromised docker patch from Docker):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;/etc/apt/keyrings
&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-fsSL&lt;span class="w"&gt; &lt;/span&gt;https://download.docker.com/linux/ubuntu/gpg&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;gpg&lt;span class="w"&gt; &lt;/span&gt;--dearmor&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;/etc/apt/keyrings/docker.gpg
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Setup the repository:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"deb [arch=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;dpkg&lt;span class="w"&gt; &lt;/span&gt;--print-architecture&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; signed-by=/etc/apt/keyrings/docker.gpg] \    &lt;/span&gt;
&lt;span class="s2"&gt;      https://download.docker.com/linux/ubuntu \&lt;/span&gt;
&lt;span class="s2"&gt;      &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;lsb_release&lt;span class="w"&gt; &lt;/span&gt;-cs&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; stable"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tee&lt;span class="w"&gt; &lt;/span&gt;/etc/apt/sources.list.d/docker.list&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/dev/null
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This settings things up for us to be able to pull down officials packages from Docker. Let's refresh our available packages and install Docker.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;update
$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;docker-ce&lt;span class="w"&gt; &lt;/span&gt;docker-ce-cli&lt;span class="w"&gt; &lt;/span&gt;containerd.io&lt;span class="w"&gt; &lt;/span&gt;docker-compose-plugin
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Docker should be running; let's test it.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;docker&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;hello-world
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="success!" src="https://tinycomputers.io/images/pine64-quartz64-A-docker-2022-12-12%2017-28-15.png.webp"&gt;&lt;/p&gt;</description><category>docker</category><category>pine64</category><category>quartz64</category><guid>https://tinycomputers.io/posts/pine64-quartz64-a-running-docker.html</guid><pubDate>Mon, 12 Dec 2022 23:40:49 GMT</pubDate></item></channel></rss>