BIOSデータをファイルにダンプする方法

私のラップトップのBIOSデータをファイルにダンプしたい。私が見つけた唯一の解決策は以下のコマンドです。

dd if=/dev/mem bs=X skip=Y count=1

X and Y are different in suggested solutions by different people because there are different BIOS types.

/dev/mem にBIOSデータの正確なアドレスを見つける方法はありますか? dmidecode を使ってメモリ内のBIOSのアドレス範囲を見つけることはできますか? そしてLinuxはすべてのBIOSデータをRAMにダンプするのですか、それともその特別な部分だけなのでしょうか。

LinuxがBIOSデータをRAMにダンプできる場合、rootユーザーも直接BIOSにアクセスできますか?

19

5 答え

biosdecode を使ってみることができます。

それはBIOSメモリを解析し、それが知っているすべての構造(またはエントリポイント)についての情報を印刷するためのコマンドラインユーティリティです。次のようなハードウェアに関する情報を見つけます。

  • IPMIデバイス
  • メモリの種類と速度
  • シャーシ情報
  • 温度プローブ
  • 冷却装置
  • 電流プローブ
  • プロセッサとメモリの情報
  • シリアル番号
  • BIOSバージョン
  • PCI/PCIeスロットと速度

考慮すべきこと:

  • biosdecode parses the BIOS memory and prints the information about all structures.
  • Decoding BIOS data is the same as dumping a computer's DMI. The DMI table mainly describes what the system is currently made of.
  • Data provided by biosdecode is not in a human-readable format.

画面上のコンテンツを見る

コンピュータのDMI(SMBIOS)テーブルの内容を画面に表示するには、 dmidecode コマンドを使用する必要があります。

$ sudo dmidecode --type 0 

詳細についてはmanページを検索してください。

$ man dmidecode

Yes, the kernel keeps only the information it needs from the BIOS in the RAM. However you can make real-time BIOS calls from the root user using C applications that include embedded ASM (Assembly code), 等

この記事のLinuxカーネルとシステムのBIOSについて詳しくは、 LinuxとBIOS をご覧ください。 。

17
追加された

探しているのは flashrom です。お使いのシステムがサポートされていれば、次のコマンドを発行してBIOSの内容を読むことができます。

# flashrom -r 

いわゆる CMOS RAM (RTCなどのalarmのように設定を保存する余分なバイト)だけを保存したい場合は、カーネルの 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.
11
追加された
これは良い提案ですが、おそらくあなたのラップトップではうまくいかないでしょう。ラップトップBIOSのサポートは、このソフトウェアにとって欠けています。たとえば、私が所有するThinkpadラップトップ(多くの異なるモデル)では動作しません。
追加された 著者 Patrick Szalapski,

他のツールが利用できない、または使用できない場合は、ここでダンプするメモリ領域を推測することができます。

たとえば、VirtualBox VM内から、次のようにして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
7
追加された
あなたはどのようにメモリアドレスに基づいてどのサイズを使うべきか知っていますか?
追加された 著者 Ilya Gazman,

Option bios in dmidecode

dmidecode -t bios

dmidecodeを使用せずに C:0000 から F:FFFF までメモリを読み取る

dd if=/dev/mem bs=1k skip=768  count=256 2>/dev/null | strings -n 8
5
追加された

これはVirtualBoxで私のために働きました:

$ grep ROM /proc/iomem

which results in:
000c0000-000c7fff : Video ROM
000e2000-000e2fff : Adapter ROM
000f0000-000fffff : System ROM

システムROMは000f0000、つまり0xF0000から始まります。

ブラウザを開き、 http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 にアクセスします。 これは、10進数の値が983040で、これを1024で割ってキロバイトにすると960が開始点で、 'skip'の値になります。

終了番号は0xFFFFFで、1048575で、1024の内気な値です。 1024 - 960は64で、これは 'count'の値です。

したがって、BIOSをダンプするために実行するコマンドは次のとおりです。

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
1
追加された