MILK-V Jupiter review – A RISC-V mini-ITX motherboard and PC tested with Ubuntu-based Bianbu OS

In this review or preview of the the Shenzhen Milk-V Jupiter RISC-V mini-ITX motherboard, I’ll assemble the motherboard into a mini-ITX chassis, before installing the Ubuntu 23.10 Mantic-based Bianbu OS optimized for RISC-V platforms, and testing the device to see how much progress has been done on RISC-V since I tested the StarFive VisionFive 2 SBC with Debian 12 about 18 months ago.

In the first part of the review, we checked out the Radxa ROCK 5 ITX (Rockchip RK3588 Arm) and Jupiter (SpacemIT K1 RISC-V) mini-ITX motherboards with specifications and unboxing, and the Auriga 6-Bay NAS mini-ITX chassis used in this review. I planned to start with the Radxa ROCK 5 ITX, but due to logistics and technical issues, I went ahead testing the RISC-V motherboard first.

Installing Bianbu OS to the Jupiter RISC-V motherboard

The board does not come with storage, so no operating system is installed. So I will install an M.2 SSD on the board and follow the instructions on the wiki to flash the Ubuntu-based Bianbu OS. SpacemIT provides the Titanflasher utility for both Windows and Linux operating systems, and at the time of the review the user interface was only available in Chinese, but an English version will eventually be released.

Titantools SpaceMIT K1 M1 flasherSince my laptop runs Ubuntu 22.04, I downloaded titantools_for_linux-1.0.35-beta-AppImage.zip and when we run the utility after unzipped it, the interface is indeed in Chinese.

SpaceMIT TitanTools Flasher Software

We now need to download BianBu OS as noted in the wiki with the release files available on GitHub.

Bianbu OS RISC V image

It was very confusing at first because there are multiple files out of four releases (Desktop, Kodbox, Minimal, or NAS). I eventually noted the sentence “go to the resource download page to download the system image package with the suffix .zip (not .img.zip)”

The documentation is relatively poor, and it ends up we have to download two files: milkv-jupiter-bianbu-23.10-desktop-k1-v1.0.9-release-2024-0719.zip.001 and milkv-jupiter-bianbu-23.10-desktop-k1-v1.0.9-release-2024-0719.zip.002 if we want to install the desktop version of the OS.

I also have to install 7zip-full and uncompress the files:


After this command, we are left with the “milkv-jupiter-bianbu-23.10-desktop-k1-v1.0.9-release-2024-0719.zip” file that is 2.5GB in size.

We have all the files we need to flash Bianbu OS, so we can prepare the Jupiter mini-iTX board, by inserting the two WiFi antennas provided with the kit, and our own 256GB M.2 NVMe SSD. We’ll also need to find a 12V power and a 5.5/2.5mm jack adapter that I got from a laptop DC jack kit I purchased years ago.

Jupiter RISC-V mini-ITX motherboard SSD Antennas recovery button

Now we need to press the recovery button as shown in the red circle above, connect the power, and release the recovery button to enter bootloader/flashing mode. The kernel log should show a DFU device.


We can now go back to the Titanflasher utility, click on the second item in the left menu, and click on the “scan device” button. The “1-4 VIPLPID=0x361c:0x1001” board should show up.

titanflasher scan device

After I clicked on the second button to select the zip file, I got the following message:

Titanflasher not enough space

Not being able to read Chinese, I first thought it was complaining about the file being over 1.5GB, but Google Translate revealed it was actually complaining that my laptop’s drive was almost full. I clicked on the left button (meaning Cancel), deleted a few larger files on my computer, and could load the file properly.

Jupiter mini-ITX RISC-V SBC load image

So I clicked on the wide blue button to start the flashing process and it started well…

MILK-V Jupiter OS Flashing in Progress… but quickly failed after a few seconds:

Jupiter OS flashing fail

After several trials and errors, I moved the slider icon and selected all partitions.

TitanFlasher Select Partitions

I attempted flashing again, and it was successful this time around… But I’m not sure if it was what I just did above, or just pure luck…

SpaceMIT TitanTools Bianbu OS success

