Skip to content

Build1 publisher3 min readPublished

The MS-R1 ships KVM but no vhost, so an Android test fleet starts with a kernel build

Cuttlefish will not start on Minisforum's CIX P1 desktop because the vendor kernel strips the whole vhost subsystem. The rebuild is not optional, and it is not just a Cuttlefish problem.

The Engineer · Build desk

Drafted by a language model from the sources cited here and checked against its claim ledger before publication. How we use AISend a correction

Photograph accompanying The MS-R1 ships KVM but no vhost, so an Android test fleet starts with a kernel build
Photo: minisforum.com

What happened

  • On the Minisforum MS-R1, running sudo modprobe vhost_vsock returns: modprobe: FATAL: Module vhost_vsock not found in directory /lib/modules/6.6.10-cix-build-generic
  • The kernel Minisforum ships on the MS-R1 is 6.6.10-cix-build-generic.
  • Cuttlefish is AOSP's official virtual device and runs arm64 Android guests on arm64 hosts with KVM acceleration.
  • Cuttlefish uses vsock, a virtual socket transport, for all communication between the host and its guest VMs, including ADB, logs and control messages; without /dev/vhost-vsock, Cuttlefish does not start, and it is not a soft dependency.
  • The author's goal was a box that could run a dozen Android instances at once, real rather than emulated on x86, to benchmark peer-to-peer sync behaviour at scale: native arm64 Android on native arm64 silicon with no translation layer.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

Anyone pricing the Minisforum MS-R1 as a cheap arm64 Android test fleet should price a kernel build into the first machine: the vendor's 6.6.10-cix-build-generic ships with no vhost_vsock module, and modprobe fails outright [1][2]. Cuttlefish, AOSP's official virtual device and the reason the box looked attractive in the first place, moves ADB, logs and control messages over vsock, so without /dev/vhost-vsock it does not start at all [3][4].

The buyer in question wanted a dozen real arm64 Android instances on arm64 silicon to benchmark peer-to-peer sync at scale, and the MS-R1 fit: a 12-core ARMv9 CIX P1 ("Sky1") in one of the first genuinely affordable ARM desktops with server-class memory [5][6]. Cuttlefish even has a --num_instances=N flag that does exactly that [7].

The diagnosis, according to the writeup, is not a missing module but a missing subsystem. Grepping the shipped config shows CONFIG_VHOST_NET is not set and CONFIG_VHOST_VSOCK does not appear at all, which is what happens when the parent CONFIG_VHOST symbol is off and Kconfig never emits the dependent symbols [8][9]. The device nodes agree: /dev/kvm is present, /dev/vhost-vsock and /dev/vhost-net are not [10]. Hardware virtualization is enabled; the kernel-side plumbing around it is not.

The vhost_net half should bother people who will never touch Cuttlefish. Without it, every guest's virtio networking is serviced in QEMU userspace instead of in the kernel, and the MS-R1 documentation walks buyers through running Proxmox on the machine [11][12].

This is not a silicon limit. CIX's own mainline tree sets CONFIG_VHOST_NET=m, CONFIG_VHOST_VSOCK=m, CONFIG_VSOCKETS=m and CONFIG_KVM=y [13]. The vendor's config fragments explain the product kernel instead: cix.config at 596 lines, cix_redroid.config at 222, cix_docker.config at 40, virt.config at 61, and none of them enable vhost [14][15]. Roughly a quarter of that fragment work goes to redroid [16], containerized Android that shares the host kernel and needs no vsock, with binder compiled in [17]. The vendor's supported Android story is containers, and the kernel matches the documentation.

Two traps are worth copying into your notes. virt.config is not the virtualization options: its header reads "Virtualization guest", it configures a kernel to run inside a VM, and it disables every platform ARCH_* symbol plus THERMAL, SPI, MTD and REGULATOR, producing a kernel that will not drive the board [18]. And upgrading out of the problem is worse than it looks. Mainline Sky1 support landed around v6.17 but is minimal enablement (mailbox, SCMI clocks, basic device tree) aimed at the Radxa Orion O6, a different board with different firmware and NICs, so lost networking or a failed boot is the likely outcome [19]. The cixtech/cix-linux-main patch sets for 6.18, 7.0 and 7.1 carry a defconfig with everything Cuttlefish needs, but are tested on the Orion O6 with specific edk2 firmware and want clk_ignore_unused [20]: a twelve-release jump from 6.6 on unvalidated firmware [21].

The stated cost of doing it properly is about an afternoon, most of that an unattended compile, with four separate traps along the way [22][23]. That is tolerable once. It is a different number if it repeats per vendor kernel bump, or per box, and the published account is only part one of two, covering nothing beyond getting a host kernel that can host VMs [24]. Watch whether CIX or Minisforum enable vhost in a shipped kernel, since the same fragment set that omits it is the one carrying redroid support [15][17]. Until then, treat "it virtualizes" on the spec sheet as covering KVM and not the vhost fast paths.

Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories