Notes for November 11-17

I have been taking a bit more care of myself–largely by forcing myself out of the house as much as possible, completely shutting off Teams every now and then (focus time doesn’t prevent people from messaging you, only calling, even if it does mute notifications) and, by and large, getting up (and going to bed) earlier.

I’ve lost 3Kg over the past few weeks, which should tell you something about how my return to work has been going.

I’ve also silently quit pretty much every single social media site in existence (the new iOS feature to “hide” apps and require Face ID to access them is pretty useful for that), although I did go and check if the few people I still follow on Twitter have moved to Bluesky already.

Right now, I’ve put almost everything on hold–unless it’s essential to work, relaxation or self-fulfillment, it’s just not happening. Having burned out more than once, I know the signs, and I was clearly already way too deep before I switched roles–I should definitely have taken a break.

With more guardrails in place, work stress leveled off a bit and is… almost OK. The structure of consulting work is comfortable (if far from satisfactory) and lends itself to both keeping your mind busy and blurring out any grievances you may have towards specific projects, although I still hate the constant context switching.

That said, whatever free time I could scrounge together was mostly spent doing chores.

I’ve also tried to spend a little time converting a bunch of stuff to , for three reasons:

  1. is now over ten years old and finally stable enough as a language to both have enough batteries included for most of my common use cases and a stable library ecosystem (although I still don’t like the way packages are namespaced and mapped directly into URLs, or the way I’m pulling packages out of GitHub repos without much in the way of supply chain security).
  2. I’d rather write than (or ) for my own things–there’s so much less ceremony and overhead for everything that I’m just more productive in it.
  3. As much as I love , I needed the challenge and the ability to write faster, more efficient lower-level code without dipping in and out of async.

Besides that, this weekend I started playing with Xogot, Miguel De Icaza’s amazing port to the iPad–and am loving it, although I’ve always found it hard to come up with game mechanics and code them.

And, of course, and loving it, fully conscious that I will be very sad when it’s over. I haven’t seen anything else quite like it.

Arcane poster
A perfect counterpoint to the first season poster

The Debix Model A

I’m still trying to work my way down the stack of single-board computers I have to review, and the Debix Model A has been queued up for far too long–for a few interesting reasons, and a lot of mundane ones.

The mundane ones range from flu to the work rollercoaster that is my life, but the interesting ones include the OS it shipped with (Windows 10 IoT Enterprise) and the challenges associated with testing that consistently.

Disclaimer: Debix supplied me with a Model A free of charge, for which I thank them. And, as usual, this article follows my .

But I’m getting ahead of myself. Let’s start with the hardware.

Hardware

The Debix Model A
The Debix Model A

The board is pretty a drop-in replacement for a from a form factor perspective, with a few interesting changes–most notably the second set of pins (not really GPIOs, but LVDS and the primary Ethernet interface), a (thankfully) full-sized HDMI port and dual USB-C ports for power and USB 2.0 OTG:

The Debix Model A ports and connectors
Port layout

Then there’s the stuff that is harder to notice:

  • A NXP i.MX 8M Plus 1.6GHz CPU (4xA53)
  • 8GB of LPDDR4 RAM
  • 2.4GHz & 5GHz Wi-Fi, Bluetooth 5.0
  • A tiny, easy to miss PCIe Gen 3 1-lane port
  • Headphone and Mic combo port
  • The usual round of UART, I2C, SPI, etc.

The second set of pins has:

  • 1xLVDS, single & dual channel 8bit
  • 1xMIPI CSI (4-lane)
  • 1xMIPI DSI (4-lane)
  • Bare Ethernet (without a line driver)

This is the first time I’ve tested an NXP chipset, and this one includes a 2.3 TOPS NPU (that I was unable to test given the usual challenges of non-mainstream SoCs) and a 1080p60 H.264/H.265 video encoder/decoder (which I was also unable able to test fully, although I suspect it was actually working in Windows since video playback was quite decent).

