ストレージ メディアに何らかの形で結びついているライセンス システムに遭遇したことがあります。これをファイル システムの UUID に基づいて行うことは非常に簡単ですが、そうではないと思います (以下を参照)。この動作の典型的な例は次のとおりです。
- 起動するたびに、ID ファイルが生成されます。
- システムはライセンスのキーファイルをチェックします。キーが ID と一致する場合、すべて正常です。
- キーがない場合、またはキーが ID と一致しない場合 (別のシステムからコピーされた場合など)、ライセンスは無効です。
次のような動作を観察しました。
- CF カードを完全に消去して再インストールすると、同じ ID ファイルが生成されるため、新しいキー ファイルは必要ありません。
- 別の CF で同じキーを使用すると、新しい ID ファイルの内容と一致しないため機能しません。
このことから、CF カードの一意の ID を何らかの方法で取得する方法があるという結論に至りました。Linux でこれを実現するにはどうすればよいですか?
追伸:私は、このようなシステムでどのようにして CF カードの一意の ID を構築できるのか、より一般的な観点から知りたいので、製品自体の詳細は意図的に省略しました。
答え1
カードには読み取り専用で登録された多くの情報が含まれます。
記事内部SDカード情報の読み取りこう言っています:
内部SDカード情報
SDカードに関する情報は、カード内部のレジストリにエンコードされています。その1つはカード識別 (CID)レジスタは、カードのシリアル番号 (PSN)、製造元 ID 番号 (MID)、製造日 (MDT) など、SD カードを一意に識別する情報を含む 16 バイトのコードです。CID レジスタはカードの製造時に設定され、設定後は変更できません。(SD カードの仕様によると、この情報は 1 回だけ書き込まれますが、カードが仕様に準拠していない場合はこの情報が変更される可能性があります。)
SDカードからCIDを読み取る方法
CID を読み取る 1 つの方法は、SD カード スロットを備えたラップトップを使用することです。ラップトップのカード リーダーは通常、PCI バス (または IDE バス) を介して直接接続されます。カード情報を取得するためのコマンドがカード リーダーによって傍受され、理解されないため、USB カード リーダーを介しては機能しません。カード スロットが組み込まれているすべてのコンピューターが機能するわけではなく、一部の内蔵カード リーダーは USB バスを介して接続されます。
適切なハードウェアをお持ちであれば、カード情報を取得する方法がいくつかあります。Linux では、内部 SD カード情報を読み取るのは簡単です。カードを挿入し、下を確認します
/sys/block/mmcblk0/device/
(この場所はデバイスによって異なる場合があります)。CID レジスタとその内部の情報を含む、利用可能な属性がいくつか表示されます。
答え2
他の人がコメントしているように、これは CF カードが消去された方法に関連している可能性がありますが、ソフトウェアがカード内のファームウェアに基づいて CF カードを識別している可能性の方が高いです。
この情報は通常、「udevinfo」を使用して読み取ることができます。たとえば、CF カードが /dev/sdb の場合、udevinfo -a -p $(udevinfo -q path -n /dev/sdb) と入力すると、カードを一意に識別するのに十分な情報が含まれる可能性が高くなります。
注記: Debian ベースのディストリビューションでは、 :udevadm info
を置き換えますudevinfo
。
udevadm info -a -p $( udevadm info -q path -n /dev/sdb )