簡體   English   中英

我可以使用虛擬機而不是物理機器進行MacOS設備驅動程序開發嗎?

[英]Can I use a virtual machine instead of a physical machine for MacOS device driver development?

我想修改一個MacOS X USB XHCI控制器驅動程序。 據Apple稱,他們強烈建議使用兩台機器進行調試和測試。 不幸的是,我的開發機器有目標硬件,我無法訪問其他合適的機器。

在考慮之后,是否可以為此目的創建和運行虛擬機? 具體來說,我可以讓OS X來賓直接對我的開發主機進行IO訪問嗎?

這里有幾個問題,所以讓我們解開各個部分:

1.虛擬機中的macOS kext開發/測試/調試

這通常很有效。 如果將虛擬串行端口連接到VM,則可以獲取kprintf日志記錄輸出,並且根據模擬的以太網設備,您可以附加lldb內核調試器會話。 我知道這適用於VMWare Fusion和Parallels Desktop。 我已經多年沒有使用VirtualBox,但最后我嘗試過必須使用virtio網絡設備(和驅動程序),因為它模擬默認的intel以太網適配器似乎與OSX的驅動程序的內核調試支持不兼容。 他們可能已經修好了。

如果您將主機啟動到Linux,您還可以在Qemu / KVM虛擬機中運行macOS; 內核調試同樣適用於那里。 (您也可以在macOS上的Qemu中運行它,但這只支持仿真模式,與硬件輔助虛擬化相比,這種模式非常慢。)

2.虛擬機中的設備驅動程序開發/測試/調試

您要么為VM環境模擬的設備編寫驅動程序 - 這種情況相當明顯,當然您可以這樣做。 許多VM環境都可以模擬XHCI主機控制器。

您要問的是訪問物理主機硬件,這通常被稱為傳遞 這是否可行在很大程度上取決於虛擬化環境和設備類型:

  • USB設備直通通常得到很好的支持。 我已經提到的所有虛擬化環境都以某種形式支持這種情況。 對於某些類型的USB設備而言,它比其他類型更好,並且通過一個VM系統無法正常工作的設備可能通過另一個更好地工作。 這種類型的直通發生在USB總線級別 - 然而主機控制器比這更深一級。
  • 如果許多組件結合在一起, PCI(e)設備直通原則上也可以在現代硬件上使用。 你需要:
    1. 具有活動硬件IOMMU的主機系統。 (I / O內存管理單元)英特爾的實現稱為“VT-d”。 Mac通常從英特爾的“Ivy Bridge”核心系列CPU開始使用。 (Core i?-3 ???和更新)我相信一些較舊的Mac Pros(Xeon)也有此功能。 與大多數PC不同,它默認在Mac上的固件中啟用。 這是必需的,以便客戶物理存儲器地址可以透明地傳遞給設備用於DMA目的 - 這些地址與實際主機 - 物理存儲器頁面地址不匹配,並且IOMMU可以在兩者之間進行轉換。 如果沒有這個,來賓VM可以向它不擁有的主機內存發出DMA讀/寫!
    2. 主機操作系統支持IOMMU。 如果可用,macOS默認使用它,主要是為了防御惡意Thunderbolt設備。 它通常需要通過Linux上的內核命令行激活; 我不知道Windows的情況如何。
    3. VM軟件,可以使用IOMMU為PCI設備直通客人。
      • Qemu / KVM可以通過vfio (主機)內核模塊在Linux主機上執行此操作。 我有一些個人經驗,包括macOS客人; 在許多情況下,即使使用一些GPU,它也能很好地工作。
      • VMWare ESXi顯然也支持PCI直通。 (據說如果ESXi在Mac硬件上運行,這包括對macOS客戶的支持)我對此設置沒有個人經驗。
      • macOS主機上的常見桌面虛擬化環境( VMWare Fusion,Parallels Desktop,VirtualBox )據我所知不支持PCI傳遞。
      • 我已經從macOS主機支持PCI直通到xhyve / hyperkit VM guest虛擬機的可行性進行了一些研究 我想我知道該怎么做,但我沒有時間嘗試實現它。 (並且沒有人付錢讓我嘗試😉)即使這樣,你的用例還有兩個障礙就是缺少模擬的幀緩沖設備和xhyve / hyperkit中缺少macOS來賓支持。 但是,如果有足夠的開發人員資源,這兩者都可以相對簡單地解決。

綜上所述:

如果你現在想要這樣做,檢查你的Mac有一個IOMMU,如果有,看起來你有兩個選擇:在它上啟動Linux並使用Qemu / KVM,或使用VMWare ESXi; 在這兩種情況下,創建一些macOS虛擬機(可能是一個用於測試/調試,另一個用於開發/構建你的kexts)並使用vfio將你想要開發驅動程序的設備傳遞給測試VM。

這是否比使用兩台Mac更方便是值得商榷的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM