最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

[QEMU]QEMU 固件配置 (fw_cfg) 設(shè)備

2022-07-20 17:55 作者:-小白之家-  | 我要投稿

來(lái)賓端硬件接口

此硬件接口允許客戶(hù)機(jī)檢索各種數(shù)據(jù)項(xiàng)(blob),這些數(shù)據(jù)項(xiàng)可能會(huì)影響固件本身的配置方式,或者可能包含要為客戶(hù)機(jī)操作系統(tǒng)安裝的表。示例包括設(shè)備啟動(dòng)順序、ACPI 和 SMBIOS 表、虛擬機(jī) UUID、SMP 和 NUMA 信息、用于直接 (Linux) 內(nèi)核啟動(dòng)的內(nèi)核/初始化映像等。

選擇器(控制)寄存器

  • 只寫(xiě)

  • 位置:取決于平臺(tái)(IOport 或 MMIO)

  • 寬度:16 位

  • 字節(jié)序:小端序(如果 IOport)或大端序(如果 MMIO)

寫(xiě)入此寄存器可設(shè)置固件配置項(xiàng)目的索引,隨后可以通過(guò)數(shù)據(jù)寄存器訪問(wèn)該項(xiàng)目。

設(shè)置選擇器寄存器將導(dǎo)致數(shù)據(jù)偏移量設(shè)置為零。數(shù)據(jù)偏移量會(huì)影響通過(guò)數(shù)據(jù)寄存器訪問(wèn)哪些數(shù)據(jù),下面將對(duì)此進(jìn)行說(shuō)明。

選擇器寄存器的 Bit14 指示是否正在寫(xiě)入配置設(shè)置。值為 0 表示僅讀取項(xiàng)目,并且將忽略對(duì)數(shù)據(jù)端口的所有寫(xiě)入訪問(wèn)權(quán)限。值為 1 表示可以通過(guò)寫(xiě)入數(shù)據(jù)寄存器來(lái)覆蓋項(xiàng)目的數(shù)據(jù)。換言之,當(dāng)選擇器值介于 0x4000 0x7fff 或 0xc000 0xffff 之間時(shí),將啟用配置寫(xiě)入模式。

注意

從 QEMU v2.4 開(kāi)始,不再支持寫(xiě)入 fw_cfg 數(shù)據(jù)寄存器,并且將被忽略(被視為無(wú)操作)!

注意

從 QEMU v2.9 開(kāi)始,寫(xiě)入操作將恢復(fù),但只能通過(guò) DMA 接口恢復(fù)(見(jiàn)下文)。此外,任何特定項(xiàng)目的可寫(xiě)性在選擇器鍵值中獨(dú)立于 Bit14 進(jìn)行控制。

選擇器寄存器的 Bit15 指示配置設(shè)置是否特定于體系結(jié)構(gòu)。值為 0 表示該項(xiàng)是通用配置項(xiàng)。值為 1 表示該項(xiàng)特定于特定體系結(jié)構(gòu)。換言之,通用配置項(xiàng)目使用介于 0x0000-0x7fff 之間的選擇器值進(jìn)行訪問(wèn),而體系結(jié)構(gòu)特定的配置項(xiàng)目使用介于 0x8000-0xffff 之間的選擇器值進(jìn)行訪問(wèn)。

數(shù)據(jù)寄存器

  • 讀/寫(xiě)(自 QEMU v2.4 起忽略寫(xiě)入,但請(qǐng)參閱 DMA 接口)

  • 位置:取決于平臺(tái)(IOport)1或 MMIO)

  • 寬度:8 位(如果是 IOport),8/16/32/64 位(如果是 MMIO)

  • 字節(jié)序:字符串保留

  • 1

  • 在將數(shù)據(jù)寄存器公開(kāi)為 IOport 的平臺(tái)上,其端口號(hào)將始終比選擇器寄存器的端口號(hào)大 1。換句話說(shuō),兩個(gè)端口重疊,不能單獨(dú)映射。

