Today I’m very excited to review the ODROID M1 board. I bought this board for a couple of reasons. The first was that it is one of the top rated (and the top rated) boards on my Pi Benchmarks storage benchmarking website.
The second reason was a recommendation from you guys on one of my articles to check out and review the board! This will be my very first ODROID board. Definitely let me know if there’s more boards I need to check out that I haven’t covered as I’m actively investigating alternative SBCs to the Raspberry Pi due to the ongoing shortage.
You will need a 12V 2A power adapter for the ODROID M1
The ODROID takes a CR2032 LiCB battery for the backup / system clock battery slot (not included with board)
Getting ODROID Images
One aspect of all these different SBCs I’ve been paying special attention to is the quality of the official images and how old the kernels in them are. Today will be no exception.
The official ODROID images are available here. For the M1 board it looked like this at time of writing:
Here we see Gnome Desktop, Gnome Desktop with NPU, ROS2-foxy and Server. These are all Ubuntu images but are meant for different setups. The “Server” one is meant for headless setups and has a minimal installation. You may also choose Android 11.
In a perfect world I would recommend the Gnome Desktop with NPU. What is a NPU you may say? It is a “Neural Processing Unit” and the M1 board does have one. Here’s what ODROID says about the onboard NPU:
Since Machine Learning has been a trend in this industry, there is a neural network processing unit (NPU) which can deliver up to 0.8 TOPS on the M1 single board computer. We could run various TensorFlow Lite and ONNX models on Ubuntu Linux OS.https://www.hardkernel.com/shop/odroid-m1-with-8gbyte-ram/
Unfortunately this image would not boot for me. It would just immediately cut to black when I chose to boot “Ubuntu 20.04”. Therefore I do not recommend the NPU image. This will presumably be fixed at some point but for now avoid the NPU image.
I then tried the regular desktop image without the NPU. This image worked. However it cannot upgrade to Ubuntu 22.04.1 successfully and will give crazy package errors (and ones that won’t be easily fixed by sudo apt install –fix-broken or dpkg –configure -a). Therefore I do not recommend the desktop image either even if you want a desktop.
I recommend you use the server image and upgrade it to 22.04.1 and then install the desktop with:
sudo apt install ubuntu-desktop
Only install the desktop after you’ve fully upgraded releases. That way you end up with both 22.04 and a desktop environment! Keep in mind that the NPU and desktop both can be enabled later. You will have a much easier time if you start with the “Server” image and upgrade it to 22.04.1 first and then install the desktop and configure the NPU.
BEST IMAGE: I have an alternative Ubuntu 22.04.1 image available here.
ODROID has a list of alternative images available here. These include
There was not a Armbian image available at time of writing but people are working on it. You can build the earlier versions yourself already but they have some issues that are being ironed out.
Imaging these is a little different than many other boards. You actually have several options. You can plug the ODROID M1 in via USB cable directly to a PC. You can directly image the SSD before mounting it in the ODROID (with a NVMe to USB enclosure like my ASUS ROG Strix M.2 NVMe enclosure*).
The way I did it for this article was to put the image onto a USB drive and boot the ODROID and image it from the shell. For this review I’ll be using my 1 TB Samsung 960 EVO M.2 NVMe drive. This is the exact same drive that I used in my Compute Module 4 PCIE 1x NVMe testing article which should make for a good comparison.
First you need to extract the image from the xz format so we get the raw image which ends with .img. If you are in Linux you can do this with:
xz -d ubuntu-20.04-server-odroidm1-20220531.img.xz
This gave me ubuntu-20.04-server-odroidm1-20220531.img. This is the file you want to copy to your USB drive. The server image is only about 1GB but the desktop images are much larger so keep that in mind for the size of your USB drive.
Installing the M.2 is completely straightfoward. You simply remove one screw, mount the drive and then use the screw you unscrewed to mount it to the board. We are going to power up the M1 with the USB drive plugged in.
First Startup / Final Imaging
Connect the M1 to a display for this part as we are going to go into the shell to image the M.2 drive. When you connect the power you will see this menu:
This is called the Petitloader bootloader. We are going to choose the very last option on the menu to enter the shell. Now we are going to image our SSD with the following command:
dd if=/usr/var/petitboot/mnt/dev/sda1/ubuntu-20.04-server-odroidm1-20220531.img of=/dev/nvme0n1 bs=4M sync
If you are having any trouble finding the USB drive (or another drive you are using to hold the image) use the command:
to get a full listing of all attached drives and paths to them. You should find that it’s pointing to /usr/var/petitboot/mnt/dev/sda1 as the USB drive mount path (mine was and I definitely used a regular USB flash drive).
Now type “exit” to go back to the main menu. Choose the “Rescan Devices” option and it should find your NVMe boot partition. Select “Ubuntu 20.04” and press enter and with any luck you should see the Ubuntu logo!
First Login / Updates
The credentials to sign in to the image are:
Username: odroid Password: odroid
There is also a root user that also has the password of odroid.
The first thing I recommend doing when signing in is updates:
sudo apt update && sudo apt upgrade -y sudo apt install ubuntu-release-upgrader-core pciutils -y sudo reboot
Now to upgrade releases open a terminal and use:
Provided you are using the “Server” image you should be able to successfully upgrade to 22.04.1!
Performance Testing / Benchmarking
After a couple of hours fighting with reimaging and getting a successful upgrade to 22.02.1 I was finally ready to benchmark the device!
The way to run the Pi Benchmarks storage benchmark is the following command:
sudo curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash
The result was a score of: 15,978. The full benchmark is available here: Pi Benchmarks – Benchmark #62071
Now this is a fantastic score (compared to any Pi 4 score and most other SBC scores) but it is disappointing. Why? Allow me to explain.
I have previously done NVMe testing using a PCIe 1x adapter on the Raspberry Pi Compute Module 4 (CM4). Using that setup (which is not nearly as nice as a PCIe 3.0 2-lane dedicated M.2 slot built directly into the board) I was able to achieve a score of 19,957. This is with the exact same 1 TB drive (literally the same module).
Something is bottlenecking it here. It could be firmware related, a bug, something with the kernel (which is why I updated to the latest 22.04.1 version to try to prevent something like this from happening) or many other possibilities.
Still not convinced it should be faster? I recently wrote an article detailing various Compute Module 4 boards and their capabilities. One of those boards is the Waveshare $38 Compute Module 4 board and it scored 15,925. Again, with the exact same drive. It beat the $38 Waveshare CM4 IO board* but only by a hair.
The Compute Module 4 setup remains the undisputed champion of performance in the SBC world for now.
Pros / Cons
- Onboard NVMe slot works as advertised
- Has Petitboot boot loader simplifying many boot operations and adding capabilities such as network booting
- Powerful CPU and GPU capable of excellent desktop performance
- Not overclockable
It should be performing faster than it is. I’m not sure what is holding it back. There’s likely improvements that can and will be made in software and firmware to improve this over time. I got this board pretty early in the lifecycle so maybe I didn’t do ODROID any favors by buying a board that hasn’t been out for years like some of their other popular boards. Nevertheless this was the experience and I’m honestly happy with the result and will keep using the board.
I would really like to see ODROID put a current Ubuntu 22.04.1 image on the “Downloads” page. I’m sure this is only a matter of time but I did not have a clean upgrade experience my first time and spent a couple of hours fighting with this. I strongly recommend following my recommended route of using the “Server” image and adding the desktop and other capabilities later.
I think the ODROID M1 is a good board for experienced SBC users given the current price of Pis. I would not recommend it for first timers because it’s not quite as polished of an experience as an Orange Pi or a Raspberry Pi yet. If you are generally comfortable with Linux and troubleshooting you will be just fine. For experienced users the power and performance you get with this board for the price is excellent.
I expect the M1 experience will improve over time and that many of the issues I encountered with the images in this article will likely disappear as soon as ODROID posts an updated image on their site. The M1 is not that old of a board compared to a lot of other boards in ODROID’s lineup. I definitely intend to try some of the other ones that are more established and expect I will not have as much trouble.
Using NVMe on the Pi 4 is kind of difficult and clunky without powered USB hubs and enclosures especially with higher capacities. Given that the ODROID M1 is literally cheaper than a 4 GB Pi 4 on Amazon there’s no question to me that it’s smarter to buy the ODROID M1 at the moment. It’s not as smooth of sailing as with the Pi though which is why I would choose another board for first timers (or wait until better and more stable images are available for the M1).
I’d like to try the eMMC slot. That’s one thing we didn’t cover today because I don’t have the right adapter board to connect a eMMC to it. I plan on getting this as the performance on eMMC with the M1 is supposed to be fantastic as well.
If any of you also have the M1 board and know any tricks to possibly optimize the performance that I can try let me know in the comments! This is literally my first ODROID experience and I just wanted to review the board and share what it was like using it and what the outcome was. I’m sure I will learn and share more tricks to get more out of these as I become more familiar with them!
Definitely check out my testing with a official Hardkernel eMMC using the M1
Check out my Orange Pi Zero 2 review here for a board that’s more approachable for beginners
If you want to see a really cheap headless board for under $10 that is the Orange Pi i96 Getting Started Guide
ASUS Tinker Boards are quite cheap right now at time of writing as well at roughly half the cost of a Pi