私たちはアーチ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
。-E
cpp
前処理のみを示します。コマンドを使用するときに前処理が必要かどうかはわかりません。-P
デバイスツリーコンパイラを混乱させるソース行番号コメントを無効にします。-x assembler-with-cpp
プリプロセッサが特定の言語モードで実行されるように強制します。これは、プリプロセッサディレクティブと同じファイル内のデバイスツリーの構文が混乱しないのに役立ちます。カーネルMakefileにあるので使用しています。imx6dl-boardname.dts
プレースホルダなので、最上位のデバイスツリーソースファイルの名前に変更する必要があります。
デバイスツリーコンパイラパラメータ:
-I dts
入力形式をテキストデバイスツリーソースとして指定する-O dtb
デバイスツリーバイナリBLOBの生成を指定します。-o imx6dl-boardname.dtb
出力があるファイル名を定義します。必要なDTBファイル名に変更する必要があります。-
入力ファイルが次のようになることを示します。stdin