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


24

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

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

Xそして、Y異なるBIOSの種類があるので、異なる人々によって提案されたソリューションで異なっています。

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

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

回答:


20

を使用して試すことができbiosdecodeます。

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

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

考慮事項:

  • biosdecodeBIOSメモリを解析し、すべての構造に関する情報を出力します。
  • BIOSデータのデコードは、コンピューターのDMIのダンプと同じです。DMIテーブルには、主にシステムが現在で作られているものについて説明します。
  • が提供するデータはbiosdecode人間が読める形式ではありません。

画面上のコンテンツを表示する

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

$ sudo dmidecode --type 0 

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

$ man dmidecode

はい、カーネルはBIOSから必要な情報のみをRAMに保持します。ただし、組み込みASM(アセンブリコード)などを含むCアプリケーションを使用して、rootユーザーからリアルタイムBIOS呼び出しを行うことができます。

Linuxmagazineのこの記事で、LinuxカーネルとシステムのBIOSについて詳しく読むことができます:Linux and the BIOS


12

私は、あなたが探しているものだと思いますflashrom。システムがサポートされている場合、次のコマンドを発行してBIOSコンテンツを読むことができます。

# flashrom -r <outputfile>

いわゆるCMOS RAM(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

他のツールが利用できない場合、または使用できない場合、ダンプするメモリの領域について経験に基づいた推測を行う方法を次に示します。

たとえば、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

2
メモリアドレスに基づいて、使用するサイズをどのように知るのですか?
unseen_rider

7

オプションのBIOS dmidecode

dmidecode -t bios

dmidecodeを必要C:0000F:FFFFせずにメモリを読み取ります

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

3

これはVirtualBoxで私のために働いた:

$ grep ROM /proc/iomem

結果:
000c0000-000c7fff:ビデオROM
000e2000-000e2fff:アダプターROM
000f0000-000fffff:システムROM

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

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

終了番号は0xFFFFFで、これは1048575です。これは1024にわずかです。1024-960は64で、これは「count」の値です。

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

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.