実行中のカーネルの/ sysを使用してデバイスツリーの情報を取得することは可能ですか?


20

一般に、アームシステムの場合、デバイスツリーはカーネルにハードウェア情報を提供します(Linux)。これらのデバイスツリーは、コンパイルされてカーネルにロードされるdts(デバイスツリーソース)ファイルとして存在します。問題は、そのようなdtsファイルにアクセスできず、ファイルにもアクセスできないことdtbです。

私はへのアクセス持っている/sys/proc、マシン上に、私はそれは私がDTSで使用される「正しい値を推測」できるようになるならばお願いしたいですか?

また、潜在的な答えは、この質問への答えがデバイスツリーインターフェイスが最初に使用されたか(つまり、a dtbが作成されてカーネルに提供されたか)に依存する場合、さらにハッキングする代わりに側面をさらに強調する可能性があります。カーネルのみのデバイス情報の問題を解決するようにカーネルにパッチを適用します」


ブートイメージにアクセスできますか?そこからデバイスツリーを抽出できます。私は助けることができる。
phk

回答:


27

/proc/device-tree または /sys/firmware/devicetree/base

私は両方とも、別名だと思う/sys/firmware/devicetree/base可能性の調教後の方が適しています/proc

その後、ファイルからdtsプロパティにアクセスできます。

 hexdump /sys/firmware/devicetree/base/apb-pclk/clock-frequency

整数の出力形式はバイナリhexdumpなので、必要です。

dtc -I fs

ファイルシステムから完全なデバイスツリーを取得します。

sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base

dtsを標準出力に出力します。

関連項目:カーネルのデバイスツリーを一覧表示する方法| UnixおよびLinuxスタック交換

dtc Buildrootで

Buildrootには、ルートファイルシステム内BR2_PACKAGE_DTC=yに配置する構成dtcがあります。

QEMU -machine dumpdtb

QEMU内でLinuxを実行している場合、QEMUで明示的に指定しない場合、QEMUは自動的にDTBを生成します。したがって、次のコマンド-dtbで直接ダンプすることもできます。

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine dumpdtb=dtb.dtb

https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.htmlで言及されているように

Linuxカーネルv4.19 arm64 でこのQEMU + Buildrootセットアップを使用してテストしました。


4

あなたを正しく理解しているかどうかわかりません。

dtbを使用して起動したシステムを使用している場合は、debugfs内でデバイスツリーにアクセスできる必要があります。

Pantelis Antoniouのdtcツールを試すこともできます。これらのツールには、blobからdtsを出力するfdtdumpとfdtgetが含まれています。

デバイスツリーがまったくなく、dtbからブートしない場合は、マシンコードを自分で調べて、デバイス固有のすべての属性とノードをdtsに追加する必要があります。このようなブート用に生成された「合成」デバイスツリーはありません。出発点は、同様のマシンまたは親であり、システムごとにウェイを操作します。


明確にするために、ありがとう。可能性があるdtbdebugfsの貫通アクセスできるかもしれない、まだそれが依存するだろうCONFIG_DEBUG_FS.config、彼らが実際に使用しているという単なる気まぐれで、まだセットしてあってもdtb始めることは、私はこの権利を読んでいますか?それで、いくつかの「不運」で、彼らはどちらもしませんでした、そして、デバイスツリーインターフェースのinstaedである種の直接的なカーネルパッチを使用しました、そうですか?つまり、GPLv2に違反してカーネルをクローズソースにした場合、最後の手段はマシンコードであるということでしょうか?
humanityANDpeace

はい、最初の2つはい。最後に、IANALですが、マシンarch / ??? / mach-??? / board-???。cには、古いカーネルのマシンに存在する特別なデバイスが含まれます。これはGPLでカバーされ、有料で利用可能でなければなりません。個々のデバイスドライバーはクローズドソースである可能性があり、違反はありません。
FRob
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.