Linux デバイス ツリー ファイルを手動でコンパイルするためのシェル スクリプト

序文

  • Makefile を介して dtsi および .h ヘッダー ファイルに依存する Linux デバイス ツリー dts ソース ファイルとそのデバイス ツリーを手動でコンパイルする場合、シェル スクリプトを作成して直接コンパイルするにはどうすればよいですか?

  • 実際には、Makefile をシェル スクリプトとして書き換えるだけです。

デバイスツリーシェルスクリプトをコンパイルします。

  • スクリプトの内容は次のとおりです: gen_dtbs.sh
#! /bin/bash

DIR_ROOT=$( cd "$(dirname "${
    
    BASH_SOURCE[0]}")" && pwd)
HOST_DTC=${
    
    DIR_ROOT}/dtc
HOSTCC=gcc
# ${
    
    HOSTCC} -v
# ${
    
    HOST_DTC} --version

suffix_dtb=".dtb"
suffix_dts=".dts"
dtb_d_pre_tmp=".dtb.d.pre.tmp"
dtb_dts_tmp=".dtb.dts.tmp"
dtb_d_dtc_tmp=".dtb.d.dtc.tmp"

dtc_cflags="-E -Wp,-MMD,"
dtc_flags="0 -Wno-interrupt_provider -Wno-unit_address_vs_reg -Wno-avoid_unnecessary_addr_size "
dtc_flags+="-Wno-alias_paths -Wno-graph_child_address -Wno-simple_bus_reg -Wno-unique_unit_address"
dtc_def="-undef -D__DTS__ -x assembler-with-cpp"

dts_src_path=${
    
    DIR_ROOT}
dts_file_string=`find ${
    
    dts_src_path} -maxdepth 2 -type f -name *.dts`

for dts in ${
    
    dts_file_string}
do
	# echo ${
      
      dts}
	echo ${
    
    dts%.*}
	${
    
    HOSTCC} -E ${
    
    dtc_cflags}${
    
    dts%.*}${
    
    dtb_d_pre_tmp} -nostdinc -I${
    
    DIR_ROOT}/include ${
    
    dtc_def} -o ${
    
    dts%.*}${
    
    dtb_dts_tmp} ${
    
    dts%.*}${
    
    suffix_dts}
	${
    
    HOST_DTC} -o ${
    
    dts%.*}${
    
    suffix_dtb} -b ${
    
    dtc_flags} -d ${
    
    dts%.*}${
    
    dtb_d_dtc_tmp} ${
    
    dts%.*}${
    
    dtb_dts_tmp}
done

dts_folders=`find ${
    
    dts_src_path} -maxdepth 1 -type d`
for dts in ${
    
    dts_folders}
do
	`rm -f ${
    
    dts}/*.d.dtc.tmp`
	`rm -f ${dts}/*.d.pre.tmp`
	`rm -f ${dts}/*.dtb.dts.tmp`
done

echo " --- build dtbs end --- "

  • サンプルプロジェクトのダウンロードアドレスhttps://gitee.com/zhangsz0516/make_dtbs.git

シェルスクリプトの説明

  • 動作環境:Linux、gccのインストールが必要、makeのインストールは不要

  • 準備する必要があるもの: デバイス ツリー dts オリジナル ファイル、依存する dtsi およびデバイス ツリー ヘッダー ファイル

  • dtc コンパイル ツールは、ソース コード Linux kernel scripts/dtc ディレクトリの下にあり、Linux カーネルをコンパイルした後に生成できます。デフォルトでは、Linux は毎回ソース コードからコンパイルされ、ここにコピーすることで直接使用できます。 dtc ツールを生成するためにソース コードをコンパイルする必要はありません。

dtc ツールを入手する

  • dtc ツールは Linux 環境の gcc、つまりホスト gcc でコンパイルされます。クロスコンパイルは必要ありません。dtc ツールは Linux 上で直接コンパイルできません。qemu などのボードをコンパイルできます。vexpress_defconfig

  • コンパイル方法:

$ make ARCH=arm vexpress_defconfig
$ make ARCH=arm dtbs
  • この時点で、scripts/dtc/dtc が生成され、dtc ツールのバージョン番号を確認できます。
$ chmod +x scripts/dtc/dtc

zhangsz@zhangsz:~/linux/kernel/linux-6.0.10$ scripts/dtc/dtc --version
Version: DTC 1.6.1-g0a3a9d34

dtsソースファイルを取得する

  • Linux カーネルからのこの例のデバイス ツリー ソース ファイル

デバイスツリーをコンパイルする

  • スクリプト実行権限chmod +x gen_dtbs.sh

  • 実行source gen_dtbs.shまたは./gen_dtbs.sh直接実行

ここに画像の説明を挿入

  • テストの結果、デバイス ツリー バイナリ ファイルが正常に生成されることがわかりました: dtb

まとめ

  • make またはシェル スクリプトを使用して、デバイス ツリー ソース ファイルを手動でコンパイルできます。

  • なお、ここでは前処理に gcc を使用し、C 言語のソースファイルの処理と同様に、デバイスツリーが依存するヘッダファイルをすべてソースコードの形で一時ファイルに置き、dtb ファイルを生成します。 dtcツールを通して

おすすめ

転載: blog.csdn.net/tcjy1000/article/details/130996396