We can now connect the RISC-V mini-ITX motherboard to a display, wireless mouse and wireless keyboard to get started, and Bianbu 1.0.9 boots fine.

Bianbu OS setup wizard

Here’s what Bianbu’s desktop environment looks like:

Bianbu desktop environment

I had no problem connecting to 5GHz WiFi 6 and browsing the web.

Jupiter SBC Bianbu 1.0.9 Chromium

I was soon offered an update to Bianbu 1.0.12 that must have been released after I downloaded Bianbu 1.0.9 and installed it.

Bianbu 1.0.12 upgrade

It started well, but after a while, I saw the Distribution Upgrade window revert to Bianbu 1.0.9. I gave it another try, but I got the same results. The company eventually told me:

We are still verifying the automatic upgrade function of the system. We recommend that you do not upgrade automatically for now.

I’m not going through the flashing process again and will review the system with Bianbu 1.0.9.

RISC-V computer assembly with Jupiter mini-ITX board and Auriga chassis

Now that we’ve made sure the RISC-V mini-ITX motherboard can run Linux, it’s time for assembly. I thought I would have to skip testing the PCIe slot, but I remembered I have an old PC with an equally old NVIDIA GeForce GT210 graphics card. The first step is to remove all four panels from the enclosure for easy access to the cables and mounting threads.

Mini-ITX case PCIe graphics card

We can install the mini-ITX board with its rear panel plate.  Note the two precut holes on the left side designed for SMA antennas. More on that later. I also removed the cover for the PCIe slot.

Jupiter rear panel panel installation

We can secure the motherboard for four of the screws provided with the mini-ITX chassis.

Jupiter mini-ITX RISC-V motherboard NAS chassis installation

You can see the signal from the WiFi antennas on the side of the motherboard will be blocked, or at least the signal strength diminished, once we install the metal plate. So that’s obviously not the right to install WiFi in this enclosure, and SMA antennas should be attached to the rear panel with IPEX cables connected to the motherboard.

The next steps will involve connecting several cables. The Jupiter mini-ITX does not directly support SATA drives, but it has SATA power connectors and could support a PCIe card with SATA connectors. So I won’t use SATA drives at all here, but I still connected the two SATA port cables to the two boards – with 3 SATA ports each – inside the chassis.

Auriga 6-Bay NAS mini-ITX chassis SATA power cables

I then connected the internal USB 3.0 cable (white with a blue connector) to the motherboard.

USB 3.0 cable Jupiter mini-ITX motherboard

Next up was the 24-pin ATX cable, the power switch, and the power LED -/+ signals.

ATX power cable Power switch LED wires

I followed the instructions and pinout diagram from the wiki as shown below.

Jupiter Front Panel connection diagramThe two remaining cables are for the GPU. My graphics card does not need this, so I could just insert it into the PCIe slot as shown below. (Note the photo below was taken before connecting the other cables, but I quickly realized I should have connected the USB 3.0 cable before connecting the graphics card…)

RISC-V mini-ITX motherboard PCIe graphics card

This is what the rear panel looks like after securing the PCIe card.

RISC-V Computer PCIe graphics card

We have some more cable designed for the four fans… The Jupiter does not have any fan connectors, but I still installed the fans for future reviews.

fan cables

Auriga mini-ITX case fans installation

That also means if you were to create a NAS with hard drives using the Jupiter with this case, the cooling fans would not work, or you’d have to hack something for cooling such as connecting them to a 12V source.

The assembly is not complete. I gave it a try to confirm the system could be powered normally, before putting the four panels into place and completing the assembly.

Milk-V Jupiter RISC-V computer review with mini-ITX motherboard

Auriga mini-ITX case RISC-V motherboard rear panel

That’s it. Our RISC-V computer is now up and running. Finally!

Bianbu system information

Let’s have a quick look at the system information. That’s what we get on the desktop.

Jupiter RISC-V computer Bianbu 1.0.9The system features an octa-core SpacemIT X60 SoC with PowerVR B-Series BXE-2-32 GPU, 15.5 GB RAM (available to Linux), 256.1 GB storage, and Bianby 1.0.9 64-bit with Wayland windowing system and Linux 6.1.15.

