ラップトップの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に直接アクセスできますか?
biosdecode
を使用してみてください。
これは、BIOSメモリを解析し、認識しているすべての構造(またはエントリポイント)に関する情報を出力するコマンドラインユーティリティです。次のようなハードウェアに関する情報を見つけます。
等.
考慮すべき事項:
biosdecode
は、[〜#〜] bios [〜#〜]メモリを解析し、すべての構造に関する情報を出力します。biosdecode
が提供するデータは、人間が読める形式ではありません。コンピュータのDMI(SMBIOS)テーブルの内容を画面にダンプするには、dmidecode
コマンドを使用する必要があります。
$ Sudo dmidecode --type 0
詳細については、manページを検索してください。
$ man dmidecode
はい、カーネルはBIOSから必要な情報のみをRAMに保持します。ただし、組み込みASM(アセンブリコード)などを含むCアプリケーションを使用して、ルートユーザーからリアルタイムのBIOS呼び出しを行うことができます。
LinuxカーネルとシステムのBIOSの詳細については、この記事のLinuxmagazineの記事 Linux and BIOS を参照してください。
あなたが探しているのは 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.
他のツールが利用できない場合や使用できない場合は、次の方法で、ダンプするメモリの領域を推測することができます。
たとえば、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
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
これは私にとって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