В Windows, как я могу узнать емкость микросхемы ПЗУ, установленной на моем компьютере для хранения UEFI/BIOS? Я бы предпочел способ с использованием инструмента или команды Windows без установки какого-либо другого приложения.
решение1
Чтение информации SMBIOS
Из Википедии:
Ввычисление,BIOS управления системой(SMBIOS) спецификация определяетструктуры данных(и методы доступа), которые можно использовать для чтения информации, хранящейся вБИОСизкомпьютер. Около 1999 года он стал частью доменаЦелевая группа по распределенному управлению(DMTF). [...] Примерно в то же времяМайкрософтначали требовать, чтобыOEM-производителии поставщики BIOS поддерживают интерфейс/набор данных, чтобы иметь возможность использовать Microsoftсертификация.
Источник:BIOS управления системой
Информация SMBIOS хранится в разных таблицах данных; первая из них (тип 0) содержит основные данные, такие как поставщик, версия и дата выпуска. Размер физического устройства, содержащего BIOS, соответствует одному байту, который находится воффест 0x9
указанной таблицы.
Фактический размер можно рассчитать следующим образом:
64K * (value + 1)
Значение 0
означает, что размер равен 64.КиБ, 1
означает 128 КиБ и т. д.
Насколько мне известно, Windows не предоставляет встроенной утилиты, которая может извлекать определенные данные SMBIOS, такие как размер ПЗУ. Вы все равно можете написать скрипт самостоятельно; ниже приведены некоторые рабочие примеры. В качестве альтернативы вы можете использовать стороннюю программу, напримерdmidecode
порт Windows.
Пакетный скрипт
@echo off
setlocal enabledelayedexpansion
set key=HKLM\SYSTEM\CurrentControlSet\services\mssmbios\Data
for /f "tokens=3" %%G in (
'reg query "%key%" /v "SMBiosData" ^| findstr /i /c:"REG_"'
) do (
set "size=%%~G"
set /a size=64 * 0x!size:~34,2! + 64
)
echo ROM Size: %size% KiB
PAUSE
exit /b
VBScript
Set tables = GetObject("winmgmts:\\.\root\wmi").ExecQuery _
("SELECT * FROM MSSmBios_RawSMBiosTables")
For Each obj In tables
WScript.Echo "ROM Size: " & (64 * obj.SMBiosData(9) + 64) & " KiB"
Next
PowerShell
$tables = Get-WmiObject -ComputerName . -Namespace root\wmi -Query "
SELECT * FROM MSSmBios_RawSMBiosTables"
foreach ($obj in $tables)
{
echo $("ROM Size: " + (64 * $obj.SMBiosData[9] + 64) + " KiB")
}
Замечания
Инструментарий управления Windows (WMI) является предпочтительным методом чтения информации SMBIOS в Windows.
Источник:Устройство\Объект Физической Памяти
Драйвер [SMBIOS] также сохраняет эту информацию в реестре в
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mssmbios\Data
. Хотя информация SMBIOS хранится в реестре в этом месте, потребители должны продолжать использовать WMI илиGetSystemFirmwareTable()
API для извлечения данных SMBIOS. Нет никакой гарантии, что эта информация будет храниться в этом подразделе реестра для каждого последующего выпуска Windows.Источник:Поддержка SMBIOS в Windows
дальнейшее чтение
решение2
Я не думаю, что ты сможешь,по крайней мере, не в какой-либо общей форме.
В основном, это потому, чторазмер кода BIOS не несет никакой полезной информацииВам, пользователю.BIOS в IBM PC-совместимом компьютереимеет несколько основных обязанностей, большинство из которых применимы и к другим платформам, но могут быть реализованы по-разному:
- Выполняет самотестирование при включении питания (POST)
- Он выполняет базовое обнаружение и инициализацию оборудования.
- Он устанавливает базовую среду выполнения, специфика которой восходит коригинальный IBM 5150 ПКс 1981 года (процессор находится вреальный режим, несколько регистров ЦП инициализируются известными значениями, а несколько флагов ЦП устанавливаются известными значениями)
- Он предоставляет операционной системе (очень примитивные) средства доступа к оборудованию и обнаружения; они не используются современными операционными системами либо из-за технических ограничений ЦП (нет простого способа отключениядлинный режим, например) или из-за ограничений производительности (переключение туда и обратно на реальный илиРежим V86выполнение 16-битного кода BIOS занимает много времени, поэтому быстрее оставаться в защищенном или долгом режиме и просто сделать это самостоятельно в ОС)
- Он загружает загрузчик первой стадии операционной системы в известное фиксированное место в оперативной памяти и передает ему выполнение.
- Он предоставляет пользовательский интерфейс для настройки основных параметров системы; строго говоря, это необязательно, иBIOS 1980-х годов часто не имелипредоставить такой интерфейс, вместо этого полагаясь напрограммное обеспечение поставляется отдельноили на оборудованииDIP-переключателидля настройки даже таких базовых параметров системы, как тип видеокарты и объем установленной оперативной памяти
Ни в одном из этих случаев нет никакой выгоды для пользователя в том, чтобы знать, сколько кода используется для реализации этих задач. В ранние дни (мы говорим о DOS до Windows 3.0 до 3.1, то есть с начала 1980-х до начала 1990-х годов) BIOS часто использовался для выполнения базовых функций, и поэтому размер кода BIOS могпотенциальнохотя бы отчасти соответствуют производительности, но в современных компьютерах BIOS в основном низведен до роли операционной системыбутстраппери интерфейс конфигурации оборудования низкого уровня. Кроме того, в компьютерах той эпохи, если код BIOS вообще можно было заменить, это можно было сделать, физически удалив и переустановив микросхемы ПЗУ на материнской плате;флэш-обновляемые BIOSявляются гораздо более поздним изобретением.
Вы сравните это с поиском размера запоминающих устройств или оперативной памяти. Разница в том, чтоВозможность определить их размер на самом деле говорит вам, пользователю, кое-что важное:Объем доступного дискового пространства (на каждое устройство или в совокупности) является определяющим фактором того, сколько данных вы сможете хранить на компьютере, а размер оперативной памяти является одним из определяющих факторов того, с каким объемом данных вы сможете работать одновременно и насколько быстро будет осуществляться работа с этими данными.
Тыможет,в принципе, зайдите на сайт производителя конкретной материнской платы и поищите там загружаемые образы обновления BIOS. Размер этих файлов образов с большой долей вероятности будет соответствовать размеру чипа флэш-ПЗУ, содержащего код BIOSна этой конкретной материнской плате.Я думаю, что сегодня обычный размер составляет порядка нескольких мегабайт;оригинальный BIOS для ПК IBM 5150 имел размер 8 КБи начиная с XT (IBM 5160) в IBM это было увеличено до 32 КБ. Я где-то читал анекдот о том, что ранние клоны BIOS для IBM PC в чистых комнатах по крайней мере однажды заставили людей задуматься, не упускают ли они чего-то, поскольку они могли сделать это с помощью значительно меньшего количества кода.
И, конечно, это полностью игнорирует возможностьв системе есть другие прошивкипомимо BIOS ПК. Видеокарты, сетевые карты, карты контроллеров дисков и всякие другие периферийные устройствапредоставляют свои собственные BIOSкоторые с точки зрения реализации полностью отделены от BIOS ПК на материнской плате, точно так же, как веб-браузер полностью отделен (или должен быть отделен) от операционной системы.
решение3
В Linux можно узнать емкость flash rom множеством способов. Команда dmidecode предоставляет много полезной информации о BIOS, включая емкость его чипа. В конце концов я обнаружил, что она составляет 1 МБ. Я предлагаю всем либо взглянуть на свою материнскую плату, либо попробовать live CD с Linux.