數(shù)據(jù)寄存器允許訪問(wèn)每個(gè)固件配置數(shù)據(jù)項(xiàng)的字節(jié)數(shù)組。通過(guò)寫(xiě)入選擇器寄存器來(lái)選擇特定項(xiàng)目,如上所述。

最初,在寫(xiě)入選擇器寄存器后,數(shù)據(jù)偏移量將設(shè)置為零。每次成功訪問(wèn)數(shù)據(jù)寄存器都會(huì)將數(shù)據(jù)偏移量增加適當(dāng)?shù)脑L問(wèn)寬度。

每個(gè)固件配置項(xiàng)目都有與該項(xiàng)目關(guān)聯(lián)的最大數(shù)據(jù)長(zhǎng)度。在數(shù)據(jù)偏移量超過(guò)此最大數(shù)據(jù)長(zhǎng)度的末尾后,任何讀取都將返回0x00的數(shù)據(jù)值,并且將忽略所有寫(xiě)入。

數(shù)據(jù)寄存器的 N 字節(jié)寬讀取將以子字符串的形式返回所選固件配置項(xiàng)的下一個(gè)可用 N 字節(jié),地址順序遞增,類(lèi)似于 memcpy()。

注冊(cè)位置

  • x86, x86_64


    • 選擇器寄存器 IOport:0x510

    • 數(shù)據(jù)寄存器 IOport:0x511

    • DMA 地址 IOport: 0x514

  • 手臂


    • 選擇器寄存器地址:基數(shù) + 8(2 字節(jié))

    • 數(shù)據(jù)寄存器地址:基數(shù) + 0(8 字節(jié))

    • DMA 地址地址:基本地址 + 16(8 字節(jié))

接口

fw_cfg設(shè)備使用 ACPI ID 定義。由于我們希望 ACPI 表通過(guò)fw_cfg設(shè)備本身傳遞到來(lái)賓中,因此來(lái)賓端固件無(wú)法使用 ACPI 查找fw_cfg。但是,固件完成 ACPI 表的設(shè)置并將控制權(quán)移交給來(lái)賓內(nèi)核后,后者可以使用 fw_cfg ACPI 節(jié)點(diǎn)來(lái)更準(zhǔn)確地列出正在使用的 IOport 或 MMIO 區(qū)域。QEMU0002

固件配置項(xiàng)

簽名(密鑰0x0000,FW_CFG_SIGNATURE)

通過(guò)使用密鑰0x0000()選擇“簽名”項(xiàng),并從數(shù)據(jù)寄存器讀取四個(gè)字節(jié),可以驗(yàn)證fw_cfg選擇器和數(shù)據(jù)寄存器的存在。如果fw_cfg設(shè)備存在,則讀取的四個(gè)字節(jié)將包含字符 。FW_CFG_SIGNATUREQEMU

如果 DMA 接口可用,則讀取 DMA 地址寄存器將返回0x51454d5520434647(大端格式)。QEMU?CFG

修訂/特征位圖(鍵0x0001,FW_CFG_ID)

此項(xiàng)是一個(gè) 32 位小端序無(wú)符號(hào) int,用于檢查已啟用的功能。

  • 位 0:傳統(tǒng)接口。始終設(shè)置。

  • 位 1:DMA 接口。

文件目錄(密鑰0x0019,FW_CFG_FILE_DIR)

存儲(chǔ)在選擇器鍵0x0020或更高(或更高)處的固件配置項(xiàng)在目錄結(jié)構(gòu)中具有關(guān)聯(lián)的條目,這使得來(lái)賓端固件更容易識(shí)別和檢索它們。此文件目錄的格式(來(lái)自 QEMU 源代碼樹(shù)中)如下所示,為清楚起見(jiàn),略帶注釋?zhuān)?code class="docutils literal notranslate">FW_CFG_FILE_FIRSTfw_cfg.h

