Як скинути дані BIOS у файл


24

Я хочу скинути дані 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 безпосередньо?

Відповіді:


20

Ви можете спробувати використовувати biosdecode.

Це утиліта командного рядка, яка аналізує пам'ять BIOS і друкує інформацію про всі структури (або точки входу), про які вона знає. Він дізнається інформацію про обладнання, наприклад:

  • Пристрій IPMI
  • Тип пам'яті та швидкість
  • Інформація про шасі
  • Температурний зонд
  • Пристрій охолодження
  • Зонд електричного струму
  • Інформація про процесор та пам'ять
  • Серійні номери
  • Версія BIOS
  • Слоти та швидкість PCI / PCIe

тощо.

Що слід врахувати:

  • biosdecodeаналізує пам'ять BIOS і друкує інформацію про всі структури.
  • Розшифровка даних BIOS - це те саме, що скидання DMI комп'ютера . Таблиця DMI в основному описує, з чого складається система в даний час.
  • Дані, надані biosdecodeне в читаному для людини форматі.

Перегляд вмісту на екрані

Вам потрібно буде використовувати dmidecodeкоманду для скидання вмісту таблиці DMI (SMBIOS) комп'ютера на екран.

$ sudo dmidecode --type 0 

Шукайте на головній сторінці для отримання додаткової інформації:

$ man dmidecode

Так, ядро ​​зберігає в оперативній пам'яті лише необхідну інформацію з BIOS. Однак ви можете здійснювати дзвінки BIOS у реальному часі від кореневого користувача за допомогою програм C, які включають вбудований ASM (код складання) тощо.

Детальніше про ядро ​​Linux та BIOS системи ви можете прочитати в цій статті з Linuxmagazine під назвою: Linux та BIOS .


12

Я думаю, що ти шукаєш 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, якими я володію (безліч різних моделей).
slm

10

Якщо інші інструменти недоступні або їх не можна використовувати, ось спосіб зрозуміти, яку область пам'яті потрібно скидати.

Наприклад, з VM 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

2
Як ви знаєте, які розміри використовувати на основі адрес пам'яті?
unseen_rider

7

Варіант біос в dmidecode

dmidecode -t bios

Прочитайте пам'ять від C:0000до F:FFFFбез необхідності dmidecode

dd if=/dev/mem bs=1k skip=768  count=256 2>/dev/null | strings -n 8

3

Це працювало для мене у VirtualBox:

$ grep ROM /proc/iomem

що призводить до:
000c0000-000c7fff: Video ROM
000e2000-000e2fff: адаптер ROM
000f0000-000fffff: системний ROM

Системний ПЗУ починається з 000f0000, що становить 0xF0000.

Відкрийте браузер і перейдіть на сторінку http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 . Це говорить про десяткове значення 983040, яке ділиться на 1024 для отримання кілобайт - 960, що є початковою точкою і значенням для "пропустити".

Кінцеве число - 0xFFFFF, що становить 1048575, а це сором'язливе 1024. 1024 - 960 - 64, що є значенням "підрахунку".

Таким чином, команда виконувати, щоб скинути біос:

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.