一般的にアームシステムの場合、デバイスツリーはハードウェア情報をカーネル(Linux)に提供します。これらのデバイスツリーは、コンパイルされてカーネルに読み込まれるdts(デバイスツリーソース)ファイルとして存在します。問題は、そのようなdts
ファイルにアクセスできず、dtb
ファイルにもアクセスできないことです。
マシンで/sys
と/proc
にアクセスできます。これにより、dtsで使用する「正しい値を推測」できるかどうかを確認したいと思いますか?
また、この質問への回答が、ハッキングの代わりにデバイスツリーインターフェースが最初に使用されたかどうか(つまり、dtb
が作成され、カーネルに提供されたかどうか)に依存する場合、潜在的な回答はさらに側面を強調する可能性があります「私たちは単にバニラから迂回し、カーネルにパッチを適用して、カーネルのみのデバイス情報問題を解決します」-解決策?
/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をstdoutに出力します。
参照: カーネルデバイスツリーの一覧表示方法| Unix&Linux Stack Exchange
dtc
in Buildroot
Buildrootには、ルートファイルシステム内にdtc
を配置するためのBR2_PACKAGE_DTC=y
構成があります。
QEMU -machine dumpdtb
QEMU内でLinuxを実行している場合、-dtb
を使用して明示的に指定しないと、QEMUが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で this QEMU + Buildroot setup を使用してテストされています。
私があなたを正しく理解しているかどうかはわかりません。
Dtbを使用して起動したシステムを使用している場合、デバイスツリーはdebugfs内でアクセスできる必要があります。
Pantelis Antoniouによるdtcツールを試すこともできます。これらには、blobからdtsを出力するfdtdumpおよびfdtgetが含まれています。
デバイスツリーがまったくなく、dtbからブートブートしなかった場合は、自分でマシンコードを調べて、すべてのデバイス固有の属性とノードをdtsに追加する必要があります。このようなブート用に生成された「合成」デバイスツリーはありません。開始点は、同様のマシンまたは親であり、システムごとに作業します。