linux 设备树

1 设备树入口文件


  设备树目录dts下可能有多个dts文件,编译完成后也可能会生成多个dtb文件,那么如何确定哪个是入口文件呢? dtb编译Makefile

./arch/arm64/boot/dts/Makefile:1:dtb-$(CONFIG_ARCH_VEXPRESS) += rtsm_ve-aemv8a.dtb foundation-v8.dtb \
./arch/arm64/boot/dts/Makefile:3:dtb-$(CONFIG_ARCH_VEXPRESS) += juno.dtb
./arch/arm64/boot/dts/Makefile:4:dtb-$(CONFIG_ARCH_XGENE) += apm-mustang.dtb
./arch/arm64/boot/dts/Makefile:5:dtb-$(CONFIG_ARCH_SUN50IW1P1) += sun50iw1p1-fpga.dtb  sun50iw1p1-perf1_v1_0.dtb \
./arch/arm64/boot/dts/Makefile:8:dtb-$(CONFIG_ARCH_SUN50IW2P1) += sun50iw2p1-fpga.dtb sun50iw2p1-perf1_v1_0.dtb \
./arch/arm64/boot/dts/Makefile:11:dtb-$(CONFIG_ARCH_SUN50IW3P1) += sun50iw3p1-fpga.dtb sun50iw3p1-soc.dtb \
./arch/arm64/boot/dts/Makefile:14:dtb-$(CONFIG_ARCH_SUN50IW6P1) += sun50iw6p1-fpga.dtb sun50iw6p1-soc.dtb \
./arch/arm64/boot/dts/Makefile:24:DTB_LIST := $(dtb-y)

  从上面可以看出编译哪些dts文件是由宏来控制的,kernel定义了CONFIG_ARCH_SUN50IW3P1

grep "CONFIG_ARCH_SUN50IW3P1" ./.config -rns
257:CONFIG_ARCH_SUN50IW3P1=y
dtb-$(CONFIG_ARCH_SUN50IW3P1) += sun50iw3p1-fpga.dtb sun50iw3p1-soc.dtb \
                                sun50iw3p1-perf1_v1_0.dtb sun50iw3p1-perf2_v1_0.dtb \
                                sun50iw3p1-y1.dtb sun50iw3p1-y2.dtb sun50iw3p1-t1.dtb

  上面的几个dts被编译到,实际使用哪个或者哪几个由其他条件决定。当前编译的是board = t1的代码,应当是用sun50iw3p1-t1.dtb。
  更为准确的方法是找到编译、拷贝的脚本,脚本会将使用的dtb文件拷贝到指定位置,或者找到当前正在使用的dtb,也dts目录下生成的dtb对比。内容一致的就是要使用的,也可以根据大小判断。对应的dts文件就是要用的dts。

2 设备树中的/dts-v1/;


  在设备树文件中前面位置都可以看到有下面一行内容,这个在dts的版本号,v1表示第一个版本,后面可能会有新的版本出现。

/dts-v1/;

  在kernel源码目录下执行grep "dts-v1" ./ -rns,可以找到dts-v1使用的位置。dts-v1要被kernel/scripts/dtc/目录下关于dts解析的文件使用,具体dts-v1作用,参考相关源码。

你可能感兴趣的:(linux)