2017-02-28 21 views
2

uClinuxを使用すると、2つのフラッシュデバイスの1つ、1GBフラッシュまたは2GBフラッシュがインストールされています。MTDフラッシュデバイスがインストールされているかどうかを確認するにはどうすればいいですか(IDやシリアル番号の取得など)?

drivers/mtd/devices/m25p80.c

私が使用している:デバイスドライバのコードで、私のためにそれがであるダウンしている - 私はこれを解決すると考えることができ

唯一の方法は、何らかの形で、デバイスIDを取得することですコマンドmtdinfo(mtdinfo.c/hから派生したmtdutilsバイナリに由来)。ここでは、フラッシュタイプについては「フラッシュタイプ」や「消去ブロックサイズ '65536」などさまざまな情報が保存されていますが、チップを識別できるものは何もありません。

"ドライバランド"から "ユーザーランド"への情報をどのように得ることができますか?これを達成するための最良の方法である

何...私はより多くの情報を印刷するにはmtdinfoコマンドを拡張しようとしてで探していますが、多くの層があるのですか?

+2

ブロックデバイスを照会するなどして有用な情報を得ることができますか? 'blockdev'コマンドを使って? mtdデバイス全体のブロックデバイスがある場合は、それを照会することもできます。そうしないと、個々のmtdパーティションのブロックデバイスに照会する必要があります。場合によっては、最後のmtdパーティションは、元のmtdデバイスの残りのスペースを満たすために自動サイズ調整されます。 –

+0

@IanAbbottいいアイデア - 私は 'blockdev --getsize/dev/mtdblock5'(最後のブロック)を使って、残りのサイズではなく最後の実際のブロックのサイズを表示しました:(...私はブロックはあまりにも余分な情報があった場合にだけではありますが、それらはすべて期待されるパーティションサイズです –

+0

mtd全体のブロックデバイスを作成するためのカーネル設定オプションがありますが、それは既存の/ dev/mtdblock番号設定オプションは 'CONFIG_MTD_PARTITIONED_MASTER'"分割時にマスタデバイスを保持する "です。 –

答えて

1

現時点では、私はコード変更なしでこれを行う簡単な方法がないことがわかりました。あなたは、次のいずれかを呼び出すことができます(私の場合drivers/mtd/devices/m25p80.cに)

該当するファイルには:しかし、私は私が必要な情報を取得することができます(おそらくハックのビット)簡単なコード変更を発見した

dev_err("..."); 
dev_alert("..."); 
dev_warn("..."); 
dev_notice("..."); 
_dev_info("..."); 

include/Linux/device.hで定義されているので、それらはLinuxドライバインターフェイスの一部なので、どのドライバからでも使用できます。

実行時にdev_err()とdevalert()の両方が "画面上"に印刷されることがわかりました。ただし、これらのデバイスメッセージはすべて/var/log/messagesにあります。私は形式のメッセージを追加するので:dev_err()またはdev_alert()非常に適切ではありませんを使用して明らかに

cat /var/log/messages | grep -i jedec

dev_notice("JEDEC id %06x\n", jedecid);を、私は次のコマンドでデバイスIDを見つけることができます! - しかしdev_notice()、さらには_dev_info()と思われます。

それがコードの変更を必要とするので、まだ答えとしてこれをマーキングなし - 誰もが1を知っているならばまだ良い解決策を望んで...

更新

上記「溶液」は動作しますが、その少し気が狂っています - 確かに仕事をしてくれるでしょう。しかし、私はコードを変更している場合、適切に行うことができると判断しました。このために必要な

cat /sys/class/m25p80/m25p80_dev0/device_id

メイン関数呼び出しがある(この順序で)::だから私は今、あなたは、次のコマンドを使用して、フラッシュのIDを取得することができるように、sysfsの中にインターフェイスを追加する変更を実施している

alloc_chrdev_region(...) 
class_create(...) 
device_create(...) 
sysfs_create_group(...) 

誰もがそれを望むなら、私はその答えに展開することができますが、これは、同じことをしたい人のためのヒントを十分に与える必要があります。

関連する問題