But we can find out more in the terminal:



My system is actually using the M1 instead of the K1 processor. Both are the same, but the M1 is supposed to run at a higher 1.8 GHz frequency. A lot of peripherals are detected, so it’s good news, including my NVIDIA Geforce 210 graphics card. But sadly, after testing its HDMI output, I discovered it’s not working, and you’ll notice no drivers have been selected. The company also told me that “The graphics card part needs some patches, we still need some time to test”.  CPU temperature is not reported either. Shenzhen Milk-V told me to use s-tui, but unsurprisingly, it does not help and 0C is shown there.

[Update: I should have enlarged the window, as the temperature indeed shows on the left panel

SpacemIT CPU temperature s-tui

]

Jupiter Mini-ITX motherboard features testing in Bianbu/Ubuntu

When I tested the StarFive VisionFive 2 last year, I had to test it as a headless system, but the OS would crash when I connected a display… The good news, as we can see from the photo above is that Jupiter’s HDMI output is working fine. I’ve tested other features to see how much progress has been made in the last 18 months when it comes to RISC-V hardware running Linux.

I’ll share the details of the tests below, but here are the results first. I highlighted things that look pretty bad in red and the items that can be improved in orange :

  • GPU – OK. Tested with glmark2-es2-wayland – Score: 453 points
  • Video Playback
    • YouTube Full HD @ 60 FPS in Chromium (VP9) – Unwatchable. Frequently stuck in loading mode despite buffer with 30 seconds of data.
    • YouTube 480p (854×480) @ 60 FPS Chromium (VP9) – OK. At higher resolutions, the video will pause to load from time to time, again unrelated to buffer health.
    • Big Buck Bunny 1080p60 (H.264) with ffplay (FFMpeg) – White image for 30 seconds with audio, then the video play in slow motion, and audio and video are out of sync
  • Storage – SSD – OK. Speed: 708MB/s reads; 731MB/s writes; Note: SSD rating: R: 2,050 MB/s; W: 1,000 MB/s, but that’s fine since it’s over a PCIe 2.0 x2 interface;
  • HDMI
    • Video – OK. Test at 1920×1080 resolution
    • Audio – OK. Tested with YouTube video and ffplay
  • Audio jack
    • Output – OK. Tested with YouTube video and Bluetooth.
    • Input – Not Tested, but it shows up as “Analog Input – snd-es8316” in the Settings.
  • Networking
    • Ethernet #1 – OK – iperf3 results: DL: 942 Mbps; UL: 942 Mbps; Full duplex: 727 Mbps/694 Mbps
    • Ethernet #2 – OK – iperf3 results: DL: 942 Mbps; UL: 941 Mbps; Full duplex: 671 Mbps/729 Mbps
    • WiFi 6 – OK. iperf3 results: DL: 499 Mbps; UL: 462 Mbps.
    • Bluetooth – OK. Tested with Bluetooth audio through speakers connected to the audio jack.
  • USB
    • USB 2.0 ports: OK – Tested with RF dongles for keyboard and mouse
    • USB 3.0 ports (Top USB 3.0 port connected via internal USB 3.0 cable, and 2x USB 3.0 ports on rear panel)
      • ORICO NVMe enclosure – Fail (Green LED on, but the drive does not show up in kernel log or lsblk command)
      • SEAGATE USB 3.0 hard drive – Fail (the drive does not show up in kernel log or lsblk command)
      • RF dongle for keyboard or mouse – OK
    • USB 2.0 OTG port – OK tested when flashing firmware at the beginning of the review.
  • PCIe slot – NVIDIA GeForce 210 graphics card detected for both audio and video
    • But no compatible driver loaded/found. (patch  needed)
  • Misc
    • Power button – Yes. The board will first start automatically when applying power, but pressing the power button once will bring the Power Off popup, and if the system is turned off, we can power it on again
    • LED on chassis – Not working (always off). Not colored, because I’m not sure where my case has an issue or the board…