struct FWCfgFiles { ? ? ? ? /* the entire file directory fw_cfg item */ ? ?uint32_t count; ? ? ? ? /* number of entries, in big-endian format */ ? ?struct FWCfgFile f[]; ? /* array of file entries, see below */};struct FWCfgFile { ? ? ? ? ?/* an individual file entry, 64 bytes total */ ? ?uint32_t size; ? ? ? ? ?/* size of referenced fw_cfg item, big-endian */ ? ?uint16_t select; ? ? ? ?/* selector key of fw_cfg item, big-endian */ ? ?uint16_t reserved; ? ?char name[56]; ? ? ? ? ?/* fw_cfg item name, NUL-terminated ascii */};

所有其他數(shù)據(jù)項(xiàng)

請(qǐng)查閱 QEMU 源代碼,了解最新、最權(quán)威的選擇器鍵列表及其各自項(xiàng)目的用途、格式和可寫(xiě)性。

范圍

從理論上講,可能最多有0x4000個(gè)通用固件配置項(xiàng),以及最多0x4000個(gè)特定于體系結(jié)構(gòu)的固件配置項(xiàng)。

選擇器注冊(cè)

范圍使用情況

0x0000 - 0x3fff

通用(0x0000 - 0x3fff,通常是 RO,可能通過(guò) QEMU v2.9+ 中的 DMA 接口進(jìn)行 RW)

0x4000 - 0x7fff

通用(0x0000 - 0x3fff,RW,在 QEMU v2.4+ 中忽略)

0x8000 - 0xbfff

特定 (0x0000 - 0x3fff,通常是 RO,可能通過(guò) QEMU v2.9+ 中的 DMA 接口進(jìn)行 RW)

0xc000 - 0xffff

特定(0x0000 - 0x3fff,RW,在 v2.4+中忽略)

實(shí)際上,允許的固件配置項(xiàng)目的數(shù)量取決于計(jì)算機(jī)類(lèi)型/版本。

來(lái)賓端 DMA 接口

如果設(shè)置了特征位圖的位 1,則存在 DMA 接口。這不會(huì)取代現(xiàn)有的fw_cfg界面,它是一個(gè)附加組件。此接口可通過(guò) 64 位寬地址寄存器使用。

地址寄存器采用大端格式。寄存器的值為 0,在啟動(dòng)時(shí)和操作之后。寫(xiě)入最低有效值的一半(偏移量為 4 時(shí))會(huì)觸發(fā)操作。這意味著具有 32 位地址的操作只需一次寫(xiě)入即可觸發(fā),而具有 64 位地址的操作可以通過(guò)一次 64 位寫(xiě)入或兩次 32 位寫(xiě)入來(lái)觸發(fā),從最高有效部分(偏移量 0 處)開(kāi)始。

在此寄存器中,應(yīng)寫(xiě)入RAM中結(jié)構(gòu)的物理地址。這是結(jié)構(gòu)的格式:FWCfgDmaAccessFWCfgDmaAccess

typedef struct FWCfgDmaAccess { ? ?uint32_t control; ? ?uint32_t length; ? ?uint64_t address;} FWCfgDmaAccess;

結(jié)構(gòu)的字段處于大端模式,最低地址的字段為字段。control

該字段具有以下位:control

  • 位 0:錯(cuò)誤

  • 第 1 位:讀取

  • 第 2 位:跳過(guò)

  • 第 3 位:選擇。上面的 16 位是選定的索引。

  • 第 4 位:寫(xiě)入

觸發(fā)操作時(shí),如果字段設(shè)置了位 3,則上面的 16 位將解釋為固件配置項(xiàng)目的索引。這與編寫(xiě)選擇器寄存器具有相同的效果。control

如果字段設(shè)置了位 1,則將執(zhí)行讀取操作。 當(dāng)前選擇器和偏移量的字節(jié)將被復(fù)制到字段指定的物理 RAM 地址中。controllengthaddress

如果字段設(shè)置了位 4(而不是位 1),則將執(zhí)行寫(xiě)入操作。 字節(jié)將從字段指定的物理 RAM 地址復(fù)制到當(dāng)前選擇器和偏移量。QEMU 可防止在與當(dāng)前選擇器關(guān)聯(lián)的項(xiàng)目結(jié)束之后開(kāi)始或完成寫(xiě)入(即,無(wú)法調(diào)整項(xiàng)目大小)。截?cái)嗟膶?xiě)入將完全刪除。對(duì)只讀項(xiàng)目的寫(xiě)入也會(huì)被拒絕。所有這些寫(xiě)入錯(cuò)誤都將位 0(錯(cuò)誤位)設(shè)置為字段。controllengthaddresscontrol

