How to run OVMF - Wayne777Chiu/Chinese_Practice_about_TianoCore GitHub Wiki
(2019/03/08)
如何運行 OVMF 用 QEMU 或 KVM。
為了要運行 OVMF 在 QEMU,你必須要有 QEMU 版本 0.9.1 或更新的安裝在你的系統上。
在 Debian/Ubuntu上安裝: sudo apt-get qemu
預先建置的映像檔是可被找到於 https://www.kraxel.org/repos/
- 這些映像檔是自動被建置和追蹤在 EDK II樹中的最新版的 OVMF 源碼。
- 這些建置中的一些包含了一個 seabios CSM 和能開機於非 UEFI “legacy” 作業系統上。(注意: seabios 是 GPLv3 授權)
- 假如你的作業系統不適用於RPM 套件庫,那麼你要手動下載和解壓縮 RPM 檔在 jenkins/edk2 之下。
確保匹配給 OVMF 的處理器架構與 QEMU 的正確處理器架構。
對 OVMF 的 IA32 建置,有一點點更多的選擇,因為 X64 處理器也相容於IA32。因此,對 OVMF 的 IA32 建置,你能使用以下的命令: qemu, qemu-system-i386 或 qemu-system-x86_64 。
對 OVMF 的 X64 建置,然而, 你只能使用 qemu-system-x86_64 命令。
用 QEMU 使用 OVMF,我們利用 -L QEMU 命令列參數。 這個參數綴取一個目錄路徑,QEMU 將從該目錄讀取 bios.bin。
例如:
bash$ mkdir ~/run-ovmf
bash$ cd ~/run-ovmf
接下來,複製 OVMF.fd 檔到這個目錄下,但是將 OVMF.fd 更改檔名成 bios.bin:
bash$ cp /path/to/ovmf/OVMF.fd bios.bin
(QEMU 能轉換目錄裡的內容到硬碟映像檔 '立即')
bash$ mkdir hda-contents
這裡是一個命令的例子:
bash$ qemu-system-x86_64 -L . -had fat:hda-contents
假如每件事都順利的話,你應該能看到一個圖形的 logo,和 UEFI 殼層 (shell) 應該開始。
注意: iPXE 在最近 QEMU 的版本中是啟動的,因此假如有合法的網路接收器被偵測到可能會嘗試網路開機。 要關閉 iPXE,在命令列上增加 -net none
。
到 OVMF.fd
映像檔的路徑能被直接提供在命令列上,而不用複製到其他目錄。 一個使用 GCC5 的偵錯映像檔建置且關閉 iPXE 的例子:
qemu-system-x86_64 -L . --bios ~/src/edk2/Build/VvmfX64/DEBUG_GCC5/FV/OVMF.fd -net none
qemu-system-x86_64 -pflash bios.bin -hda fat:hda-contents -net none
(謹防 QEMU 創建一次虛擬 FAT 表,當主機離開同步後 QEMU 可能會弄擰)
qemu-system-x86_64 -pflash bios.bin -hda fat:rw:hda-contents -net none
雖然最新版的 OVMF 現在應該支持最新版的 KVM,當使用KVM時仍然可能有機會面臨到問題。 假如 OVMF 無法在 QEMU (KVM 開啟狀態) 上開機,試著關閉 KVM。
#原文
How to run OVMF with QEMU or KVM.
In order to run OVMF with QEMU, you must have QEMU version 0.9.1 or newer installed on your system.
To install on Debian/Ubuntu: sudo apt-get install qemu
You can build OVMF based on the latest version of EDK II.
Pre-built images are available at https://www.kraxel.org/repos/
- These images are automatically built and track the latest OVMF code in the EDK II tree.
- Some of these builds include a seabios CSM and can boot non-UEFI “legacy” operating systems. Note: seabios is GPLv3 licensed)
- If your OS doesn’t work with RPM repositories, then you can manually download and decompress the RPM files under jenkins/edk2
Be sure to align the processor architecture for OVMF with the proper processor archtecture of QEMU.
For the IA32 build of OVMF, there is a little more choice, since the X64 processor is also compatible with IA32. Therefore, with the IA32 build of OVMF, you can use the following commands: qemu, qemu-system-i386 or qemu-system-x86_64.
For the X64 build of OVMF, however, you can only use the qemu-system-x86_64 command.
To use OVMF with QEMU, we utilize the -L QEMU command line parameter. This paramter takes a directory path, and QEMU will load the bios.bin from this directory.
For example:
bash$ mkdir ~/run-ovmf
bash$ cd ~/run-ovmf
Next, copy the OVMF.fd file into this directory, but rename OVMF.fd to bios.bin:
bash$ cp /path/to/ovmf/OVMF.fd bios.bin
(QEMU can turn the contents of a directory into a disk image 'on-the-fly'):
bash$ mkdir hda-contents
Here is a sample command:
bash$ qemu-system-x86_64 -L . -hda fat:hda-contents
If everything goes well, you should see a graphic logo, and the UEFI shell should start.
Note: iPXE is enabled on recent builds of QEMU, and may try to network boot if a valid network adapter is detected. To disable iPXE, add -net none
to the command line.
The path to the OVMF.fd
image can be directly provided on the command line, rather than copying to another directory. Example for debug image built using GCC5, with iPXE disabled:
qemu-system-x86_64 -L . --bios ~/src/edk2/Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd -net none
qemu-system-x86_64 -pflash bios.bin -hda fat:hda-contents -net none
(Beware that QEMU makes the virtual FAT table once and host could get out of sync and QEMU might get confused)
qemu-system-x86_64 -pflash bios.bin -hda fat:rw:hda-contents -net none
Although the latest versions of OVMF should now support the latest versions of KVM, there is still a chance that you might encounter issues when using KVM. If OVMF fails to boot on QEMU (with KVM), try disabling KVM.