
एक लिनक्स फ्रेमवर्क जो उपयोगकर्ता-स्थान द्वारा परिभाषित "वर्चुअल" PCIe कार्ड शिम्स को सक्षम करता है ताकि इन-होस्ट PCIe कार्ड ड्राइवर विकास किया जा सके।
PCIem एक फ्रेमवर्क है जो Linux कर्नेल में वर्चुअल PCIe डिवाइस बनाता है, जिसमें कुछ नवीन तकनीकों का उपयोग करके सिंथेटिक कार्ड को होस्ट OS में वैध PCI डिवाइस के रूप में प्रस्तुत किया जाता है।
संक्षेप में PCIem: यह PCIe डिवाइस ड्राइवरों को विकसित करने और परीक्षण करने के लिए एक फ्रेमवर्क है (इसी तक सीमित नहीं) जिसमें होस्ट पर वास्तविक हार्डवेयर की आवश्यकता नहीं होती।
PCIem और libfvio-user विभिन्न आवश्यकताओं के लिए दो अलग-अलग समाधान हैं; दोनों की तुलना करने पर भ्रम हो सकता है, इसलिए यहाँ अंतर दिए गए हैं (अधिक जानकारी के लिए चित्र 1 देखें)।
मुख्य अंतर यह है कि libvfio-user आमतौर पर एक क्लाइंट पर निर्भर करता है (जो vfio-user प्रोटोकॉल लागू करता है), आमतौर पर QEMU (KVM के माध्यम से, VM निकास का उपयोग करके) जो एमुलेटेड PCIe डिवाइस को गेस्ट को उजागर करता है। आप अपना vfio सर्वर लिखते हैं (आमतौर पर कॉलबैक तंत्र के साथ) जो फिर क्लाइंट के साथ इंटरैक्ट करता है।
इसके विपरीत, PCIem डिवाइस को सीधे होस्ट पर उजागर करता है; कोई KVM, कोई गेस्ट, कोई वर्चुअल मशीन नहीं। डिवाइस होस्ट के PCIe बस पर ऐसे दिखाई देता है जैसे वह भौतिक रूप से जुड़ा हो।
| विशेषता | PCIem | libfvio-user |
|---|---|---|
| कनेक्शन | डिवाइस फ़ाइल (/dev/pciem) | UNIX सॉकेट्स (vfio-user प्रोटोकॉल) |
| लक्ष्य ड्राइवर कहाँ चलता है | होस्ट | गेस्ट OS |
| एमुलेटेड डिवाइस कहाँ चलता है | यूज़रस्पेस | यूज़रस्पेस |
| डिवाइस एक्सेस | प्रत्यक्ष (होस्ट के भीतर) | वर्चुअलाइज़्ड (गेस्ट से होस्ट) |
चित्र 1: फ्रेमवर्क के बीच तुलना
graph LR
subgraph Kernel ["Host Linux Kernel"]
direction TB
RealDriver["Real PCIe Driver"]
subgraph Framework ["PCIem Framework"]
direction TB
Config["PCI Config Space"]
BARs["BARs"]
IRQ["Interrupts"]
DMA["DMA / IOMMU"]
end
end
Interface(("/dev/pciem"))
subgraph User ["Linux Userspace"]
direction TB
Shim["Device Emulation"]
end
Framework <==> Interface
Interface <==> Shim
6.6gcc-12amd64/i386, aarch64, riscvaarch64 नोट: Raspberry Pi 4b पर परीक्षण किया गया, डिवाइस-ट्री (कोई ACPI नहीं)
riscv नोट: VisionFive 2 (डिवाइस-ट्री) और Muse Pi Pro (डिवाइस-ट्री और ACPI) पर परीक्षण किया गया
| वितरण | |||
|---|---|---|---|
| Ubuntu नवीनतम | - | - | |
| Ubuntu 24.04 LTS | |||
| Debian स्थिर | - | - | |
| Fedora नवीनतम | - | - | |
| openSUSE Tumbleweed | - | - |
एक Bochs BGA-संगत (bochs-drm) कार्ड जिसे Weston जैसी यूज़रस्पेस उपयोगिताओं द्वारा चलाया जा सकता है; SDL3 का उपयोग करता है।
https://github.com/user-attachments/assets/d2f7abe4-aef4-4d3a-a30b-ab7ec793faed
NVME नियंत्रक जिसमें 1GB स्टोरेज संलग्न है। उपयोगकर्ता मेमोरी से स्वतंत्र रूप से फ़ॉर्मेट, माउंट, फ़ाइलें बना और हटा सकता है।
https://github.com/user-attachments/assets/29ce370a-7317-4fd4-9d1d-c3e868e1083d
ICH6-संगत एमुलेशन मॉडल जो pipewire के साथ सैंपल चला सकता है।
नोट: रिकॉर्डिंग में हल्की ऑडियो क्रैकलिंग सुनाई देती है, अन्यथा ठीक काम करता है
https://github.com/user-attachments/assets/7264a18c-6fcb-46c4-acde-9531b0be7ff6