看板 LinuxDev 關於我們 聯絡資訊
※ 引述《hpeter (hpeter)》之銘言: : 標題: [問題] Virtualbox 產生中斷給 Linux Driver : 時間: Sat Aug 9 13:33:32 2008 : : 請問一下各位先進, 小弟現在在練習 Linux Driver 基本的東西 : : 目前在練習中斷的部份,想用 Print Port 產生中斷給 driver : : 現在練習的環境是用 VirtualBox + Ubuntu 8.04 請問一下要如何 : : 產生個中斷給vm 呢?謝謝 (希望不要動硬體XD) : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 118.165.91.230 : 推 ggg12345:VirtualBox 能令HostOS的LPT介面為interrupt mode嗎? 08/11 00:00 : → ggg12345:理論上沒有不可以的,但 VirtualBox 有這項功能了嗎 ? 08/11 00:02 ========= 在 VM(Virtual Machine) 環境下, guest os 使用到的空間(memory and i/o space)都是虛擬的, 若涉及敏感的(sensitive)部份必須能攔截 (或者說更換)下來再做轉換對映的動作, 以避免實質共用造成的衝突問題. 中斷(interrupt)動作涉及 Disable Interrupt , 因此是個敏感的指令. External Hardware Interrupt 是由外部硬體訊號線觸發, 再由 interrupt controller 與 processor 取得與執行, 其動作相當於在指令 間插入一個 int n 的機器指令(這是 X86 為例). 而中斷處理程式(ISR) 一般都涉及I/O 指令, 必須在 kernel mode 才能有效執行. 如果 printer, printer cable 與 print interface 都是在 VM 下 虛擬的, 這個 print interface 上的 interrupt line signal 就不必經 過 real hardware , 這時候的 VM 就能用軟體在 user mode 檢測與模擬 出這個純虛擬的 interrupt 動作. 不過, 多數的 soft VM 若也需要模擬 到周邊實體裝置時, 通常都不會使用 interrupt I/O 而是使用 polling , 因為虛擬的裝置若沒有 VM Mornitor 的執行是不會產生訊號的, 而目前的 VM Monitor 並非多緒併行, 非同步的 interrupt signal 是不會發生的, 也就沒必要如此煩複的模擬. 不過, 這是觀察與試用去年的眾多 VM 軟體得 來的看法, 新版本可能會有所突破. 假如要讓某個 print port 外接到實體的裝置, 再讓此 print port 與 device 歸 VM 上的 guest os driver 來接受與管理中斷訊號與進行 I/O . 這時候的 VM 軟體就必需有使用該實體 interface port 的 kernel part 可以接收(或者攔截)與處理 real interrupt signal 的代理接管部份. 雖然中斷的發生分為同步與非同步, 也分為硬體觸發與軟體例外事件, 但中斷服務程式的跳轉點都是有限且是已知的, 因此用軟體程式替代就能有 攔截效果. 理論上是最簡易可行的, 但架構與規範卻又涉及保護與下層 Host OS 的關係(這裡指的是像 VMware 的模式), 反而因商業競爭而變得莫衷一 是. 在方法上, 中斷跳轉點的對映關係必然涉及裝置的配屬與效率處理, 可 能硬體廠商(如 intel)會有相當大的主導與干預. 目前通用的做法是設計一個 kernel mode 的 proxy server 來轉接 guest OS driver 所要控制與連通的對象, 該對象可以是虛擬的代用品, 也 可以是專門配屬的實體介面與裝置. 但實體產生的中斷請求因涉及 host os 的管轄, 還是很難定案. ====== 就學習與訓練的立場, 架在硬體之上的 Virtual Machine Mornitor 提 供 VM 可以快速發展 OS (含 driver routine) 軟體, 但這是有硬體支援下 具 full virtualization 能力的機器才可能有這樣的方便. VM 對發展 OS 的優勢就是在程式會出錯的狀況下可以被監測與斷點側錄(snapshot)與接續, 可對故障處快速反覆偵錯, 又因空間的完全隔離, 就因之可藉助已有的 OS 提供各種現有軟體的支援與測試, 是發展與訓練的好工具. 早期的 VM Mornitor 是做在可微程式(microprogrammable)的處理機內 部, 屬於可更動式的微碼, 這是通稱的 vm hardware support , 其功能就攔 截言非常強大. 但現在通行的 VM 則是以事先更動的方式進行敏感指令(並非 出錯的程式碼, 而是有共用硬體衝突顧慮的正確程式碼)的攔截, 因此對出錯 除錯的支援較弱, 甚至是不支援. VirtualBox 是接續 QEMU 的部份技術, 而 QEMU 是將所有指令全攔截 並進行解譯, 採 block translation 技術進行轉換, 可避免重覆解譯, 效 率上比傳統解譯器法高, 同時也可以模擬不同 processor 的指令, 可以跨 不同的 processor 執行, 但效率不能跟硬體支援的 VT 相比. QEMU 理論上 是相當於 microprogramming emulation 的功能, 但實務上得模擬到每個實 體的介面控制器, 因此比只做指令模擬的微碼 VMM 來得複雜, 很多都是將 功能簡化. 中斷動作 多數只有部份裝置被模擬, 而且是將整個 driver routine 替換掉. display , keyborad 與 mouse , 網路卡 就是典型的例 子. 硬體控制與中斷動作若要被完全模擬並且也能讓 guest os 也能在 user space 下與指定的硬體來往, Soft VMM 就必須有下列支援性動作. 1. 有程式指令可對特定硬體裝置與介面進行驅動程式卸載, 將硬體資源管轄 權轉移給VM , 登載註冊是需要的. 2. Soft VM 有核心功能模組可以設定與 host os 共同管理的裝置(如 DMA 與 interrupt controller). 3. Soft VM 透過 in/out port 程式與 callback function point 傳送, 讓 guest os 的 driver 可以在 user space 透過 VM 的 kernel function 使用到硬體, 並且將 interrupt signal 經 vm 通知並進行緊急對應處理. 4. Soft VM 可以重新設定(如 reset)特定的硬體裝置與介面, 可配屬與解除 guest os 使用對映的實體裝置與介面. 5. Soft VM 可隨通知的 signal state 緊急設定, 改變優先執行的模擬次序. ====== Soft VM 提供給 guest OS 的 Machine Environment 跟 敏感指令部位的 入口攔截點是密切相關的, 這是模擬難易度與效率的考量. 所以有可能在 guest os 是 制式 linux 時, 連接實體 printer 是會 work 的, 但若是自 己另外寫的 printer I/O driver 可能就不會 work . 去年的 VirtualBox print port 部份幾乎對real print port 的 polling mode 都不能正常運作, 至於最新版就不知道了, 或許已有改進吧 ! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.4.12
hpeter:謝謝您 原來有這麼大的學問 看來我還是先找找硬體的東西 08/12 22:35
ggg12345:可試試COM1 port 的interrupt 其源頭程式一直就很完整. 08/14 14:57