Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@ikwzm

Cプリプロセッサのマクロを含んだデバイスツリーをコンパイルする

Xilinx社の Zynq や Altera社の Cyclene V SoC などの ARM プロセッサをターゲットにした Linux カーネルをブートする時、Device Tree Blob(DTB)が必要になります。
通常は Linux カーネルをビルドする際に自動的に DTB も生成されるのですが、なんらかの事情で自力でコンパイルする必要が生じることもあります。
その際、たまに Device Tree Source(DTS)にCプリプロセッサのマクロ(#include や #define)を使っているものがあります。例えば、Altera社の Cyclone V SoC を使った DE0-Nano-SoC 用の Device Tree Source(socfpga_cyclone5_sockit.dts)など。

このような Device Tree Source(DTS) を Device Tree Compiler(dtc) を使ってコンパイルする時は次のようにします。

gcc -E -P -x assembler-with-cpp -I $(LINUX_KERNEL_SRC)/arch/arm/boot/dts -I $(LINUX_KERNEL_SRC)/include $(DTS_SRC_FILE) | dtc -I dts -O dtb -i $(LINUX_KERNEL_SRC)/arch/arm/boot/dts -o $(DTB_OUT_FILE)
  • $(LINUX_KERNEL_SRC) には Linux カーネルのソースコードのディレクトリを指定します。
  • gcc の -E オプションで C Preprocessor のみを使うことを指定します。
  • gcc の -P オプションで #line 指示子を生成しないよう指示します。そうしないと後段の dtc でエラーになります。
  • gcc の -x assembler-with-cpp で、Device Tree Source(DTS)に含まれる #から始まる文(#address-cellsや#size-cells)をエラーにしないようにします。これをつけないと元々あった#から始まる文が削除されてしまいます。
  • gcc の -I オプションで gccが インクルードするパスを指定します。ここでは Linux カーネルのソースコードに含まれる Device Tree Source のパスと、Linux カーネルのインクルードパスを指定しています。
  • dtc の -I オプションで入力フォーマットを指定します。ここでは Device Tree Source(dts)を指定しています。
  • dtc の -O オプションで出力フォーマットを指定します。ここでは Device Tree Blob(dtb)を指定しています。
  • dtc の -i オプションで dtcが インクルードするパスを指定します。ここでは Linux カーネルのソースコードに含まれる Device Tree Source のパスを指定しています。
  • dtc の -o オプションで出力するファイル名を指定します。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
7
Help us understand the problem. What are the problem?