factory.mk 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
  2. # Licensed under the Apache License, Version 2.0 (the "License");
  3. # you may not use this file except in compliance with the License.
  4. # You may obtain a copy of the License at
  5. #
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. #
  8. # Unless required by applicable law or agreed to in writing, software
  9. # distributed under the License is distributed on an "AS IS" BASIS,
  10. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. # See the License for the specific language governing permissions and
  12. # limitations under the License.
  13. #
  14. # ֱ��ʹ��make���б����ʹ�÷���
  15. # make �� make all : ɾ�����н����������±�������ģ��
  16. # make clean : ɾ�����н�����
  17. # make link : ����
  18. MAIN_TOPDIR = $(shell pwd)
  19. THIRD_DIR = $(MAIN_TOPDIR)/third_party
  20. U_BOOT_DIR = $(MAIN_TOPDIR)/third_party/u-boot-v2019.07
  21. include $(MAIN_TOPDIR)/build/make_scripts/config.mk
  22. include $(MAIN_TOPDIR)/build/make_scripts/config_lib_factory.mk
  23. export MAIN_TOPDIR
  24. GCC_PATH := $(dir $(shell which $(CC)))
  25. GCC_LIBPATH := -L$(GCC_PATH)../lib/gcc/riscv32-unknown-elf/$(GCC_VER_NUM)
  26. LIBPATH += $(addprefix -Lbuild/build_tmp/libs/, $(foreach module, $(COMPILE_MODULE), $($(module)_dir)))
  27. ifneq ($(USR_LIBS),)
  28. LIBPATH := $(foreach path, $(LIBPATH), $(patsubst -L%, -L$(MAIN_TOPDIR)/%, $(path)))
  29. endif
  30. COMPILE_MODULE += boot loaderboot
  31. SIGN_CFG = A B
  32. A_SIGN = 0x0040d3c0
  33. B_SIGN = 0x004f13c0
  34. FACTORY_SIGN = 0x0054d3c0
  35. LIBS := $(filter-out -lboot -lloaderboot, $(LIBS))
  36. CCFLAGS += -DCONFIG_FACTORY_TEST_MODE
  37. FIRM_WARE_VER := $(shell if [ $(CONFIG_TARGET_KERNEL_VER) -gt -1 ] && [ $(CONFIG_TARGET_KERNEL_VER) -lt 49 ];then echo $(CONFIG_TARGET_KERNEL_VER);fi;)
  38. ifneq ($(FIRM_WARE_VER), $(CONFIG_TARGET_KERNEL_VER))
  39. $(error [ERROR]:FIRM_WARE_VER=$(FIRM_WARE_VER) Ranges From 0 To 48)
  40. endif
  41. BOOT_VER = $(shell if [ $(CONFIG_TARGET_BOOT_VER) -gt -1 ] && [ $(CONFIG_TARGET_BOOT_VER) -lt 17 ];then echo $(CONFIG_TARGET_BOOT_VER);fi;)
  42. ifneq ($(BOOT_VER), $(CONFIG_TARGET_BOOT_VER))
  43. $(error [ERROR]:BOOT_VER Ranges From 0 To 16)
  44. endif
  45. ifeq ($(CONFIG_TARGET_SIG_RSA_V15), y)
  46. SIGN_ALG = 0x0
  47. else ifeq ($(CONFIG_TARGET_SIG_RSA_PSS), y)
  48. SIGN_ALG = 0x1
  49. else ifeq ($(CONFIG_TARGET_SIG_ECC), y)
  50. SIGN_ALG = 0x10
  51. else ifeq ($(CONFIG_TARGET_SIG_SHA256), y)
  52. SIGN_ALG = 0x3F
  53. endif
  54. OUT_DIRS = $(MAIN_TOPDIR)/$(LOG_PATH) $(MAIN_TOPDIR)/$(CACHE_PATH) $(MAIN_TOPDIR)/$(LINK_PATH) $(MAIN_TOPDIR)/$(NV_PATH) $(MAIN_TOPDIR)/$(BIN_PATH)
  55. all:prepare build_libs_factory nv link_factory check_factory ota_factory
  56. $(Q)echo "< ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >"
  57. $(Q)echo " FACTORY BIN BUILD SUCCESS "
  58. $(Q)echo "< ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >"
  59. build_libs_factory:
  60. $(Q)$(foreach module, $(COMPILE_MODULE), \
  61. $(foreach lib, $($(module)_libs), \
  62. $(MAKE) -C $(MAIN_TOPDIR)/$($(module)_dir) MODULE_DIR=$($(module)_dir) LIB=$(lib) FACTORY_MODE=y all;))
  63. nv:
  64. $(NV_TOOL) $(MAIN_TOPDIR)/$(NV_PATH) $(TARGET_NAME) $(NV_CFG_NAME)
  65. link_factory:
  66. $(CC) $(LINK_SCRIPTS_FLAG) -E $(MAIN_TOPDIR)/build/link/system_config.ld.S -o $(MAIN_TOPDIR)/$(LINK_PATH)/system_config.ld -P
  67. $(CC) $(LINK_SCRIPTS_FLAG) -DFLASH_FIRM_START=$(FACTORY_SIGN) -E $(MAIN_TOPDIR)/build/link/link.ld.S -o $(MAIN_TOPDIR)/$(LINK_PATH)/link_factory.lds -P;
  68. $(LINK) $(LINKFLAGS) $(GCC_LIBPATH) $(sort $(LIBPATH)) -T$(MAIN_TOPDIR)/$(LINK_PATH)/link_factory.lds -Map=$(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_factory.map -o $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_factory.out --start-group $(LIBS) --end-group;
  69. $(OBJCOPY) -O binary $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_factory.out $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_factory.bin;
  70. $(OBJDUMP) -d $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_factory.out >$(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_factory.asm;
  71. dd if=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_factory.bin of=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_base_factory.bin seek=0 count=278 bs=1K;
  72. dd if=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_factory.bin of=$(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_kernel_factory.bin skip=278 bs=1K
  73. ota_factory:
  74. $(OTA_TOOL) factory_bin $(TARGET_NAME) $(SIGN_ALG) $(FIRM_WARE_VER) $(BOOT_VER) $(MAIN_TOPDIR)/$(BIN_PATH)/$(TARGET_NAME)_factory.bin usr_output=$(USR_OUTPUT_DIR) $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_kernel_factory.bin A
  75. cp -rf $(MAIN_TOPDIR)/$(BIN_PATH)/ $(MAIN_TOPDIR)/build/libs/factory_bin/
  76. check_factory: link_factory
  77. TARGET_SUM=$(shell sha256sum $(MAIN_TOPDIR)/$(CACHE_PATH)/$(TARGET_NAME)_base_factory.bin | cut -d ' ' -f1) && \
  78. if [ "$$TARGET_SUM" == '$(BASE_NUM)' ]; \
  79. then echo "#########BASE BIN IS SAME WITH FIRST COMPILE!#########"; \
  80. else echo "\033[32m#########BASE BIN IS DIFFERENT WITH FIRST COMPILE!#########\033[0m"; exit 1; fi;
  81. prepare:
  82. $(Q)$(foreach x, $(OUT_DIRS),\
  83. if [ ! -d $x ]; \
  84. then \
  85. mkdir -p $x; \
  86. echo create dir $(x) success; \
  87. fi;)
  88. if [ ! -d $(MAIN_TOPDIR)/third_party/u-boot-v2019.07/u-boot-v2019.07/ ]; \
  89. then \
  90. cd $(THIRD_DIR)/u-boot-v2019.07; \
  91. tar -xvf u-boot-v2019.07.tar.gz; \
  92. cd $(U_BOOT_DIR)/u-boot-v2019.07; \
  93. patch -p1 < ./../patch/CVE-2019-13103.patch; \
  94. patch -p1 < ./../patch/CVE-2019-13104.patch; \
  95. patch -p1 < ./../patch/CVE-2019-13105.patch; \
  96. patch -p1 < ./../patch/CVE-2019-13106.patch; \
  97. patch -p1 < ./../patch/CVE-2019-14192-14193-14199.patch; \
  98. patch -p1 < ./../patch/CVE-2019-14194-14198.patch; \
  99. patch -p1 < ./../patch/CVE-2019-14195.patch; \
  100. patch -p1 < ./../patch/CVE-2019-14196.patch; \
  101. patch -p1 < ./../patch/CVE-2019-14197-14200-14201-14202-14203-14204.patch; \
  102. patch -p1 < ./../hisilicon_patch/bossay-u-boot-v2019.07.patch ; \
  103. cd $(MAIN_TOPDIR); \
  104. fi;
  105. clean:
  106. $(Q)$(foreach x, $(OUT_DIRS),\
  107. if [ -d $(dir $x) ]; \
  108. then \
  109. $(RM) $(dir $x); \
  110. echo clean dir $(dir $x) success; \
  111. fi;)
  112. $(RM) $(MAIN_TOPDIR)/build/scripts/__pycache__/
  113. $(RM) $(MAIN_TOPDIR)/third_party/u-boot-v2019.07/u-boot-v2019.07