Van egy “DuoLabs CAS Interface 2 Plus” nevu hardverem (link), amit kb 8 eve nem hasznaltam, most at akartam irni egy CAS kartya Wi-Fi hozzaferesi adataut. Van hozza x86 es x86-64-es Windows driver, ez nyilvan nem fog AArch64 Windowsra telepedni, ugyhogy felraktam egy QEMU-t, az akutalis legujabbat.
igy forditottam
./configure --enable-tcg --enable-attr --enable-system --target-list=i386-softmmu,x86_64-softmmu --prefix=/opt/qemusystem --enable-cocoa --enable-slirp --enable-slirp-smbd --enable-libusb --enable-usb-redir --enable-spice
Majd feltelepitettem egy XP-t, belottem az emulalt hardverek helyett a virtio verziokat, es vegul kijott az, hgy igy inditom az XP-t:
/opt/qemusystem/bin/qemu-system-i386 \
-name "Windows XP" \
-uuid "522BE086-6F07-4D4F-BA5A-0A1622BDED16" \
-monitor stdio \
-machine type=pc,vmport=on \
-nodefaults \
-cpu qemu32 \
-accel tcg,thread=multi,tb-size=512 \
-smp cpus=2,sockets=1,cores=1,threads=2 \
-boot order=dc \
-m size=2G \
-rtc base=utc \
-audiodev coreaudio,id=audio0 \
-blockdev driver=file,node-name=diskfile0,filename=Virtual\ Disk-flat.vmdk \
-blockdev driver=raw,node-name=disk0,file=diskfile0 \
-netdev user,id=usernet0,smb=${HOME},hostfwd=tcp::29000-:5900 \
-display cocoa,show-cursor=on,zoom-to-fit=off \
-device qxl-vga,vgamem_mb=16 \
-device virtio-blk-pci,drive=disk0 \
-device virtio-net-pci,netdev=usernet0,mac=00:16:3e:52:e6:34 \
-device ich9-usb-ehci1,multifunction=on,id=ehci-1 \
-device ich9-usb-uhci1,multifunction=on,id=uhci-1,masterbus=ehci-1.0,firstport=0 \
-device ich9-usb-uhci2,multifunction=on,id=uhci-2,masterbus=ehci-1.0,firstport=2 \
-device ich9-usb-uhci3,multifunction=on,id=uhci-3,masterbus=ehci-1.0,firstport=4 \
-device ich9-usb-ehci2,multifunction=on,id=ehci-2 \
-device ich9-usb-uhci4,multifunction=on,id=uhci-4,masterbus=ehci-2.0,firstport=0 \
-device ich9-usb-uhci5,multifunction=on,id=uhci-5,masterbus=ehci-2.0,firstport=2 \
-device ich9-usb-uhci6,multifunction=on,id=uhci-6,masterbus=ehci-2.0,firstport=4 \
-device usb-kbd,bus=ehci-1.0 \
-device usb-tablet,bus=ehci-1.0 \
-blockdev driver=file,node-name=x86diskfile0,filename=x86\ Disk-flat.vmdk \
-blockdev driver=raw,node-name=x86disk0,file=x86diskfile0 \
-device virtio-blk-pci,drive=x86disk0 \
-device sb16,audiodev=audio0,dma16=5,dma=1,iobase=544,irq=7 \
Kiprobaltam, mezei USB-to-PS/2 adaptert at tudok adni. az mukodik is, illetve a kartyaolvaso is megjelent, de nem volt keznel semmilyen kartya, hogy beledugva kiprobaljam :D
(qemu) info usbhost
Bus 2, Addr 7, Port 1.2, Speed 480 Mb/s
Class ff: USB device 04b4:2225
Bus 0, Addr 10, Port 2.4.2.2, Speed 5000 Mb/s
Class 00: USB device 11b0:6368, Multi-Reader
Bus 64, Addr 8, Port 1.3.2, Speed 480 Mb/s
Class 00: USB device 05ac:12a8, iPhone
Bus 64, Addr 7, Port 1.2, Speed 480 Mb/s
Class 00: USB device 05ac:12ab, iPad
Bus 64, Addr 5, Port 1.5, Speed 480 Mb/s
Class ef: USB device 05ac:1112, FaceTime HD Camera (Display)
Bus 64, Addr 4, Port 1.7, Speed 12 Mb/s
Class 00: USB device 05ac:9227, Apple Thunderbolt Display
Bus 64, Addr 2, Port 1.4, Speed 12 Mb/s
Class 00: USB device 05ac:1107, Display Audio
Bus 0, Addr 5, Port 1.1.8, Speed 12 Mb/s
Class 00: USB device 2188:0035, Element Hub
(qemu) device_add usb-host,hostbus=0,hostport=2.4.2.2,id=usbdev0
(qemu) device_del usbdev0
Ha viszont, ezt a CAS Interface eszkot adom at (az elozo listaban ez a 04b4:2225), akkor ehhez ugyan fel tudom telepiteni a drivert, de felkialtojeles lesz az eszkoz, mert “This device cannot start. (Code 10)”. Probaltam rootkent illetve sima mezei userkent is, az eredmeny ugyonez. Ugy emlekszem, hogy ezt virtualizalt Windowson hasznaltam anno, igy fogtam egy x86-64-es Linuxot egy masik gepen, VirtualBox-ban is felraktam egy XP-t, es lass csodat, ott ment. Tehat, az eszkoz mukodik, “at lehet adni” (ez azert volt kerdeses, mert sok, USB streaminget hasznalo eszkot nem lehet atadni, pl a legtobb capture kartyat sem).
Megfogtam hat a VMware Fusion 13.5.2-t, felraktam benne egy AArch64-es AlmaLinux 9-et, majd szinte az elobb is lathato configure parannccsal
oda is lebuildeltem ugyonezt a QEMU-t
./configure --enable-tcg --enable-attr --enable-system --target-list=i386-softmmu,x86_64-softmmu --prefix=/opt/qemusystem --enable-gtk --enable-alsa --enable-slirp --enable-slirp-smbd --enable-libusb --enable-usb-redir --enable-spice
A futtatas csak egy kicsit volt masabb:
LD_LIBRARY_PATH=/opt/qemusystem/lib64 /opt/qemusystem/bin/qemu-system-i386 \
-name "Windows XP" \
-uuid "522BE086-6F07-4D4F-BA5A-0A1622BDED16" \
-monitor stdio \
-machine type=pc,vmport=on \
-nodefaults \
-cpu qemu32 \
-accel tcg,thread=multi,tb-size=512 \
-smp cpus=2,sockets=1,cores=1,threads=2 \
-boot order=dc \
-m size=2G \
-rtc base=utc \
-blockdev driver=file,node-name=diskfile0,filename=Virtual\ Disk-flat.vmdk \
-blockdev driver=raw,node-name=disk0,file=diskfile0 \
-netdev user,id=usernet0,smb=${HOME},hostfwd=tcp::29000-:5900 \
-display gtk \
-device qxl-vga,vgamem_mb=16 \
-device virtio-blk-pci,drive=disk0 \
-device virtio-net-pci,netdev=usernet0,mac=00:16:3e:52:e6:34 \
-device ich9-usb-ehci1,multifunction=on,id=ehci-1 \
-device ich9-usb-uhci1,multifunction=on,id=uhci-1,masterbus=ehci-1.0,firstport=0 \
-device ich9-usb-uhci2,multifunction=on,id=uhci-2,masterbus=ehci-1.0,firstport=2 \
-device ich9-usb-uhci3,multifunction=on,id=uhci-3,masterbus=ehci-1.0,firstport=4 \
-device ich9-usb-ehci2,multifunction=on,id=ehci-2 \
-device ich9-usb-uhci4,multifunction=on,id=uhci-4,masterbus=ehci-2.0,firstport=0 \
-device ich9-usb-uhci5,multifunction=on,id=uhci-5,masterbus=ehci-2.0,firstport=2 \
-device ich9-usb-uhci6,multifunction=on,id=uhci-6,masterbus=ehci-2.0,firstport=4 \
-device usb-kbd,bus=ehci-1.0 \
-device usb-tablet,bus=ehci-1.0 \
-blockdev driver=file,node-name=x86diskfile0,filename=x86\ Disk-flat.vmdk \
-blockdev driver=raw,node-name=x86disk0,file=x86diskfile0 \
-device virtio-blk-pci,drive=x86disk0 \
Itt, tehat, bebootoltam ugyonazt az imaget, amit az elobb. Atadtam a VMware menujeben, a VMwareben futo Linuxnak az eszkozt, majd miutan megjelent a virtualizalt Linuxban, az elozo parancshoz hasonloan atadtam az emulalt QEMU-nak. Lass csodat, ez is mukodik.
Ami meg fura, hogy az UTM app alatt is mukodik, ami szinten egy QEMU frontend. Ami feltunt, hogy a VMware es az UTM entitlementjei kozott is szerepel a “com.apple.vm.device-access”, ami az Apple doksija szerint, pont a virtualisgep USB passthroughhoz kell. Azt is megneztem, hogy libusb-t es libusbredir-t hasznal a QEMU eszkozatadashoz. Itt, azt irjak, hogy ha nincs meg ez az entitlement, akkor root-kent ugyonugy mukodnie kellene a dolognak, mint userkent, az entitlement birtokaban (tehat, elvileg van a libusbben osx tamogatas ehhez), viszont, szerintem, nem megy.
Irtam az Applenak, hogy szeretnek kerni jogosultsagot ennek az entitlementnek a hasznalatahoz, de 99% biztos vagyok benne, hogy el fogjak utasitani.
Valaki szorakozott mar ilyesmi dologgal? Illetve, tud valaki mas olyan QEMU frontendrol,
- ami nem sandboxos, illetve tetszoleges helyen tudja tarolni az imageket (az UTM ragaszkodik ahhoz, hogy a disk imagek qcow formatumban a ~/Library/Containers alatt legyenek)
- szabadon belenyulhatok a QEMU-nak adott parameterekbe
- a qemu osszes architekturajahoz szallit binarist, amit a leheto legtobb featureval konfiguraltak
- kivulrol is hivogathatom belole a QEMU binarisait
- rendelkezik ezzel az entitlementtel, hogy mukodjon benne az eszkozatadas
Azert gyanakszom egyebkent az entitlementre, mert UTM es VMware eseten is van jovahagyas, hogy atadom az eszkozt, viszont a kezzel, sajat magamnak inditott QEMU eseten nincs.
szerk: Nyilvan, az elso otletem az lett volna, hogy eleg lenne az x86/x86-64-es drivert portolni AArch64 Windowsra, majd ez megoldana minden problemat, mert a VMware jol at tudja adni az eszkozt. Ezt meg is tudnam csinalni, ugyhogy, meg is kerestem, hogy az eredeti vendor meg letezik, de mivel 66x leirjak, a weboldalukon sok-sok helyre, hogy ezekkel a regi hardverekkel mar semennyire nem foglalkoznak (latszolag total mas a profil), ne irjon nekik senki levelet, igy nincs ertelme levelet irnom, hogy elkerjem a driveruk forrasat.