如果字段設(shè)置了位 2(既不設(shè)置位 1 也不設(shè)置位 4),則將執(zhí)行 skip 操作。當(dāng)前選擇器的偏移量將是高級(jí)字節(jié)。controllength

要檢查結(jié)果,請(qǐng)閱讀以下字段:control

  • 錯(cuò)誤位設(shè)置

  • 出了點(diǎn)問(wèn)題。

  • 清除所有位

  • 傳輸已成功完成。

  • 否則

  • 傳輸仍在進(jìn)行中(由于實(shí)現(xiàn)不是異步的,因此今天不會(huì)發(fā)生,但將來(lái)可能會(huì)發(fā)生)。

外部提供的項(xiàng)目

從 v2.4 開(kāi)始,“file”fw_cfg項(xiàng)(即,上面帶有選擇器鍵的項(xiàng)目,以及fw_cfg文件目錄結(jié)構(gòu)中具有相應(yīng)條目的項(xiàng)目)可以通過(guò) QEMU 命令行插入,使用以下語(yǔ)法:FW_CFG_FILE_FIRST

-fw_cfg [name=]<item_name>,file=<path>

藝術(shù)

-fw_cfg [name=]<item_name>,string=<string>

從 v5.1 開(kāi)始,QEMU 允許某些對(duì)象生成特定于fw_cfg的內(nèi)容,然后使用以下語(yǔ)法,使用命令行中的“gen_id”選項(xiàng)將內(nèi)容與“文件”項(xiàng)相關(guān)聯(lián):

-object <generator-type>,id=<generated_id>,[generator-specific-options] \-fw_cfg [name=]<item_name>,gen_id=<generated_id>

有關(guān)更多文檔,請(qǐng)參見(jiàn) QEMU 手冊(cè)頁(yè)。

建議僅使用純 ASCII 字符的item_name。

以 開(kāi)頭的項(xiàng)目名稱(chēng)是為用戶(hù)保留的。QEMU 永遠(yuǎn)不會(huì)創(chuàng)建具有此類(lèi)名稱(chēng)的條目,除非用戶(hù)明確排序。opt/

為避免不同用戶(hù)之間發(fā)生沖突,強(qiáng)烈建議您使用以 開(kāi)頭的名稱(chēng),其中 RFQDN 是您控制的反向完全限定域名。例如,如果SeaBIOS想要定義其他名稱(chēng),則前綴將是合適的。opt/RFQDN/opt/org.seabios/

由于歷史原因,是為 OVMF 固件保留的。opt/ovmf/

前綴是為 QEMU 本身保留的。opt/org.qemu/

使用不以 開(kāi)頭的名稱(chēng)具有潛在危險(xiǎn)性,并且完全不受支持。QEMU 將警告您嘗試。opt/

使用不以開(kāi)頭的名稱(chēng)是可以容忍的“gen_id”(即,警告被抑制),但您必須確切地知道自己在做什么。opt/

所有外部提供fw_cfg項(xiàng)目對(duì)客人都是只讀的。


[QEMU]QEMU 固件配置 (fw_cfg) 設(shè)備的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
乡宁县| 彭阳县| 敦化市| 资兴市| 筠连县| 米林县| 泸溪县| 昭平县| 平遥县| 城口县| 乌拉特后旗| 大连市| 岳西县| 扶余县| 利津县| 霍邱县| 阳高县| 新昌县| 尚志市| 栖霞市| 呼伦贝尔市| 肇东市| 锡林郭勒盟| 隆尧县| 桃源县| 广州市| 黎川县| 万荣县| 枣强县| 千阳县| 大悟县| 册亨县| 大埔区| 白城市| 黄冈市| 原平市| 丽江市| 万年县| 新平| 泰和县| 乌恰县|