Software

The board has nominally complete OS support–besides the Windows 10 IoT image my board shipped with pre-installed, you can also download Android 11, Yocto, Ubuntu 22.04 and Debian 12 images, some of which (alas, not the Debian one) can self-install to the eMMC (which should be the norm).

Annoyingly, though, downloading images and flashing them was a mess. Some downloads are hosted on WeTransfer (which is not an improvement over the usual “public folder on Google Drive” setup from most manufacturers and caused me a lot of grief), and some of the eMMC images came bundled with a Windows executable to flash them to the device.

If, like me, you use almost exclusively a Mac, having to use a random Windows executable to flash things an additional hassle to deal with.

But, if like me, you deal with embedded systems a lot and have a dedicated to running Windows (because of Rockchip tooling), you’d expect that random executable to work, right?

Well, I was unable to flash the board via USB with most images, and was resigned to booting the board off the SD card–until I tried the Ubuntu 22.04 image that self-flashed to eMMC.

That was the key reason why it took me so long to get to this review: I had to try doing this a number of times, and even though Debix has a great deal of documentation (including, for a change, nice PDFs with all steps spelled out), I wait for a day when I could dedicate a few hours to plugging everything in, trying to flash things, etc. And then another, and another…

Windows 10 IoT Enterprise

The board booted directly to the desktop, and after a little bit of setup, I was able to use Remote Desktop to do most of the testing, starting with checking system information:

The Debix Model A running Windows 10 IoT Enterprise

Windows 10 seemed to have support for all the relevant hardware–except wireless and audio (although of course I was able to get RDP audio to work).

The RAM was reported as 6GB (which was odd, since the values for GPU shared memory were inconsistent), and that did have an impact–the machine was usable (I could use Edge to browse and download other stuff without issues), but not as snappy as I would have liked.

However, the one thing I was interested in was in testing legacy industrial software on it. I first tried a couple of small apps I knew had both ARM and Intel versions, and all the ARM executables I tried (not many, granted) worked without issues–but 64-bit Intel executables did not.

That included some of the OPC-UA software I had lying around, so I had to spend a bit of time trying to get older software to work.

And it did–I can’t show the OPC-UA stuff running (it was licensed for a client), but Firefox 32-bit ran without issues–if a bit slowly:

Running some test software, both ARM64 and Intel 32-bit--64-bit Intel MSIs refused to install

However, I was unable to do any real performance testing in Windows, so I tried to move on to Debian 12.

Ubuntu 22.04

After a lot of attempts, I was able to flash the board with the Ubuntu 22.04 image, and it booted directly to a GNOME desktop without any login screen. After a few updates and disabling graphical login, I set to work.

The good news is that it runs a relatively recent kernel:

 uname -a
Linux debix 6.1.22 #4 SMP PREEMPT Mon Mar 11 08:30:49 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux

The not-so-good news is that there were no hardware sensors visible to lm-sensors (so I had to resort to reading the CPU temp directly).

Another thing I noticed was that lshw had trouble figuring out the number of CPU cores, which I suspect is a quirk of the NXP chipset:

 lshw