I did not expect 3D accelerated graphics to work, but that’s indeed the case. A lot of improvements have been made, but it still can’t be used as a daily driver, with video playback issues, the PCIe graphics card not working, and the two USB storage devices I tested were not detected at all. Networking is fine, although gigabit Ethernet full-duplex connectivity could be improved. I was surprised by the WiFi results considering the antennas are trapped in a metal case. But the router is just about 1 meter away and the wifi signal can probably “leak” through the openings for cooling on the rear panel too…

Here are the results from the tests for reference.

GPU testing with glmark2-es2-wayland


RISC-V glmark2-es2 wayland

Note the iozone3 RISC-V package is supposed to be in the multiverse repo on Ubuntu, but somehow it can’t be installed on Ubuntu, so I built it from source.

iozone3 test results for the SSD:


Networking results.

Here’s the iperf3 full duplex on the first Ethernet port for reference:


WiFi 6 tested with iperf3

  • Download:

  • Upload:

SpacemIT K1/M1 benchmarks

I’m not going to run many extra benchmarks considering the software status of the board, but let’s go with Thomas Kaiser’s sbc-bench.sh script:


A score of 7270 MIPS is fairly higher than a Raspberry Pi 4 (about 5400), but quite lower than a Raspberry Pi 5 (10930) at stock frequencies. At 29807.96k hash per second, AES is clearly not implemented, as it’s even slower than in the Raspberry Pi 4 which lacks the necessary instructions.

The latest official benchmarks will be the preview version of Geekbench 6.3.0 for the RISC-V architecture:


Jupiter RISC-V Geekbench results

The full results can be found on the Geekbench website. Note those numbers can’t be used to compare the performance against other systems due to the current software situation. But they may help idendigy which parts need to be optimized.

I’d also like to share a final test, because the system still feels sluggish, especially when launching programs even though we’re using an NVMe SSD. For example, Chromium takes 8 to 10 seconds to open. So it feels more like a Raspberry Pi 2 with a microSD card than a Raspberry Pi 4 with a fast SSD with the current Bianbu software. I’m sure it will improve over time, as the hardware is more capable than that.

YouTube video player

Power consumption

I’ll also through some idle power consumption numbers. First with the motherboard powered through its 12V DC jack (with HDMI, and 2x USB for keyboard and mouse):

  • Idle after first boot – 4.5 Watts
  • Idle after WiFi connected – 4.7 Watts

Getting the board into a chassis with a standard PSU and graphics card will increase the power consumption quite a bit:

  • Power off – 4.6 – 4.7 Watts
  • Idle (HDMI, Ethernet, USB mouse/keyboard/GPU) – 17.8 – 18.4 Watts
  • Idle (HDMI, Ethernet, USB mouse/keyboard/no GPU) – 8.9 Watts

Conclusion

It was an interesting experience building my first mini-ITX-based computer. The Milk-V Jupiter is a relatively powerful RISC-V mini-ITX motherboard, and there’s been some good progress on the software side compared to other systems I reviewed a while ago. HDMI output and audio are working fine, 3D accelerated graphics support is properly implemented, and many of the features of the board are working without issues.

But it still can’t be used as a daily driver, because Bianbu 1.0.9 is still sluggish on the RISC-V motherboard, hardware video decoding is not working, and I could only play YouTube videos reliably at 480p resolution, the two USB storage devices I tried failed to be recognized by the system, my PCIe graphics card was detected, but can’t be used as the software is not implemented yet. There are also a few smaller issues like CPU temperature not being reported, automatic package upgrade is not enabled, support for the AES crypto engine is not implemented, and probably other problems I missed in this review.

I’d like to thank Shenzhen Milk-V and Radxa for sending the Jupiter RISC-V mini-ITX motherboard and the Auriga 6-bay NAS chassis for review. The Jupiter RISC-V motherboard can be found on Arace for $59.99 and up (but out of stock right now), the Auriga chassis goes for about $100 on Aliexpress, and the 350W PSU used in this review for about $100 on Aliexpress.

Share this:
FacebookTwitterHacker NewsSlashdotRedditLinkedInPinterestFlipboardMeWeLineEmailShare

Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress

