背景
dmidecodeユーティリティは--dump-bin
オプションを使用してネイティブバイナリダンプを生成できます。
root@here:~$ dmidecode --dump-bin foo.dump
他のシステムで再利用して、dmidecodeが元のシステムで実行されたのと同じ効果を生成できます。
me@elsewhere:~$ dmidecode --dump-bin foo.dump
# dmidecode 2.12
SMBIOS 2.7 present.
68 structures occupying 2688 bytes.
Table at 0xBAE9D000.
[...]
一部のコンピュータにはこれらのバイナリがあり、それを使用してdmidecodeをラップするスクリプトをテストします(ハードウェア設定が異なるようにdmidecodeの動作をシミュレートする必要があります)。
質問
しかし、いくつかのマシンには生のバイナリはありませんが、する4.*カーネルによって公開された/sys/firmware/dmi/tablesのコピーを入手してください。 kernel.org ドキュメント説明する:
[...] dmi/tables は、/dev/mem から読み取るユーティリティではなく、sysfs を介してネイティブ SMBIOS エントリポイントと DMI テーブルを提供します。ネイティブSMBIOSエントリポイントとDMIテーブルはバイナリプロパティとして表示され、以下からアクセスできます。
/sys/firmware/dmi/tables/smbios_entry_point /sys/firmware/dmi/tables/DMI
これら2つのテーブルを使用して、完全なDMI情報を取得できます。
質問
最初の例のように再利用できるように、/sys/firmware/dmi/tablesファイルを使用して元のバイナリダンプを再設定できますか?
私はこれらのファイルをまとめましたが、成功しませんでした(Invalid entry length (0). DMI table is broken! Stop.
)。
答え1
コードを参照してください。https://github.com/mirror/dmidecode/blob/master/dmidecode.c。頑張ってください。
例: 7f + 00 + 80 + 30 + 7b = 18a
18aは8bit = 8aを保持します。
DMI の新しいアドレスは 0x20 でハードコーディングされます。
答え2
smbios_entry_point
dmidecodeの16進ダンプをバイナリ出力と比較すると、次のことがわかります。似たようなdmidecode 出力のバイト 0-31。同様にDMI
、バイト32+と一致します。バイト32がありません。いつも空いているようです。
十分に近づいて見せて効果があってほしいです。
echo -en '\0' >NUL
sudo cat /sys/firmware/dmi/tables/smbios_entry_point NUL /sys/firmware/dmi/tables/DMI >table
dmidecode --from-dump table
ただし、dmidecode は次の出力で競合します。
# dmidecode 2.12-dmifs
Reading SMBIOS/DMI data from file table.
SMBIOS 2.8 present.
Bus error (core dumped)
SMBIOS/DMIの仕様は次のとおりです。インターネットで利用可能(pdf);ヘッダーに許容されるダミー値を決定することはそれほど難しくありません。少なくとも今は読者に練習問題として残しておきます。 ;)