Files
James Stringer 0d4897dd6b Windows guest on Mac host via QEMU+HVF + ivshmem transport
Run Windows 11 ARM64 guests on macOS over QEMU+HVF, with an ivshmem
shared-memory transport carrying every guest channel (agent control,
display/VDD, input, audio, clipboard, SSH, 9P) - no guest networking
required.

- tools/transport: one guest transport API, two backends (PC AF_HYPERV,
  Mac ivshmem); SPSC ring with an acquire-barrier fix for SSH integrity
- tools/ivshmem: our own KMDF ivshmem BAR-mapping driver (no third party)
- src/backend_mac: Mac-host ivshmem transport, QEMU VM lifecycle, IDD
  display consumer, agent/SSH proxies, ISO->disk patcher, Windows create
- tools/agent + channel EXEs + tools/vdd: wired to asb_transport
- tools/agent_win: staged guest payload (interim, pending JIT pull)
- vendor/qemu-ivshmem: vendored QEMU 11.0.1 fork (ivshmem-plain) + LGPL
  source mirror for the self-contained app bundle
- tools/sign/make-release.ps1: use the host-native ARM64 MSBuild so the
  WDK driver ApiValidator runs (the x86 validator fails on ARM64)
2026-06-21 18:30:59 -04:00

30 lines
1.1 KiB
C

/* test_fat32.c -- author an ESP-like FAT32 volume for fsck_msdos / mount checks. */
#include "fat32.h"
#include "blockio.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char**argv){
const char*path = argc>1?argv[1]:"/tmp/esp.img";
uint64_t bytes = 200ull<<20; /* 200 MiB ESP */
blockio_t*io=blockio_create(path,bytes);
if(!io){printf("blockio_create fail\n");return 2;}
fat32_writer_t*w=fat32_open(io,0,bytes/512,"ESP");
if(!w){printf("fat32_open fail\n");return 2;}
fat32_mkdir(w,"/EFI/Boot");
fat32_mkdir(w,"/EFI/Microsoft/Boot/Fonts");
static uint8_t a[3030944]; for(size_t i=0;i<sizeof a;i++) a[i]=(uint8_t)(i*131+7);
fat32_addfile(w,"/EFI/Boot/bootaa64.efi",a,sizeof a);
fat32_addfile(w,"/EFI/Microsoft/Boot/bootmgfw.efi",a,sizeof a);
fat32_addfile(w,"/EFI/Microsoft/Boot/BCD","\x72\x65\x67\x66 fake-bcd",13);
fat32_addfile(w,"/EFI/Microsoft/Boot/memtest.efi","hello",5);
int rc=fat32_close(w);
printf("fat32_close rc=%d\n",rc);
blockio_close(io);
return rc?1:0;
}