当前位置:   article > 正文

MTK平台DTBO如何生成的以及DWS生成DTS_sp drvgen tool

sp drvgen tool

一、MTK平台最初就是使用DWS来配置GPIO,非常方便、直观;但随着kernel版本升级使用设备树之后,硬件信息都由DTS来描述,但MTK仍然保留了DWS,下面看看MTK如何将DWS转换为DTSI的。

  1. kernel使用的DWS路径:drivers/misc/mediatek/dws/mt6752/mt6752_64.dws
  2. 虽然vendor\mediatek\proprietary\custom\mt6752_64\kernel\dct\dct\codegen.dws也存在但默认不用这个
  3. DWS转换为DTSI的工具kernel-4.14/scripts/drvgen/drvgen.mk
  4. 核心代码:
  5. .PHONY: drvgen
  6. drvgen: $(DRVGEN_FILE_LIST)
  7. $(DRVGEN_FILE_LIST): $(DRVGEN_TOOL) $(DWS_FILE) $(DRVGEN_FIG) $(PROJ_DTS_FILES)
  8. for i in $(PROJ_DTS_FILES); do \
  9. base_prj=`grep -m 1 '#include [<\"].*\/cust\.dtsi[>\"]' $$i | sed 's/#include [<"]//g'\
  10. | sed 's/\/cust\.dtsi[>"]//g' | sed 's/\/\*//g' | sed 's/\*\///g' | sed 's/ //g'`\
  11. prj_path=$(DRVGEN_OUT)/$$base_prj ;\
  12. dws_path=$(srctree)/$(DRVGEN_PATH)/$$base_prj.dws ;\
  13. if [ -f $$dws_path ] ; then \
  14. mkdir -p $$prj_path ;\
  15. $(python) $(DRVGEN_TOOL) $$dws_path $$prj_path $$prj_path cust_dtsi;\
  16. fi \
  17. done
  18. 最终生成的DTSI文件路径obj\KERNEL_OBJ\arch\arm64\boot\dts\mt6752_64\cust_dtsi

具体怎么生成的可以看这个drvgen.mk以及它所依赖的工具

二、MTK DTBO的生成,它使用的哪个DTS文件

  1. 相关文件:scripts/drvgen/drvgen.mk
  2. 相关代码
  3. my_dtbo_id := 0
  4. define mk_dtboimg_cfg
  5. echo $(1) >>$(2);\
  6. echo " id=$(my_dtbo_id)" >>$(2);\
  7. $(eval my_dtbo_id:=$(shell echo $$(($(my_dtbo_id)+1))))
  8. endef
  9. dtbs: $(objtree)/dtboimg.cfg
  10. $(objtree)/dtboimg.cfg: FORCE
  11. rm -f $@.tmp
  12. $(foreach f,$(ABS_DTB_FILES),$(call mk_dtboimg_cfg,$(f),$@.tmp))
  13. if ! cmp -s $@.tmp $@; then \
  14. mv $@.tmp $@; \
  15. else \
  16. rm $@.tmp; \
  17. fi
  18. 由此可见这里生成了一个dtboimg.cfg文件,路径:obj\KERNEL_OBJ\dtboimg.cfg
  19. 这个文件指定了DTBO由哪个DTS文件生成
  20. DTBO生成:
  21. device/mediatek/build/tasks/dtbo.mk
  22. .KATI_RESTAT: $(KERNEL_OUT)/dtboimg.cfg
  23. $(KERNEL_OUT)/dtboimg.cfg: $(KERNEL_ZIMAGE_OUT) ;
  24. # mkdtimg is from system/libufdt/utils/src
  25. $(BOARD_PREBUILT_DTBOIMAGE): PRIVATE_TOOL := $(HOST_OUT_EXECUTABLES)/mkdtimg
  26. $(BOARD_PREBUILT_DTBOIMAGE): PRIVATE_CFG := $(KERNEL_OUT)/dtboimg.cfg
  27. $(BOARD_PREBUILT_DTBOIMAGE): $(HOST_OUT_EXECUTABLES)/mkdtimg
  28. $(BOARD_PREBUILT_DTBOIMAGE): $(KERNEL_OUT)/dtboimg.cfg
  29. $(hide) mkdir -p $(dir $@)
  30. $(PRIVATE_TOOL) cfg_create $@ $(PRIVATE_CFG)
  31. ifeq ($(strip $(MTK_DTBO_UPGRADE_FROM_ANDROID_O)), yes)
  32. droidcore: $(PRODUCT_OUT)/$(notdir $(BOARD_PREBUILT_DTBOIMAGE))
  33. odmdtboimage: $(PRODUCT_OUT)/$(notdir $(BOARD_PREBUILT_DTBOIMAGE))
  34. else
  35. droidcore: $(PRODUCT_OUT)/dtbo.img
  36. dtboimage: $(PRODUCT_OUT)/dtbo.img
  37. endif
  38. $(PRODUCT_OUT)/recovery.img: $(BOARD_PREBUILT_DTBOIMAGE)
  39. 由此可见,此处使用mkdtimg工具根据dtboimg.cfg来生成dtbo.img

