Я хочу записать данные BIOS моего ноутбука в файл. Единственное решение, которое я нашел, это следующая команда:
dd if=/dev/mem bs=X skip=Y count=1
Xи Yразные в предложенных решениях от разных людей, потому что есть разные типы BIOS.
Есть ли способ узнать точный адрес данных BIOS /dev/mem? Можно ли использовать, dmidecodeчтобы найти диапазон адресов BIOS в памяти? И выдает ли Linux все данные BIOS в ОЗУ или только специальную часть?
Если Linux может записывать данные BIOS в ОЗУ, может ли пользователь root также напрямую обращаться к BIOS?
Это утилита командной строки, которая анализирует память BIOS и печатает информацию обо всех структурах (или точках входа), о которых она знает. Он находит информацию об оборудовании, такую как:
Устройство IPMI
Тип памяти и скорость
Информация о шасси
Датчик температуры
Охлаждающее устройство
Зонд электрического тока
Информация о процессоре и памяти
Серийные номера
Версия BIOS
Слоты PCI / PCIe и скорость
и т.п.
Что нужно учитывать:
biosdecodeанализирует память BIOS и печатает информацию обо всех структурах.
Декодирование данных BIOS аналогично дампированию DMI компьютера . Таблица DMI в основном описывает, из чего состоит система.
Данные предоставлены biosdecodeне в удобочитаемом формате.
Просмотр содержимого на экране
Вам нужно будет использовать dmidecodeкоманду для вывода содержимого таблицы DMI (SMBIOS) компьютера на экран.
$ sudo dmidecode --type 0
Поиск man-страницы для получения дополнительной информации:
$ man dmidecode
Да, ядро хранит в ОЗУ только ту информацию, которая ему нужна из BIOS. Однако вы можете в реальном времени выполнять вызовы BIOS от пользователя root с помощью приложений на языке C, которые включают встроенный ASM (код сборки) и т. Д.
Вы можете прочитать больше о ядре Linux и BIOS системы в этой статье из Linuxmagazine под названием: Linux и BIOS .
Я думаю, что вы ищете flashrom. При условии, что ваша система поддерживается, вы можете прочитать содержимое BIOS, выполнив
# flashrom -r <outputfile>
Если вы хотите сохранить только так называемую ОЗУ CMOS (те дополнительные байты, в которые вы сохраняете конфигурацию, например, аварийный сигнал в RTC и др.), nvramДрайвер и устройство ядра могут вам помочь:
config NVRAM
tristate "/dev/nvram support"
depends on ATARI || X86 || (ARM && RTC_DRV_CMOS) || GENERIC_NVRAM
---help---
If you say Y here and create a character special file /dev/nvram
with major number 10 and minor number 144 using mknod ("man mknod"),
you get read and write access to the extra bytes of non-volatile
memory in the real time clock (RTC), which is contained in every PC
and most Ataris. The actual number of bytes varies, depending on the
nvram in the system, but is usually 114 (128-14 for the RTC).
This memory is conventionally called "CMOS RAM" on PCs and "NVRAM"
on Ataris. /dev/nvram may be used to view settings there, or to
change them (with some utility). It could also be used to frequently
save a few bits of very important data that may not be lost over
power-off and for which writing to disk is too insecure. Note
however that most NVRAM space in a PC belongs to the BIOS and you
should NEVER idly tamper with it. See Ralf Brown's interrupt list
for a guide to the use of CMOS bytes by your BIOS.
On Atari machines, /dev/nvram is always configured and does not need
to be selected.
To compile this driver as a module, choose M here: the
module will be called nvram.
Это хорошее предложение, но, вероятно, не будет работать на вашем ноутбуке. Для этого программного обеспечения отсутствует поддержка BIOS для ноутбука. Например, он не будет работать на ноутбуках Thinkpad, которые у меня есть (много разных моделей).
СЛМ
10
Если другие инструменты недоступны или не могут быть использованы, вот способ сделать обоснованное предположение о том, какую область памяти выгружать.
Например, из виртуальной машины VirtualBox я успешно сбросил ее BIOS, выполнив:
$ grep ROM /proc/iomem # https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-firmware-memmap
000c0000-000c7fff : Video ROM
000e2000-000e2fff : Adapter ROM
000f0000-000fffff : System ROM
# dd if=/dev/mem of=pcbios.rom bs=64k skip=15 count=1 # 15*64k + 64k
что приводит к:
000c0000-000c7fff: ПЗУ видео
000e2000-000e2fff: ПЗУ адаптера
000f0000-000fffff: ПЗУ системы
Системное ПЗУ начинается с 000f0000, что составляет 0xF0000.
Откройте браузер и перейдите по адресу http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 . Это говорит о том, что десятичное значение 983040, которое делится на 1024, чтобы получить килобайт, это 960, что является отправной точкой и значением для «пропустить».
Конечное число - 0xFFFFF, которое равно 1048575, которое просто не соответствует 1024. 1024 - 960 - это 64, что является значением 'count'.
Команда для запуска сброса BIOS выглядит следующим образом:
Если другие инструменты недоступны или не могут быть использованы, вот способ сделать обоснованное предположение о том, какую область памяти выгружать.
Например, из виртуальной машины VirtualBox я успешно сбросил ее BIOS, выполнив:
источник
Вариант биос в
dmidecode
Читайте память от
C:0000
доF:FFFF
без необходимости dmidecodeисточник
Это работает для меня в VirtualBox:
что приводит к:
000c0000-000c7fff: ПЗУ видео
000e2000-000e2fff: ПЗУ адаптера
000f0000-000fffff: ПЗУ системы
Системное ПЗУ начинается с 000f0000, что составляет 0xF0000.
Откройте браузер и перейдите по адресу http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 . Это говорит о том, что десятичное значение 983040, которое делится на 1024, чтобы получить килобайт, это 960, что является отправной точкой и значением для «пропустить».
Конечное число - 0xFFFFF, которое равно 1048575, которое просто не соответствует 1024. 1024 - 960 - это 64, что является значением 'count'.
Команда для запуска сброса BIOS выглядит следующим образом:
источник