ROCK 5 ITX Rockchip RK3588 mini-ITX motherboard

22 Replies to “MILK-V Jupiter review – A RISC-V mini-ITX motherboard and PC tested with Ubuntu-based Bianbu OS”

    1. GhostWrite is specific to T-Head’s XuanTie family (C906, C908, C910, C920…) cores.

      Of course, that’s not to say they don’t have their own yet-to-be-discovered issues of lesser or similar severity like the many x86 and ARM SoCs from recent years that ended up with costly mitigations or worse… But that’s a topic for a follow-up paper rather than a benchmark 😀

      1. Thanks for that.

        For some reason I thought they were T-Head cores, but having done some research, I see that they are SpacemiT’s own K60 cores.

  1. Currently only AMD PCIe graphics cards can work on non-x86 linux systems with an open source driver, most of the work is around Arm and no idea about RISC-V support.

    There is work on Intel ARC graphics cards as well but not as further along as Radeon.

    Nvidia GPU’s are not good in this area, their closed source driver is x86/Arm only.

    So I’d get a cheap low end Radeon RX GPU just for testing Arm or RISC-V in the future, avoid Nvidia.

    1. I thought Nouveau might work, but apparently not.

      The company answer also implies none of the graphics cards are working for now.

  2. “First with the motherboard powered through its 12V DC jack (with HDMI, and 2x USB for keyboard and mouse):
    Idle after first boot – 4.5 Watts
    Idle after WiFi connected – 4.7 Watts”

    That’s not bad at all. Any limitations when powering the machine that way (besides, of course, having to power any HDDs some other way)?

    “Getting the board into a chassis for a standard PSU will increase the power consumption quite a bit:
    Power off – 4.6 – 4.7 Watts
    Idle (HDMI, Ethernet, USB mouse/keyboard) – 17.8 – 18.4 Watts”

    Ouch, double ouch and triple ouch — that’sn over 3x the consumption when fed from 12V… any chance the PSU is at fault (too inefficient, too much parasitic drain, or whatever)?

    1. If I remember correctly those types of PSUs are not known for power efficiency. Also remember that I connected a PCIe graphics card, SATA power cables (but not drives), a USB 3.0 cables internally, so those must be taken into account.

      1. Thanks for the clarification. But SATA power cables, without any drives connected, should consume exactly zero, no? Same with USB3 cables as long as no device is connected at the other end.

        The GPU card could indeed explain a lot; I wrongly presumed you took it off for the power measurements since it couldn’t be used (due to lack of drivers). Did you took it off for the measurementa when powering the board over the 12V connector?

          1. Thanks for that info. IMO/IME the GPU alone could account for a good part of the difference in energy consumption, and the rest (as @back2future noted) would probably be the PSU.

            Any chance you could take a new measure, with the board powered by that PSU but with the GPU taken off?

          2. I’m disassembling the PC to install the Radxa ROCK 5 ITX.
            So I removed the graphics card and measured 8.9 Watts at idle with the Jupiter.

          3. Thanks! so the GPU, just for being connected and even without any use, was responsible for about 18.1-8.9= 9.2W, and the PSU for only about 8.9-4.65= 4 25W of the extra power consumption.

            Yeah, I think this makes it a good point for those concerned with power usage like me, to avoid PCIe-connected GPUs and use Occulink/USB4-connected eGPUs instead, preferably powered with a more efficient, dedicated power supply — that way the SBC can be powered with 12V for maximum efficiency, and the GPU can at least be disconnected/turned off when not needed.

            Of course, in this board’s specific case, it would need a PCIe-connected USB4 or Occulink card — which would add its own power consumption even when bit in use. Oh well…

      2. [ Can You show specifications or vendor or name plate (photo?) for that ATX PSU? (thx)

        ATX PSUs can have ~50-70% (maybe even less) for idling power that levels. ]

  3. Above, and also with my Bianbu on Banana Pi BPI-F3:

    inxi says “CPU: quad core Spacemit X60 (-MT MCP-)” … so “qua”, whereas it’s a 8-core CPU

    1. Yes, in the speed part there are clearly eight cores:

      1. After my bug report, the inxi author has solved it … in pinxi (perl-inxi?): now “8-core” is reported.

  4. Thanks for the s-tui remark to see the temperature: it works on my Banana Pi BPI-F3 … without real load at 47 Celsius.

    1. What is this s-tui thing? Do they fail to write some metadata snippets to be compliant with lm-sensors?

      1. sander@k1:~$ which s-tui
        /usr/bin/s-tui

        sander@k1:~$ file /usr/bin/s-tui
        /usr/bin/s-tui: Python script, ASCII text executable

        sander@k1:~$ head -20 /usr/bin/s-tui
        #!/usr/bin/python3
        # EASY-INSTALL-ENTRY-SCRIPT: ‘s-tui==1.1.4′,’console_scripts’,’s-tui’
        import re
        import sys

        # for compatibility with easy_install; see #2198
        __requires__ = ‘s-tui==1.1.4’

        try:
          from importlib.metadata import distribution
        except ImportError:
          try:
            from importlib_metadata import distribution
          except ImportError:
            from pkg_resources import load_entry_point

        def importlib_load_entry_point(spec, group, name):
          dist_name, _, _ = spec.partition(‘==’)
          matches = (
        sander@k1:~$ 

  5. ubuntu@ubuntu:~$ neofetch 
               .-/+oossssoo+/-.              ubuntu@ubuntu 
           :+ssssssssssssssssss+:          ————-                         
         -+ssssssssssssssssssyyssss+-        OS: Ubuntu 24.04.1 LTS riscv64        
       .ossssssssssssssssssdMMMNysssso.      Host: Milk-V(M1) Jupiter              
      /ssssssssssshdmmNNmmyNMMMMhssssss/     Kernel: 6.1.15                        
     +ssssssssshmydMMMMMMMNddddyssssssss+    Uptime: 3 mins                        
    /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/   Packages: 1244 (dpkg)                 
    .ssssssssdMMMNhsssssssssshNMMMdssssssss.  Shell: bash 5.2.21                    
    +sssshhhyNMMNyssssssssssssyNMMMysssssss+  Resolution: 1920×1080                 
    ossyNMMMNyMMhsssssssssssssshmmmhssssssso  Terminal: /dev/pts/0                  
    ossyNMMMNyMMhsssssssssssssshmmmhssssssso  CPU: Spacemit X60 (8) @ 1.800GHz      
    +sssshhhyNMMNyssssssssssssyNMMMysssssss+  Memory: 345MiB / 15881MiB             
    .ssssssssdMMMNhsssssssssshNMMMdssssssss.                                        
    /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/                                         
     +sssssssssdmydMMMMMMMMddddyssssssss+                                          
      /ssssssssssshdmNNNNmyNMMMMhssssss/                                           
       .ossssssssssssssssssdMMMNysssso.                                            
         -+sssssssssssssssssyyyssss+-                                              
           :+ssssssssssssssssss+:                                                
               .-/+oossssoo+/-.                                                    

    ubuntu@ubuntu:~$

  6. Hi, I tried the same steps, for me the flashing also only worked after selecting multiple Files in the Configure Partition File Dialogue.
    I used this image: milkv-jupiter-ubuntu-23.10-desktop-k1-v1.0.9-release-2024-0719.zip with titantools Version 2.0.1-Rc. I got this titantools version by a system prompt. And for this version there is a setting for english language!

    Selecting partition_flash.json (the middle one) did generally not work. Everything else is selectable, but selecting no, or only one File results in a black screen after flashing.
    Only after selecting both partition_2M.json and partition_universal.json, my flash succeeded and I was able to boot into Ubuntu! Hope this might help someone 🙂

    Here I posted an image of the resulting partitioning: https://community.milkv.io/t/titantool-disk-space-0gb/2677/9

Leave a Reply

Your email address will not be published. Required fields are marked *

Boardcon Rockchip RK3588S SBC with 8K, WiFI 6, 4G LTE, NVME SSD, HDMI 2.1...
Boardcon Rockchip RK3588S SBC with 8K, WiFI 6, 4G LTE, NVME SSD, HDMI 2.1...