三、MTK DTB  DTBO使用哪个DTS文件

  1. 文件:kernel-4.14/scripts/drvgen/drvgen.mk
  2. ifeq ($(strip $(CONFIG_ARM64)), y)
  3. MAIN_DT_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE_NAMES))
  4. else
  5. MAIN_DT_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE_NAMES))
  6. endif
  7. ifeq ($(strip $(CONFIG_ARM64)), y)
  8. PROJ_DT_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM64_DTB_OVERLAY_IMAGE_NAMES))
  9. else
  10. PROJ_DT_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM_DTB_OVERLAY_IMAGE_NAMES))
  11. endif
  12. 文件:kernel 的config文件
  13. CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE_NAMES="mediatek/mt6752"
  14. CONFIG_BUILD_ARM64_DTB_OVERLAY_IMAGE_NAMES="mediatek/mt6752_64"
  15. mt6752_64.dts用来生成DTBO,mt6752.dts用来生成dtb
  16. 但是drvgen.mk下面生成的DTB依赖文件是mtk.dtb,那mtk.dtb哪里来的呢?
  17. ABS_DTB_FILES := $(abspath $(addsuffix .dtb,$(addprefix $(objtree)/arch/$(SRCARCH)/boot/dts/,$(PROJ_DT_NAMES))))
  18. ABS_DTB2_FILES := $(abspath $(addprefix $(objtree)/arch/$(SRCARCH)/boot/,mtk.dtb))
  19. $(objtree)/dtbimg.cfg: FORCE
  20. rm -f $@.tmp
  21. $(foreach f,$(ABS_DTB2_FILES),$(call mk_dtbimg_cfg,$(f),$@.tmp))
  22. if ! cmp -s $@.tmp $@; then \
  23. mv $@.tmp $@; \
  24. else \
  25. rm $@.tmp; \
  26. fi
  27. 这个dtbimg.cfg文件内容就是mtk.dtb的路径
  28. 其他地方关于mtk.dtb的定义
  29. kenv.mk:109: KERNEL_DTB_FILE := $(KERNEL_OUT)/arch/$(KERNEL_TARGET_ARCH)/boot/mtk.dtb
  30. Android.mk
  31. ### DTB
  32. ifdef BOARD_PREBUILT_DTBIMAGE_DIR
  33. INSTALLED_MTK_DTB_TARGET := $(BOARD_PREBUILT_DTBIMAGE_DIR)/mtk_dtb
  34. $(shell if [ ! -f $(INSTALLED_MTK_DTB_TARGET) ]; then mkdir -p $(dir $(INSTALLED_MTK_DTB_TARGET)); touch $(INSTALLED_MTK_DTB_TARGET);fi)
  35. $(INSTALLED_MTK_DTB_TARGET): $(INSTALLED_KERNEL_TARGET)
  36. @mkdir -p $(dir $@)
  37. @cp -f $(KERNEL_DTB_FILE) $@
  38. endif
  39. dtbimg.cfg路径
  40. "out\target\product\mt6752_64\obj\KERNEL_OBJ\dtbimg.cfg"
  41. mtk.dtb路径
  42. "out\target\product\mt6752_64\obj\PACKAGING\dtb\mtk.dtb"
  43. mtk.dtb来源:
  44. 文件:arch/arm64/boot/Makefile
  45. DTB_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE_NAMES))
  46. ifneq ($(DTB_NAMES),)
  47. DTB_LIST := $(addsuffix .dtb,$(DTB_NAMES))
  48. else
  49. DTB_LIST := $(dtb-y)
  50. endif
  51. DTB_OBJS := $(addprefix $(obj)/dts/,$(DTB_LIST))
  52. $(obj)/mtk.dtb: $(DTB_OBJS) FORCE
  53. $(call if_changed,cat)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/1005079
推荐阅读
相关标签
  

闽ICP备14008679号