debix
    description: Computer
    product: NXP i.MX8MPlus EVK board
    serial: 181108008530a3b9
    width: 64 bits
    capabilities: smp tagged_addr_disabled
  *-core
       description: Motherboard
       physical id: 0
     *-cpu:0
          description: CPU
          product: cpu
          physical id: 0
          bus info: cpu@0
          size: 1600MHz
          capacity: 1600MHz
          capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
        *-cache
             description: L1 Cache
             physical id: 0
             size: 32KiB
     *-cpu:1
          description: CPU
          product: cpu
          physical id: 1
          bus info: cpu@1
          size: 1600MHz
          capacity: 1600MHz
          capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
        *-cache
             description: L1 Cache
             physical id: 0
             size: 32KiB
     *-cpu:2
          description: CPU
          product: cpu
          physical id: 2
          bus info: cpu@2
          size: 1600MHz
          capacity: 1600MHz
          capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
        *-cache
             description: L1 Cache
             physical id: 0
             size: 32KiB
     *-cpu:3
          description: CPU
          product: cpu
          physical id: 3
          bus info: cpu@3
          size: 1600MHz
          capacity: 1600MHz
          capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
        *-cache
             description: L1 Cache
             physical id: 0
             size: 32KiB
     *-cpu:4 DISABLED
          description: CPU
          product: idle-states
          physical id: 4
          bus info: cpu@4
     *-cpu:5 DISABLED
          description: CPU
          product: l2-cache0
          physical id: 5
          bus info: cpu@5
     *-memory
          description: System memory
          physical id: 6
          size: 7889MiB
  *-usbhost:0
       product: xHCI Host Controller
       vendor: Linux 6.1.22 xhci-hcd
       physical id: 1
       bus info: usb@1
       logical name: usb1
       version: 6.01
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
  *-usbhost:1
       product: xHCI Host Controller
       vendor: Linux 6.1.22 xhci-hcd
       physical id: 2
       bus info: usb@2
       logical name: usb2
       version: 6.01
       capabilities: usb-3.00
       configuration: driver=hub slots=1 speed=5000Mbit/s
  *-usbhost:2
       product: xHCI Host Controller
       vendor: Linux 6.1.22 xhci-hcd
       physical id: 3
       bus info: usb@3
       logical name: usb3
       version: 6.01
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
     *-usb
          description: USB hub
          product: 4-Port USB 2.1 Hub
          vendor: Generic
          physical id: 1
          bus info: usb@3:1
          version: 1.01
          capabilities: usb-2.10
          configuration: driver=hub slots=4 speed=480Mbit/s
  *-usbhost:3
       product: xHCI Host Controller
       vendor: Linux 6.1.22 xhci-hcd
       physical id: 4
       bus info: usb@4
       logical name: usb4
       version: 6.01
       capabilities: usb-3.00
       configuration: driver=hub slots=1 speed=5000Mbit/s
     *-usb
          description: USB hub
          product: 4-Port USB 3.1 Hub
          vendor: Generic
          physical id: 1
          bus info: usb@4:1
          version: 1.01
          capabilities: usb-3.10
          configuration: driver=hub slots=4 speed=5000Mbit/s
  *-mmc0
       description: MMC Host
       physical id: 5
       logical name: mmc0
     *-device
          description: SDIO Device
          physical id: 1
          bus info: mmc@0:0001
          serial: 0
          capabilities: sdio
        *-interface:0
             description: Wireless interface
             product: 43455
             vendor: Broadcom
             physical id: 1
             bus info: mmc@0:0001:1
             logical name: mmc0:0001:1
             logical name: wlan0
             serial: ac:6a:a3:31:38:d0
             capabilities: ethernet physical wireless
             configuration: broadcast=yes driver=brcmfmac driverversion=7.45.173 firmware=01-d2799ea2 multicast=yes wireless=IEEE 802.11
        *-interface:1
             product: 43455
             vendor: Broadcom
             physical id: 2
             bus info: mmc@0:0001:2
             logical name: mmc0:0001:2
        *-bt
             description: BlueTooth interface
             product: 43455
             vendor: Broadcom
             physical id: 3
             bus info: mmc@0:0001:3
             logical name: mmc0:0001:3
             capabilities: wireless bluetooth
             configuration: wireless=BlueTooth
  *-mmc1
       description: MMC Host
       physical id: 6
       logical name: mmc1
  *-mmc2
       description: MMC Host
       physical id: 7
       logical name: mmc2
     *-device
          description: SD/MMC Device
          product: CJTD4R
          vendor: Unknown (21)
          physical id: 1
          bus info: mmc@2:0001
          date: 04/2022
          serial: 1568669415
          capabilities: mmc
        *-interface:0
             physical id: 1
             logical name: /dev/mmcblk2rpmb
        *-interface:1
             physical id: 2
             logical name: /dev/mmcblk2
             size: 62537072640
             capabilities: partitioned partitioned:dos
             configuration: logicalsectorsize=512 sectorsize=512 signature=fda602fe
           *-volume:0
                description: Windows FAT volume
                vendor: mkfs.fat
                physical id: 1
                logical name: /dev/mmcblk2p1
                logical name: /boot
                version: FAT16
                serial: 2078-019e
                size: 479MiB
                capacity: 490MiB
                capabilities: primary fat initialized
                configuration: FATs=2 filesystem=fat mount.fstype=vfat mount.options=rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro state=mounted
           *-volume:1
                description: EXT4 volume
                vendor: Linux
                physical id: 2
                logical name: /dev/mmcblk2p2
                version: 1.0
                serial: 0dda7379-98cf-4613-b507-5f371e182d9c
                size: 57GiB
                capacity: 57GiB
                capabilities: primary journaled extended_attributes large_files huge_files dir_nlink recover 64bit extents ext4 ext2 initialized
                configuration: created=2022-04-28 17:42:32 filesystem=ext4 lastmountpoint=/ modified=2024-11-14 18:35:46 mounted=2024-11-14 18:35:46 state=clean
  *-sound:0
       description: audiohdmi
       physical id: 8
       logical name: card0
       logical name: /dev/snd/controlC0
       logical name: /dev/snd/pcmC0D0p
  *-sound:1
       description: es8316audio
       physical id: 9
       logical name: card1
       logical name: /dev/snd/controlC1
       logical name: /dev/snd/pcmC1D0c
       logical name: /dev/snd/pcmC1D0p
  *-input:0
       product: 30370000.snvs:snvs-powerkey
       physical id: a
       logical name: input0
       logical name: /dev/input/event0
       capabilities: platform
  *-input:1
       product: audio-hdmi HDMI Jack
       physical id: b
       logical name: input1
       logical name: /dev/input/event1
  *-network:0
       description: Ethernet interface
       physical id: c
       logical name: ens34
       serial: 10:07:23:6e:00:20
       capacity: 1Gbit/s
       capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=fec driverversion=6.1.22 link=no multicast=yes port=twisted pair
  *-network:1
       description: Ethernet interface
       physical id: d
       logical name: ens33
       serial: 10:07:23:6e:00:1d
       size: 1Gbit/s
       capacity: 1Gbit/s
       capabilities: ethernet physical tp mii 10bt-fd 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=st_gmac driverversion=6.1.22 duplex=full ip=192.168.1.202 link=yes multicast=yes port=twisted pair speed=1Gbit/s

