GNU/Linux >> Linux の 問題 >  >> Linux

カーネル DTB ファイルの変更方法

新しい dtb を生成しませんか?

DTB (デバイス ツリー ブロブ/バイナリ) は、ボードのハードウェア コンポーネントを表すハードウェア データベースです。

U-Boot は、U-Boot のヘッダー ファイルから派生したボード情報構造体をカーネルに渡します。

DTB は、U-Boot と Linux が理解できる適切な形式でバイナリを生成する特別なコンパイラによってコンパイルされます。

DTC (デバイス ツリー コンパイラ) は、デバイス ツリー ファイルを、U-Boot と Linux カーネルが理解できる機械可読バイナリに変換します。

DTC を使用する簡単な方法。

$ dtc -O dtb -o arm_board.dtb -b 0 arm_board.dts

dtb からデバイス ツリーをテキストで取得します。

dtc -I dtb -O dts arm_board.dtb

board.dts は、上記のコマンドで作成されたバイナリです。 -O 出力形式を指定します。 -o flag は出力ファイルです。 -b 0 物理ブート CPU を指定します。

$ make ARCH=arm arm_board.dtb

別のアプローチは、 make dtbs を使用することです これは dtc を呼び出します。 arch/arm/boot/dts/Makefile ビルド時に生成する必要がある DTB をリストします。これは、コンパイルする別の方法です。 make はそれをカーネルツリー /arch/arm/boot/dts のこの場所に配置します

ダミー用のこのデバイス ツリーをご覧ください


この件に関する 2 年間の経験でこれを更新したいだけです。

Linux レポジトリの DTS ファイルは、DTS のが混在しています。 C プリプロセッサ ディレクティブ (#include、#define など)。したがって、元の DTB がコンパイルされると、プリプロセッサは参照ファイルにリンクして純粋な DTS ファイルを作成します。 dtc 単一の DTS ファイルを DTB ファイルに変換します。

したがって、カーネル DTS ファイルを変更してコンパイルする場合は、次の 2 つのオプションがあります。

<オール>
  • make dtbs を実行するだけです このすべてを自動的に処理します
  • プリプロセッサを手動で実行 (cpp -nostdinc -I <include dir> -undef -x assembler-with-cpp ... )、出力を dtc でコンパイルします .

  • Linux
    1. CentOS / RHEL 7 :カーネル コマンド ラインを変更する方法

    2. ファイルをスパースにする方法は?

    3. ファイル内で \n を grep する方法

    1. デフォルトの PYTHONPATH (sys.path) をグローバルに変更するには?

    2. カスタム Linux カーネル構成を保存またはエクスポートする方法は?

    3. u-Boot dtb ファイルとは何ですか? また、その使用方法 (BeagleBoard xM) を教えてください。

    1. ファイルをインプレースで変更する方法は?

    2. 12.10でカーネルをダウングレードする方法は?

    3. ファイルをトランザクション的にコピーする方法は?