実行中のカーネルの/sysを使用してデバイスツリーに関する情報を取得できますか?

実行中のカーネルの/sysを使用してデバイスツリーに関する情報を取得できますか?

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

/sysアクセス権があり、/procコンピュータにあります。これがdtsで使用する「正しい値を推測する」ことができるかどうかを尋ねたいと思います。

この質問に対する答えがハッキング的なものではなく、デバイスツリーインタフェースが最初に使用されるか(つまり、生成されdtbカーネルに提供されるか)によって異なります。パッチしました。 - 解決策は何ですか?

答え1

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

/proc/device-tree/sys/firmware/devicetree/baseは、へのシンボリックリンクです。カーネル文書によるとユーザーモードは以下を主張する必要があります/proc/device-tree

ユーザースペースは/sys/firmware/devicetree/baseパスを直接使用しないでください。/proc/device-treeシンボリックリンクに従う必要があります。絶対パスは将来変更される可能性がありますが、シンボリックリンクは安定したABIです。

その後、ファイルから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をstdoutとして出力します。

また見なさい:カーネルデバイスツリーを一覧表示する方法UnixとLinuxのスタック交換

dtcビルドルートディレクトリに

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

QEMU-machine dumpdtb

QEMUでLinuxを実行している場合、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

試験用このQEMU + Buildrootの設定Linuxカーネルv4.19 arm64。

ありがとう/proc/device-treeHarry Tsaiは、カーネル文書では、これがユーザー領域で好まれている選択肢であると指摘しています。

答え2

私の理解が正しいかどうかはわかりません。

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

blob から dt を印刷する fdtdump と fdtget を含む Pantelis Antoniou の dtc ツールを試すこともできます。

デバイスツリーがまったくなくdtbから起動しない場合は、マシンコードを直接調べて、すべてのデバイス関連プロパティとノードをdtsに追加する必要があります。このタイプの起動では、「合成」デバイスツリーは作成されません。出発点は、同様のシステムでも親システムでも、システムごとに作業できます。

関連情報