This prompted me to have a look at the device tree, and I found that Debix had added support for a number of devices, including (apparently) the Raspberry Pi touchscreen:

 ls -1 /boot/
Image
boot_logo.bin
boot_logo.sh
imx8mp-debix-4g-board.dtb
imx8mp-debix-core-HC050IG40029-D58V.C.dtb
imx8mp-debix-core-HC080IY28026-D60V.C.dtb
imx8mp-debix-core-HC101IK25050-D59V.C.dtb
imx8mp-debix-core-JW050R0320I01.dtb
imx8mp-debix-core-JW070R0520B02.dtb
imx8mp-debix-core-JW080R1120B02.dtb
imx8mp-debix-core-JW101HD-X00.dtb
imx8mp-debix-core-ar1335.dtb
imx8mp-debix-core-board.dtb
imx8mp-debix-core-gc2145.dtb
imx8mp-debix-core-ov5640.dtb
imx8mp-debix-io-HC050IG40029-D58V.C.dtb
imx8mp-debix-io-HC080IY28026-D60V.C.dtb
imx8mp-debix-io-HC101IK25050-D59V.C.dtb
imx8mp-debix-io-JW050R0320I01.dtb
imx8mp-debix-io-JW070R0520B02.dtb
imx8mp-debix-io-JW080R1120B02.dtb
imx8mp-debix-io-JW101HD-X00.dtb
imx8mp-debix-io-board.dtb
imx8mp-debix-io-imx219.dtb
imx8mp-debix-io-raspberrypi-touchscreen.dtb
imx8mp-debix-lora-HC050IG40029-D58V.C.dtb
imx8mp-debix-lora-HC080IY28026-D60V.C.dtb
imx8mp-debix-lora-HC101IK25050-D59V.C.dtb
imx8mp-debix-lora-JW050R0320I01.dtb
imx8mp-debix-lora-JW070R0520B02.dtb
imx8mp-debix-lora-JW080R1120B02.dtb
imx8mp-debix-lora-JW101HD-X00.dtb
imx8mp-debix-lora-board.dtb
imx8mp-evk.dtb

