Как узнать размер ROM?
В Windows, как я могу увидеть емкость чипа ПЗУ, установленного на моем компьютере, для хранения UEFI/BIOS? Я бы предпочел способ использовать инструмент или команду Windows без установки какого-либо другого приложения.
3 ответа
Чтение информации SMBIOS
Из Википедии:
В вычислительной технике спецификация BIOS для управления системой (SMBIOS) определяет структуры данных (и методы доступа), которые можно использовать для считывания информации, хранящейся в BIOS компьютера. Приблизительно в 1999 году он стал частью рабочей группы по распределенному управлению (DMTF). [...] Примерно в то же время Microsoft начала требовать от OEM-производителей и поставщиков BIOS поддержки интерфейса / набора данных для получения сертификации Microsoft.
Источник: Система управления BIOS
Информация SMBIOS хранится в разных таблицах данных; первый (тип 0) содержит основные сведения, такие как поставщик, версия и дата выпуска. Размер физического устройства, содержащего BIOS, соответствует одному байту, который расположен в самом начале. 0x9
указанного стола.
Фактический размер может быть рассчитан следующим образом:
64K * (value + 1)
Значение 0
означает, что размер составляет 64 КиБ, 1
означает 128 КиБ и так далее.
Насколько я знаю, Windows не предоставляет встроенную утилиту, которая может извлекать определенные данные SMBIOS, такие как размер ROM. Вы все еще можете написать сценарий самостоятельно, хотя; см. ниже некоторые рабочие примеры. В качестве альтернативы вы можете использовать стороннюю программу, например 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.
Источник: Устройство \ Объект PhysicalMemory
Драйвер [SMBIOS] также сохраняет эту информацию в реестре по адресу
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mssmbios\Data
, Хотя информация SMBIOS хранится в реестре в этом месте, потребители должны продолжать использовать WMI илиGetSystemFirmwareTable()
API для извлечения данных SMBIOS. Нет никакой гарантии, что эта информация будет храниться в этом подразделе реестра для каждого последующего выпуска Windows.Источник: поддержка SMBIOS в Windows
дальнейшее чтение
Я не думаю, что вы можете, по крайней мере, ни в коем случае.
По сути, это потому, что размер кода BIOS не предоставляет никакой полезной информации для вас, пользователя. BIOS в IBM PC-совместимом компьютере имеет несколько основных обязанностей, большинство из которых применимы и к другим платформам, но могут быть реализованы по-другому:
- Он выполняет самотестирование при включении питания (POST)
- Это делает базовое аппаратное обнаружение и инициализацию
- Он устанавливает базовую среду выполнения, особенности которой восходит к исходному ПК IBM 5150 с 1981 года (ЦП находится в реальном режиме, несколько регистров ЦП инициализируются с известными значениями, а несколько флагов ЦП устанавливаются с известными значениями).
- Он предоставляет операционной системе (очень примитивные) аппаратные средства доступа и обнаружения; они не используются современными операционными системами, либо из-за технических ограничений ЦП (например, нелегкий способ переключения из длинного режима), либо из-за ограничений производительности (переключение назад и вперед в реальный режим или режим V86 для выполнения -битный код 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 КБ. Я где-то читал анекдот о том, что в ранних клонах IBM PC BIOS чистых помещений хотя бы однажды вовлеченные люди задавались вопросом, не упустили ли они что-то, поскольку они смогли сделать это с помощью значительно меньшего количества кода.
И, конечно, это полностью игнорирует возможность наличия других прошивок в системе, кроме BIOS компьютера. Видеокарты, сетевые карты, платы контроллеров дисков и все другие периферийные устройства имеют свои собственные BIOS, которые с точки зрения реализации полностью отделены от BIOS на материнской плате, как веб-браузер (или должен быть) полностью отдельно от операционной системы.
В Linux вы можете найти емкость флэш-памяти множеством способов. Команда dmidecode предоставляет много полезной информации о BIOS, включая емкость чипа. Я наконец обнаружил, что это 1 МБ. Я предлагаю всем либо взглянуть на свою материнскую плату, либо попробовать live CD с linux.