デバイスツリー Blob(バイナリ)

デバイスツリー Blob(バイナリ)

私たちはアーチLinuxを移植したarmv7(freescale IMx6DL)ボードを持っています。 iufをビルドすると、すべての周辺機器、バスなどを含まない.dtsファイルが表示されます。

dts(ソース)ファイルがある場合に.dtb(デバイスツリーblob)を生成する方法を教えてくれる人はいますか?与えられたMakefileは単独では機能しません。 dtbファイルはビルド時に生成されます。

dtsファイルがある場合は、dtbファイルを別々に作成できますか?

ベストアンサー1

はい、Makefileが実行するすべての操作は手動で実行できます。カーネルデバイスツリーソースの場合、デバイスツリー言語とコンパイラがそれをサポートしていなくても、Cプリプロセッサコマンドを使用します。

カーネルが実行するアクション(およびユーザーが実行する必要があるアクション)は、次のようにデバイスツリーソースコードをCプリプロセッサに渡してからデバイスツリーコンパイラに渡すことです。

cpp -Iinclude -E -P -x assembler-with-cpp imx6dl-boardname.dts | dtc -I dts -O dtb -o imx6dl-boardname.dtb -

(これは私が直接使用するコマンドです。明らかな説明は次のとおりです。ボード名私のハードウェアを反映するように変更されました。 Makefileルールとプリプロセッサエラーメッセージに基づいてそれらをまとめました。

プリプロセッサパラメータ:

  • -Iincludeカーネルデバイスツリーソース#include <dt-bindings/interrupt-controller/irq.h>は主にarch/arm/boot/dts/include

  • -Ecpp前処理のみを示します。コマンドを使用するときに前処理が必要かどうかはわかりません。

  • -Pデバイスツリーコンパイラを混乱させるソース行番号コメントを無効にします。

  • -x assembler-with-cppプリプロセッサが特定の言語モードで実行されるように強制します。これは、プリプロセッサディレクティブと同じファイル内のデバイスツリーの構文が混乱しないのに役立ちます。カーネルMakefileにあるので使用しています。

  • imx6dl-boardname.dtsプレースホルダなので、最上位のデバイスツリーソースファイルの名前に変更する必要があります。

デバイスツリーコンパイラパラメータ:

  • -I dts入力形式をテキストデバイスツリーソースとして指定する
  • -O dtbデバイスツリーバイナリBLOBの生成を指定します。
  • -o imx6dl-boardname.dtb出力があるファイル名を定義します。必要なDTBファイル名に変更する必要があります。
  • -入力ファイルが次のようになることを示します。stdin

おすすめ記事