#1929 new enhancement
[feature-request] Allow Custom, per-VM BIOS
回報者: | Technologov | 負責人: | |
---|---|---|---|
元件: | other | 版本: | VirtualBox 1.6.4 |
關鍵字: | 副本: | ||
Guest type: | other | Host type: | other |
描述
Hi All,
Since VBox BIOS is based on Qemu (and Bochs) BIOS, I believe there is no need to hide (encapsulate) VBox BIOS into other files.
I think it would be best to have transparent access to separate BIOS file, and allow different BIOSes for each VM for advanced users.
This feature request is actually 2:
- BIOS should be 1 separate file (for transparency)
- Per-VM BIOS file must be configurable (like Qemu)
-Technologov, 8.8.08 !
更動歷史 (6)
comment:3 16 年 前 由 編輯
It appears that this feature - the ability to specify a different BIOS image - already exists. Here is how you can specify a different BIOS image for virtual machine "MyVM":
VBoxManage setextradata MyVM "VBoxInternal/Devices/pcbios/0/Config/BiosRom" "c:\mybios.rom"
I don't know the default search patch for the file, so I ended up having to specify the full path name.
Using this technique, I managed to get VirtualBox to execute my ROM code, but there is a problem - the ROM image must be exactly 64K. If the ROM image is not a multiple of 64K, VirtualBox (version 2.1.0) falls back to the built-in BIOS image.
If the ROM image is a multiple of 64K and larger than 64K, VirtualBox aborts. The log message says:
PDM: Failed to construct 'pcibios/0! VERR_PGM_HANDLER_PHYSICAL_CONFLICT (-1603) - Attempt to register an access handler for a physical range of which a part was already handled.
By examining logs under other circumstances and reading the code in DevPcBios.cpp (round about line 1614), I have a guess about what is going on:
If the image is larger than 64K, the code in DevPcBios.cpp tries to map the last 128K of the BIOS image at address range 0xe0000 .. 0xfffff (and it would also try to map the whole image at the very top of physical address space, e.g. at 0xfff80000 .. 0xffffffff for a 512K image). However, there is already something in the 0xeXXXX range, specifically:
e0000 - e0fff ACPI RSDP e1000 - e1fff DMI tables e2000 - edfff Net Boot ROM
So it would appear that DevPcBios.cpp needs to be a bit more subtle about mapping the last 128K. Perhaps the ACPI, DMI, and Net Boot stuff should be discarded if a custom ROM overlays those areas, under the assumption that if you are going to take over the BIOS, it is your responsibility to supply that functionality.
Mitch Bradley
comment:4 16 年 前 由 編輯
There is a "quick fix" that would probably work to enable > 64K BIOS images, assuming that such images don't need the low-meg mapping in the 0xeXXXX range:
DevPcBios.cpp line 1613 says:
cb = RT_MIN(cbPcBiosBinary, 128 * _1K); /* Effectively either 64 or 128K. */
Replacing 128 with 64 would eliminate the (failing) attempt to map the already-populated 0xeXXXX range, while retaining the important mapping to the 0xfffXXXXX range.
Firmware like Open Firmware and Coreboot don't need the low-meg footprint, so the quick fix would probably enable their use.
Even in closed source products like vmware you can change the bios. The original one is buld in but you can specify another one in settings.
Please ad this