一般に武器システムの場合デバイスツリーカーネル(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-tree
Harry Tsaiは、カーネル文書では、これがユーザー領域で好まれている選択肢であると指摘しています。。
答え2
私の理解が正しいかどうかはわかりません。
dtbで起動するシステムを使用している場合は、debugfs内でデバイスツリーにアクセスできる必要があります。
blob から dt を印刷する fdtdump と fdtget を含む Pantelis Antoniou の dtc ツールを試すこともできます。
デバイスツリーがまったくなくdtbから起動しない場合は、マシンコードを直接調べて、すべてのデバイス関連プロパティとノードをdtsに追加する必要があります。このタイプの起動では、「合成」デバイスツリーは作成されません。出発点は、同様のシステムでも親システムでも、システムごとに作業できます。