mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.8 KiB
102 lines
3.8 KiB
What: /sys/firmware/qemu_fw_cfg/ |
|
Date: August 2015 |
|
Contact: Gabriel Somlo <[email protected]> |
|
Description: |
|
Several different architectures supported by QEMU (x86, arm, |
|
sun4*, ppc/mac) are provisioned with a firmware configuration |
|
(fw_cfg) device, originally intended as a way for the host to |
|
provide configuration data to the guest firmware. Starting |
|
with QEMU v2.4, arbitrary fw_cfg file entries may be specified |
|
by the user on the command line, which makes fw_cfg additionally |
|
useful as an out-of-band, asynchronous mechanism for providing |
|
configuration data to the guest userspace. |
|
|
|
The authoritative guest-side hardware interface documentation |
|
to the fw_cfg device can be found in "docs/specs/fw_cfg.txt" |
|
in the QEMU source tree. |
|
|
|
**SysFS fw_cfg Interface** |
|
|
|
The fw_cfg sysfs interface described in this document is only |
|
intended to display discoverable blobs (i.e., those registered |
|
with the file directory), as there is no way to determine the |
|
presence or size of "legacy" blobs (with selector keys between |
|
0x0002 and 0x0018) programmatically. |
|
|
|
All fw_cfg information is shown under: |
|
|
|
/sys/firmware/qemu_fw_cfg/ |
|
|
|
The only legacy blob displayed is the fw_cfg device revision: |
|
|
|
/sys/firmware/qemu_fw_cfg/rev |
|
|
|
**Discoverable fw_cfg blobs by selector key** |
|
|
|
All discoverable blobs listed in the fw_cfg file directory are |
|
displayed as entries named after their unique selector key |
|
value, e.g.: |
|
|
|
/sys/firmware/qemu_fw_cfg/by_key/32 |
|
/sys/firmware/qemu_fw_cfg/by_key/33 |
|
/sys/firmware/qemu_fw_cfg/by_key/34 |
|
... |
|
|
|
Each such fw_cfg sysfs entry has the following values exported |
|
as attributes: |
|
|
|
==== ==================================================== |
|
name The 56-byte nul-terminated ASCII string used as the |
|
blob's 'file name' in the fw_cfg directory. |
|
size The length of the blob, as given in the fw_cfg |
|
directory. |
|
key The value of the blob's selector key as given in the |
|
fw_cfg directory. This value is the same as used in |
|
the parent directory name. |
|
raw The raw bytes of the blob, obtained by selecting the |
|
entry via the control register, and reading a number |
|
of bytes equal to the blob size from the data |
|
register. |
|
==== ==================================================== |
|
|
|
**Listing fw_cfg blobs by file name** |
|
|
|
While the fw_cfg device does not impose any specific naming |
|
convention on the blobs registered in the file directory, |
|
QEMU developers have traditionally used path name semantics |
|
to give each blob a descriptive name. For example:: |
|
|
|
"bootorder" |
|
"genroms/kvmvapic.bin" |
|
"etc/e820" |
|
"etc/boot-fail-wait" |
|
"etc/system-states" |
|
"etc/table-loader" |
|
"etc/acpi/rsdp" |
|
"etc/acpi/tables" |
|
"etc/smbios/smbios-tables" |
|
"etc/smbios/smbios-anchor" |
|
... |
|
|
|
In addition to the listing by unique selector key described |
|
above, the fw_cfg sysfs driver also attempts to build a tree |
|
of directories matching the path name components of fw_cfg |
|
blob names, ending in symlinks to the by_key entry for each |
|
"basename", as illustrated below (assume current directory is |
|
/sys/firmware):: |
|
|
|
qemu_fw_cfg/by_name/bootorder -> ../by_key/38 |
|
qemu_fw_cfg/by_name/etc/e820 -> ../../by_key/35 |
|
qemu_fw_cfg/by_name/etc/acpi/rsdp -> ../../../by_key/41 |
|
... |
|
|
|
Construction of the directory tree and symlinks is done on a |
|
"best-effort" basis, as there is no guarantee that components |
|
of fw_cfg blob names are always "well behaved". I.e., there is |
|
the possibility that a symlink (basename) will conflict with |
|
a dirname component of another fw_cfg blob, in which case the |
|
creation of the offending /sys/firmware/qemu_fw_cfg/by_name |
|
entry will be skipped. |
|
|
|
The authoritative list of entries will continue to be found |
|
under the /sys/firmware/qemu_fw_cfg/by_key directory.
|
|
|