Hyper-V Linux Guest Services for OpenWrt
This should be used on Linux 6.10 or later (6.12 WIP for OpenWrt), but currently it does not work at all.
Currently it does not compile with OpenWrt toolchain (complaining about __always_inline). Seems can be solved by:
diff --git a/tools/hv/vmbus_bufring.c b/tools/hv/vmbus_bufring.c
index bac32c1109df..ee9f48511a71 100644
--- a/tools/hv/vmbus_bufring.c
+++ b/tools/hv/vmbus_bufring.c
@@ -58,7 +58,7 @@ void vmbus_br_setup(struct vmbus_br *br, void *buf, unsigned int blen)
br->dsize = blen - sizeof(struct vmbus_bufring);
}
-static inline __always_inline void
+static inline __attribute__((always_inline)) void
rte_smp_mb(void)
{
asm volatile("lock addl $0, -128(%%rsp); " ::: "memory");It requires some uio related vmbus device which unfortunately I don't know how to initialize.
Wed Apr 16 23:30:57 2025 user.info HV_UIO_FCOPY: starting; pid is:5065
Wed Apr 16 23:30:57 2025 user.err HV_UIO_FCOPY: Failed to open directory (errno=No such file or directory).
Wed Apr 16 23:30:57 2025 user.err HV_UIO_FCOPY: open /dev/ failed; error: 21 Is a directory
Tried following Generic Hyper-V UIO driver but no uio* seen under /dev or /sys/bus/vmbus/devices/eb765408-105f-49b6-b4aa-c123b64d17d4 (source)
# ls -al /sys/bus/vmbus/devices/eb765408-105f-49b6-b4aa-c123b64d17d4/
drwxr-xr-x 4 root root 0 Apr 16 23:47 .
drwxr-xr-x 22 root root 0 Apr 16 23:47 ..
-r--r--r-- 1 root root 4096 Apr 16 23:47 channel_vp_mapping
drwxr-xr-x 3 root root 0 Apr 16 23:47 channels
-r--r--r-- 1 root root 4096 Apr 16 23:47 class_id
-r--r--r-- 1 root root 4096 Apr 16 23:47 device
-r--r--r-- 1 root root 4096 Apr 16 23:47 device_id
-rw-r--r-- 1 root root 4096 Apr 16 23:49 driver_override
-r--r--r-- 1 root root 4096 Apr 16 23:47 id
-r--r--r-- 1 root root 4096 Apr 16 23:47 in_intr_mask
-r--r--r-- 1 root root 4096 Apr 16 23:47 in_read_bytes_avail
-r--r--r-- 1 root root 4096 Apr 16 23:47 in_read_index
-r--r--r-- 1 root root 4096 Apr 16 23:47 in_write_bytes_avail
-r--r--r-- 1 root root 4096 Apr 16 23:47 in_write_index
-r--r--r-- 1 root root 4096 Apr 16 23:47 modalias
-r--r--r-- 1 root root 4096 Apr 16 23:47 out_intr_mask
-r--r--r-- 1 root root 4096 Apr 16 23:47 out_read_bytes_avail
-r--r--r-- 1 root root 4096 Apr 16 23:47 out_read_index
-r--r--r-- 1 root root 4096 Apr 16 23:47 out_write_bytes_avail
-r--r--r-- 1 root root 4096 Apr 16 23:47 out_write_index
drwxr-xr-x 2 root root 0 Apr 16 23:47 power
-r--r--r-- 1 root root 4096 Apr 16 23:47 state
lrwxrwxrwx 1 root root 0 Apr 16 23:47 subsystem -> ../../../../../../bus/vmbus
-rw-r--r-- 1 root root 4096 Apr 16 23:47 uevent
-r--r--r-- 1 root root 4096 Apr 16 23:47 vendor
Manually binding device does not work as well:
# echo -n eb765408-105f-49b6-b4aa-c123b64d17d4 > /sys/bus/vmbus/drivers/uio_hv_generic/bind
ash: write error: No such device
At the same time this seems also not working on Ubuntu 25.04 Beta (Running linux-azure kernel variant). The problem seems same as running on OpenWrt:
Apr 16 16:44:55 yichya-ubuntu sudo[1146]: yichya : TTY=tty1 ; PWD=/usr/lib/linux-azure-tools-6.14.0-1004 ; USER=root ; COMMAND=./hv_fcopy_uio_daemon -n
Apr 16 16:44:55 yichya-ubuntu sudo[1146]: pam_unix(sudo:session): session opened for user root(uid=0) by yichya(uid=1000)
Apr 16 16:44:55 yichya-ubuntu HV_UIO_FCOPY[1148]: starting; pid is:1148
Apr 16 16:44:55 yichya-ubuntu HV_UIO_FCOPY[1148]: Failed to open directory (errno=No such file or directory).
Apr 16 16:44:55 yichya-ubuntu HV_UIO_FCOPY[1148]: open /dev/ failed; error: 21 Is a directory
Not sure if it's related to Hyper-V version (Tried both on Windows 11 24H2 and Windows Server 2022, both not working) or kernel configuration.
Since it is broken and not very useful, there's an option in this package to exclude any fcopy implementation.
Legacy hv_fcopy_daemon does not work on Linux 6.10 or later because it needs /dev/vmbus/hv_fcopy which is available only on older kernel versions.