This is a nice touch, and likely to speed up integration into vertical solutions.

Power

The board can be powered via USB-C or PoE (via an additional module), and I used a 5V/3A power supply plugged into a Zigbee power socket, which gave me the following measurements:

  • 4W on Windows, idle, peaking up to 5W under load
  • 2.7W idle on Ubuntu (with or without a graphical session)
  • 5W under load on Ubuntu

This sort of confirmed why the board felt very hot under Windows–it was drawing a lot more power, which is a common theme in Windows on ARM devices.

Temperature

Given that it came without any cooling solution, and even though Debix touts the fact that the board features industrial-grade components, I added one of my trademark copper blocks as soon as I could.

While running Windows 10, the board got considerably hot. Not uncomfortably so to the touch, but enough for me to worry about. Under Ubuntu, it idled at 49 C, but with a sustained 100% load across all cores for several minutes (courtesy of ollama) I couldn’t get it to go past 64C with the copper shim in place–nor did it ever throttle below 1.6GHz, which was impressively stable:

running ollama
One of my test runs

Performance

Of course, this stability comes at a price: It was slightly slower than a Raspberry Pi 4 at running ollama, (3.5 tokens/s vs 3.77), but sbc-bench gave me some interesting results when I compared it to similar boards:

Device / details Clockspeed Kernel Distro 7-zip multi 7-zip single AES memcpy memset kH/s
NXP i.MX8MPlus EVK board 1600 MHz 6.1 Ubuntu 22.04.5 LTS (jammy) arm64 4400 1198 746700 2610 12340 -
Rockchip RK3566 EVB2 LP4X V10 Board 1800 MHz (throttled) 5.10 Raspbian (bullseye) 3080 1294 827780 2930 7910 3.98
Rockchip RK3566 EVB2 LP4X V10 Board ~1340 MHz 5.10 Debian 11 bullseye 3390 948 620820 2060 4220 -
Radxa Zero 1800 MHz 6.6 Armbian 24.5.5 bookworm 4530 1337 834820 1580 5620 6.65
Raspberry Pi Zero 2 (RP3A0) 1200 MHz 5.10 Raspberry Pi OS Buster 3640 1007 36300 1320 1790 -
Raspberry Pi 4B 1800 MHz 5.15 Armbian Jammy arm64 5640 1752 36260 2580 3110 -


I found the memset value particularly interesting, as it was the highest of all comparable boards I tested, and the AES performance was also quite good–for other tests like 7-zip multi/single performance, AES, and memcpy, the Model A is still quite competitive, and I think that a 1800MHz board would nudge it a hair beyond the Pi 4B.

But, as usual, benchmarks are only part of the story, and my gut feeling is that the performance of this board is more than enough for most applications, even clocked at 1.6GHz–and the overall stability under load is a big plus for industrial applications.

Conclusion

In summary, the Debix Model A is a capable and versatile alternative, and so far the only SBC I tested that came with Windows 10 IoT Enterprise pre-installed–and thus, thanks to the x86 emulation, an interesting choice for industrial applications that require Windows compatibility.

As to software, I am a bit sad I couldn’t get neither the Windows flashing tool nor Debian 12 to work–I have no idea why the self-flashing process the Ubuntu image uses isn’t available for all images, but on the upside the documentation is quite detailed and comprehensive.

That documentation is a big plus, and the board itself is well-built, with a lot of interesting features that make it a good choice for a variety of projects–from industrial to hobbyist–and the power consumption is OK, although I would ship a cooling solution with boards pre-loaded with Windows.

Notes for November 4-10

Yeah, I skipped a few weeks’ worth of notes, but the gist of things is that I moved , had a grueling first week (wasn’t able to leave the house for breaks), slept through most of Saturday and am still trying to figure out where all my free time went.

The high point of the week is that I got a TerraMaster F4-424 MAX NAS in the post, courtesy of Wendell Wilson from Level1Techs–that was (mostly) unexpected, very touching (I appreciate it tremendously), and the starting point for a great project to tackle over the next few weeks (maybe months).

But, overall, it is funny because a few months ago TerraMaster point blank refused to collaborate with me unless I published their press releases (which would make absolutely no sense). And it is also a bit tragic because the hardware is excellent and they are shooting themselves in the foot with that ridiculous requirement.

After dropping in a couple of SSDs for a redundant OS disk, I am now in the process of scrounging together the cash to upgrade the RAM to at least 64GB and get enough NAS HDDs to rotate my existing stock into it, but the fact that the thing is running Ubuntu 22.04 on a 10-core 12th Gen i5-1235U and has dual 10GbE ports makes it an amazing homelab platform.

I can’t wait to set it up properly and install , since I want to shut down , re-purpose the ancient i7 in it and further consolidate my cluster, which thanks to the now hosting my ARM64 workloads is down to five nodes instead of seven.

But first, I’m going to take another SBC off the shelf and see if I can do a bit more testing before Monday rolls along.

Proxmox on the FriendlyELEC CM3588 NAS Kit

After my review of the running OpenMediaVault, I spent a little while trying to get it to run with ZFS enabled.

Read More...

My Take On This Week’s Mac Updates

Since I’m without even taking a proper break, I haven’t been able to take part in the blow by blow as Apple “phoned in” the Mac updates this week, but I still have feelings about them.

Read More...

Back to the Grind

As of today, I am back at Microsoft Consulting–or, as it’s known these days, Industry Solutions Delivery, in the role of a Principal Program Architect.

Read More...

Making the Radxa X4 Even Cooler

Back , I went to some trouble to go over its thermal characteristics and how well that massive heatsink worked.

Read More...

The FriendlyELEC CM3588 NVMe NAS Kit

This one took me a long time, and it was actually the third or fourth RK3588 board I got to review–but the timing of its arrival was completely off (it was in the middle of a work crisis) and I had to put it on the back burner for a while.

Read More...

Notes for September 30-October 20

Other than my link blog, I usually start writing about stuff weeks (if not months) in advance, but due to my stack of drafts hasn’t been tended to properly.

Read More...

Nine Years at Microsoft

Let’s not beat about the bush: I have no compunction about classifying this as my worst year (and believe me, there were a few doozies before that).

Read More...

The Keychron K2 HE

I don’t think I’ve ever used so many different keyboards in a year. But I am happy that things have been improving so fast that I can actually feel the difference between them.

Read More...

The Banana Pi M5 Pro

I’m down with the first flu of the season, so I thought I’d write up my notes on the Banana Pi M5 Pro and how it’s fared as part of my increasingly eclectic collection of single-board computers in the post- age.

Read More...

Notes on Bazzite, Steam Link, and Rebuilding my AI Sandbox

Gaming hasn’t exactly been one of my most intensive pastimes of late–it has its highs and lows, and typically tends to be more intensive in the cold seasons. But this year, with and my interest in preserving a time capsule of my high-performance Zelda setup, I decided to create a VM snapshot of it and (re)document the process.

Read More...

Archives3D Site Map