web-dev-qa-db-ja.com

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

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

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

XYは、BIOSの種類が異なるため、人によって提案される解決策は異なります。

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

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

25
Omid

biosdecodeを使用してみてください。

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

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

等.

考慮すべき事項:

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

画面にコンテンツを表示する

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

$ Sudo dmidecode --type 0 

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

$ man dmidecode

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

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

20
delta24

あなたが探しているのは 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.
12
Andreas Wiese

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

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

dmidecodeのオプションBIOS

dmidecode -t bios

Dmidecodeを使用せずに、メモリをC:0000からF:FFFFに読み取ります。

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

これは私にとってVirtualBoxで機能しました:

$ grep ROM /proc/iomem

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

システムROMは0xF0000である000f0000から始まります。

ブラウザを開いて http://www.hexadecimaldictionary.com/hexadecimal/0xF00 にアクセスします。これは、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
3