众所周知,Android系统是比较复杂的,在这里我们简析一下Android 系统中的UBOOT是怎么编译的。软件版本我们以Android p 9.0.0_2.3.x auto 版本

Software:Android p 9.0.0_2.3.x auto
Hardware:imx8qm/imx8qxp mek

在这里我们主要看两个文件,下面我们细细讲来。

1.BoardConfig.mk

文件路径如下:

android-auto-p\android_build\device\fsl\imx8q\mek_8q

这个文件中包括板级的设置,例如蓝牙,wifi等相关的配置。
另外还包括UBOOT的config选择,DTS以及kernel config 的选择,AVB key 的位置等信息。
详细代码如下所示:

## Product-specific compile-time definitions.#IMX_DEVICE_PATH := device/fsl/imx8q/mek_8qinclude device/fsl/imx8q/BoardConfigCommon.mkifeq ($(PREBUILT_FSL_IMX_CODEC),true)-include $(FSL_CODEC_PATH)/fsl-codec/fsl-codec.mk-include $(FSL_RESTRICTED_CODEC_PATH)/fsl-restricted-codec/imx_dsp_aacp_dec/imx_dsp_aacp_dec.mk-include $(FSL_RESTRICTED_CODEC_PATH)/fsl-restricted-codec/imx_dsp_codec/imx_dsp_codec.mk-include $(FSL_RESTRICTED_CODEC_PATH)/fsl-restricted-codec/imx_dsp/imx_dsp.mkendifBUILD_TARGET_FS ?= ext4TARGET_USERIMAGES_USE_EXT4 := trueifeq ($(PRODUCT_IMX_CAR),true)TARGET_RECOVERY_FSTAB = $(IMX_DEVICE_PATH)/fstab.freescale.carelseTARGET_RECOVERY_FSTAB = $(IMX_DEVICE_PATH)/fstab.freescaleendif # PRODUCT_IMX_CAR# Support gptifeq ($(PRODUCT_IMX_CAR),true)BOARD_BPT_INPUT_FILES += device/fsl/common/partition/device-partitions-13GB-ab-dual-bootloader.bptADDITION_BPT_PARTITION = partition-table-7GB:device/fsl/common/partition/device-partitions-7GB-ab-dual-bootloader.bpt \                         partition-table-28GB:device/fsl/common/partition/device-partitions-28GB-ab-dual-bootloader.bptelseBOARD_BPT_INPUT_FILES += device/fsl/common/partition/device-partitions-13GB-ab.bptADDITION_BPT_PARTITION = partition-table-7GB:device/fsl/common/partition/device-partitions-7GB-ab.bpt \                         partition-table-28GB:device/fsl/common/partition/device-partitions-28GB-ab.bptendif# Vendor Interface Manifestifeq ($(PRODUCT_IMX_CAR),true)DEVICE_MANIFEST_FILE := $(IMX_DEVICE_PATH)/manifest_car.xmlelseDEVICE_MANIFEST_FILE := $(IMX_DEVICE_PATH)/manifest.xmlendif# Vendor compatibility matrixDEVICE_MATRIX_FILE := $(IMX_DEVICE_PATH)/compatibility_matrix.xmlTARGET_BOOTLOADER_BOARD_NAME := MEKPRODUCT_MODEL := MEK-MX8QTARGET_BOOTLOADER_POSTFIX := binUSE_OPENGL_RENDERER := trueTARGET_CPU_SMP := trueBOARD_WLAN_DEVICE            := qcwcnWPA_SUPPLICANT_VERSION       := VER_0_8_XBOARD_WPA_SUPPLICANT_DRIVER  := NL80211BOARD_HOSTAPD_DRIVER         := NL80211BOARD_HOSTAPD_PRIVATE_LIB               := lib_driver_cmd_$(BOARD_WLAN_DEVICE)BOARD_WPA_SUPPLICANT_PRIVATE_LIB        := lib_driver_cmd_$(BOARD_WLAN_DEVICE)WIFI_HIDL_FEATURE_DUAL_INTERFACE := trueBOARD_VENDOR_KERNEL_MODULES += \                            $(KERNEL_OUT)/drivers/net/wireless/qcacld-2.0/wlan.koifeq ($(PRODUCT_IMX_CAR_M4),true)BOARD_VENDOR_KERNEL_MODULES += \                            $(KERNEL_OUT)/drivers/extcon/extcon-ptn5150.ko \                            $(KERNEL_OUT)/drivers/hid/usbhid/usbhid.ko \                            $(KERNEL_OUT)/drivers/staging/typec/tcpci.ko \                            $(KERNEL_OUT)/drivers/staging/typec/tcpm.ko \                            $(KERNEL_OUT)/drivers/usb/cdns3/cdns3.ko \                            $(KERNEL_OUT)/drivers/usb/chipidea/ci_hdrc.ko \                            $(KERNEL_OUT)/drivers/usb/chipidea/ci_hdrc_imx.ko \                            $(KERNEL_OUT)/drivers/usb/chipidea/usbmisc_imx.ko \                            $(KERNEL_OUT)/drivers/usb/core/usbcore.ko \                            $(KERNEL_OUT)/drivers/usb/host/xhci-hcd.ko \                            $(KERNEL_OUT)/drivers/usb/host/ehci-hcd.ko \                            $(KERNEL_OUT)/drivers/usb/storage/usb-storage.ko \                            $(KERNEL_OUT)/drivers/usb/typec/typec.ko \                            $(KERNEL_OUT)/drivers/scsi/sd_mod.ko \                            $(KERNEL_OUT)/drivers/bluetooth/mx8_bt_rfkill.ko \                            $(KERNEL_OUT)/drivers/hid/hid-multitouch.ko \                            $(KERNEL_OUT)/drivers/gpu/drm/bridge/it6263.ko \                            $(KERNEL_OUT)/drivers/gpu/imx/imx8_prg.ko \                            $(KERNEL_OUT)/drivers/gpu/imx/imx8_dprc.ko \                            $(KERNEL_OUT)/drivers/gpu/imx/imx8_pc.ko \                            $(KERNEL_OUT)/drivers/gpu/imx/dpu-blit/imx-dpu-blit.ko \                            $(KERNEL_OUT)/drivers/gpu/drm/imx/dpu/imx-dpu-render.ko \                            $(KERNEL_OUT)/drivers/gpu/imx/dpu/imx-dpu-core.ko \                            $(KERNEL_OUT)/drivers/gpu/drm/imx/dpu/imx-dpu-crtc.ko \                            $(KERNEL_OUT)/drivers/media/platform/imx8/max9286_gmsl.ko \                            $(KERNEL_OUT)/drivers/media/platform/imx8/mxc-mipi-csi2.ko \                            $(KERNEL_OUT)/drivers/media/platform/imx8/mxc-media-dev.ko \                            $(KERNEL_OUT)/drivers/media/platform/imx8/mxc-capture.ko \BOARD_RECOVERY_KERNEL_MODULES += \                            $(KERNEL_OUT)/drivers/gpu/drm/bridge/it6263.ko \                            $(KERNEL_OUT)/drivers/gpu/imx/imx8_prg.ko \                            $(KERNEL_OUT)/drivers/gpu/imx/imx8_dprc.ko \                            $(KERNEL_OUT)/drivers/gpu/imx/imx8_pc.ko \                            $(KERNEL_OUT)/drivers/gpu/imx/dpu-blit/imx-dpu-blit.ko \                            $(KERNEL_OUT)/drivers/gpu/drm/imx/dpu/imx-dpu-render.ko \                            $(KERNEL_OUT)/drivers/gpu/imx/dpu/imx-dpu-core.ko \                            $(KERNEL_OUT)/drivers/gpu/drm/imx/dpu/imx-dpu-crtc.koendif# Qcom 1CQ(QCA6174) BTBOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := $(IMX_DEVICE_PATH)/bluetoothBOARD_HAVE_BLUETOOTH_QCOM := trueBOARD_HAS_QCA_BT_ROME := trueBOARD_HAVE_BLUETOOTH_BLUEZ := falseQCOM_BT_USE_SIBS := trueifeq ($(QCOM_BT_USE_SIBS), true)    WCNSS_FILTER_USES_SIBS := trueendif# sensor configsBOARD_USE_SENSOR_FUSION := trueBOARD_USE_SENSOR_PEDOMETER := falseifeq ($(PRODUCT_IMX_CAR),true)    BOARD_USE_LEGACY_SENSOR := falseelse    BOARD_USE_LEGACY_SENSOR :=trueendif# for recovery serviceTARGET_SELECT_KEY := 28# we don't support sparse image.TARGET_USERIMAGES_SPARSE_EXT_DISABLED := falseUBOOT_POST_PROCESS := true# camera hal v3IMX_CAMERA_HAL_V3 := trueBOARD_HAVE_USB_CAMERA := true# whether to accelerate camera service with openCL# it will make camera service load the opencl lib in vendor# and break the full treble rule# OPENCL_2D_IN_CAMERA := trueUSE_ION_ALLOCATOR := trueUSE_GPU_ALLOCATOR := false# define frame buffer countNUM_FRAMEBUFFER_SURFACE_BUFFERS := 3ifeq ($(PRODUCT_IMX_CAR),true)KERNEL_NAME := Image.lz4elseKERNEL_NAME := ImageendifBOARD_KERNEL_CMDLINE := init=/init androidboot.hardware=freescale androidboot.fbTileSupport=enable cma=800M@0x960M-0xe00M androidboot.primary_display=imx-drm firmware_class.path=/vendor/firmware transparent_hugepage=never loop.max_part=7# Default wificountrycodeBOARD_KERNEL_CMDLINE += androidboot.wificountrycode=CNifeq ($(PRODUCT_IMX_CAR),true)BOARD_KERNEL_CMDLINE += galcore.contiguousSize=33554432 video=HDMI-A-2:delseBOARD_KERNEL_CMDLINE += androidboot.console=ttyLP0endififeq ($(TARGET_USERIMAGES_USE_UBIFS),true)ifeq ($(TARGET_USERIMAGES_USE_EXT4),true)$(error "TARGET_USERIMAGES_USE_UBIFS and TARGET_USERIMAGES_USE_EXT4 config open in same time, please only choose one target file system image")endifendifBOARD_PREBUILT_DTBOIMAGE := out/target/product/mek_8q/dtbo-imx8qm.imgifeq ($(OTA_TARGET),8qxp)BOARD_PREBUILT_DTBOIMAGE := out/target/product/mek_8q/dtbo-imx8qxp.imgendififeq ($(PRODUCT_IMX_CAR),true)AB_OTA_PARTITIONS += bootloaderBOARD_OTA_BOOTLOADERIMAGE := out/target/product/mek_8q/bootloader-imx8qm.imgifeq ($(OTA_TARGET),8qxp)BOARD_OTA_BOOTLOADERIMAGE := out/target/product/mek_8q/bootloader-imx8qxp.imgendififeq ($(PRODUCT_IMX_CAR_M4),true)# imx8qm auto androidTARGET_BOARD_DTS_CONFIG := imx8qm:fsl-imx8qm-mek-car.dtb# imx8qm auto android virtualizationTARGET_BOARD_DTS_CONFIG += imx8qm-xen:fsl-imx8qm-mek-domu-car.dtb# imx8qxp auto androidTARGET_BOARD_DTS_CONFIG += imx8qxp:fsl-imx8qxp-mek-car.dtb# u-boot target for imx8qm_mek auto androidTARGET_BOOTLOADER_CONFIG := imx8qm:imx8qm_mek_androidauto_trusty_defconfig# u-boot target for imx8qxp_mek auto androidTARGET_BOOTLOADER_CONFIG += imx8qxp:imx8qxp_mek_androidauto_trusty_defconfigTARGET_BOOTLOADER_CONFIG += imx8qxp-c0:imx8qxp_mek_androidauto_trusty_defconfigelse# imx8qm auto android without m4 imageTARGET_BOARD_DTS_CONFIG := imx8qm:fsl-imx8qm-mek-car2.dtb# imx8qxp auto android without m4 imageTARGET_BOARD_DTS_CONFIG += imx8qxp:fsl-imx8qxp-mek-car2.dtb# u-boot target for imx8qm_mek auto androidTARGET_BOOTLOADER_CONFIG := imx8qm:imx8qm_mek_androidauto2_trusty_defconfig# u-boot target for imx8qxp_mek auto androidTARGET_BOOTLOADER_CONFIG += imx8qxp:imx8qxp_mek_androidauto2_trusty_defconfigTARGET_BOOTLOADER_CONFIG += imx8qxp-c0:imx8qxp_mek_androidauto2_trusty_defconfigendif #PRODUCT_IMX_CAR_M4# u-boot target for imx8qm_mek auto android virtualizationTARGET_BOOTLOADER_CONFIG += imx8qm-xen:imx8qm_mek_androidauto_xen_dual_defconfig# u-boot target for imx8qm_mek linux which has virtualization enabledTARGET_BOOTLOADER_CONFIG += imx8qm-xen-dom0:imx8qm_mek_spl_defconfigelse# imx8qm standard android; MIPI-HDMI displayTARGET_BOARD_DTS_CONFIG := imx8qm:fsl-imx8qm-mek-ov5640.dtb# imx8qm standard android; MIPI panel displayTARGET_BOARD_DTS_CONFIG += imx8qm-mipi-panel:fsl-imx8qm-mek-dsi-rm67191.dtb# imx8qm standard android; HDMI displayTARGET_BOARD_DTS_CONFIG += imx8qm-hdmi:fsl-imx8qm-mek-hdmi.dtb# imx8qxp standard android; MIPI-HDMI displayTARGET_BOARD_DTS_CONFIG += imx8qxp:fsl-imx8qxp-mek-ov5640.dtb# u-boot target for imx8qm_mek standard androidTARGET_BOOTLOADER_CONFIG := imx8qm:imx8qm_mek_android_defconfig# u-boot target for imx8qm_mek standard android with trusty supportTARGET_BOOTLOADER_CONFIG += imx8qm-trusty:imx8qm_mek_android_trusty_defconfig# u-boot target for imx8qxp_mek standard androidTARGET_BOOTLOADER_CONFIG += imx8qxp:imx8qxp_mek_android_defconfigTARGET_BOOTLOADER_CONFIG += imx8qxp-c0:imx8qxp_mek_android_defconfig# u-boot target for imx8qxp_mek standard androidTARGET_BOOTLOADER_CONFIG += imx8qxp-trusty:imx8qxp_mek_android_trusty_defconfigTARGET_BOOTLOADER_CONFIG += imx8qxp-trusty-c0:imx8qxp_mek_android_trusty_defconfigendif #PRODUCT_IMX_CAR# u-boot target used by uuu for imx8qm_mekTARGET_BOOTLOADER_CONFIG += imx8qm-mek-uuu:imx8qm_mek_android_uuu_defconfig# u-boot target used by uuu for imx8qxp_mekTARGET_BOOTLOADER_CONFIG += imx8qxp-mek-uuu:imx8qxp_mek_android_uuu_defconfigTARGET_BOOTLOADER_CONFIG += imx8qxp-mek-c0-uuu:imx8qxp_mek_android_uuu_defconfigifeq ($(PRODUCT_IMX_CAR),true)ifeq ($(PRODUCT_IMX_CAR_M4),true)TARGET_KERNEL_DEFCONFIG := android_car_defconfigelseTARGET_KERNEL_DEFCONFIG := android_car2_defconfigendif # PRODUCT_IMX_CAR_M4include $(IMX_DEVICE_PATH)/build_id_car.mkelseTARGET_KERNEL_DEFCONFIG := android_defconfiginclude $(IMX_DEVICE_PATH)/build_id.mkendif # PRODUCT_IMX_CAR# TARGET_KERNEL_ADDITION_DEFCONF := android_addition_defconfigBOARD_SEPOLICY_DIRS := \       device/fsl/imx8q/sepolicy \       $(IMX_DEVICE_PATH)/sepolicyifeq ($(PRODUCT_IMX_CAR),true)BOARD_SEPOLICY_DIRS += \     packages/services/Car/car_product/sepolicy \     packages/services/Car/evs/sepolicy \     device/fsl/imx8q/sepolicy_car \     $(IMX_DEVICE_PATH)/sepolicy_car \     device/generic/car/common/sepolicyendififeq ($(PRODUCT_IMX_CAR),true)TARGET_BOARD_RECOVERY_FORMAT_SKIP := trueTARGET_BOARD_RECOVERY_SBIN_SKIP := trueendifBOARD_AVB_ENABLE := trueBOARD_AVB_ALGORITHM := SHA256_RSA4096# The testkey_rsa4096.pem is copied from external/avb/test/data/testkey_rsa4096.pemBOARD_AVB_KEY_PATH := device/fsl/common/security/testkey_rsa4096.pemTARGET_USES_MKE2FS := trueTARGET_BOARD_KERNEL_HEADERS := device/fsl/common/kernel-headersifeq ($(PRODUCT_IMX_CAR),true)BOARD_HAVE_IMX_EVS := trueendif# define board typeBOARD_TYPE := MEK

下面我们看一下我们的bootloader文件之怎么编译出来的。

1.第一种把bootloader编译为两个文件,一个是spl 文件,另外一个是TEE,ATF和uboot的合成。2.第二种是将所有的文件编译到一个文件里面

第一种,笔者认为是为了方便a/b分区。把boot loader分为两部分。spl部分不轻易修改。而TEE,ATF,UBOOT合成一个新的image,这个image可以分为a,b两部分,可以进行OTA升级操作。下面我们看一下AndroidUboot.mk文件,这个是怎么编译出来的。

2.AndroidUboot.mk

文件位置:

android-auto-p\android_build\device\fsl\imx8q\mek_8q

代码如下:

# uboot.imx in android combine scfw.bin and uboot.binMAKE += SHELL=/bin/bashATF_TOOLCHAIN_ABS := $(realpath prebuilts/gcc/$(HOST_PREBUILT_TAG)/aarch64/aarch64-linux-android-4.9/bin)ATF_CROSS_COMPILE := $(ATF_TOOLCHAIN_ABS)/aarch64-linux-androidkernel-MCU_SDK_IMX8QM_DEMO_PATH := $(IMX_MCU_SDK_PATH)/mcu-sdk-auto/SDK_MEK-MIMX8QM/boards/mekmimx8qm/demo_apps/rear_view_camera/cm4_core1/armgccMCU_SDK_IMX8QM_CMAKE_FILE := ../../../../../../tools/cmake_toolchain_files/armgcc.cmakeMCU_SDK_IMX8QX_DEMO_PATH := $(IMX_MCU_SDK_PATH)/mcu-sdk-auto/SDK_MEK-MIMX8QX/boards/mekmimx8qx/demo_apps/rear_view_camera/armgccMCU_SDK_IMX8QX_CMAKE_FILE := ../../../../../tools/cmake_toolchain_files/armgcc.cmakeUBOOT_M4_OUT := $(TARGET_OUT_INTERMEDIATES)/MCU_OBJUBOOT_M4_BUILD_TYPE := ddr_releasedefine build_M4_imagemkdir -p $(UBOOT_M4_OUT)/$2; \cmake -DCMAKE_TOOLCHAIN_FILE="$4" -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=$3 -S $1 -B $(UBOOT_M4_OUT)/$2 1>/dev/null || exit 1; \$(MAKE) -C $(UBOOT_M4_OUT)/$2 1>/dev/null || exit 1endefifeq ($(PRODUCT_IMX_CAR_M4_BUILD),true)ifeq ($(ARMGCC_DIR),)$(error please install arm-none-eabi-gcc toolchain and set the installed path to ARMGCC_DIR)endif$(UBOOT_M4_OUT):rm -rf $@mkdir -p $@UBOOT_M4_BIN: $(UBOOT_M4_OUT)$(hide) echo "Building M4 image for UBoot ..."cmake_version=$(shell cmake --version | head -n 1 | tr " " "\n" | tail -n 1); \req_version="3.13.0"; \if [ "$(shell echo "$$cmake_version $$req_version" | tr " " "\n" | sort -V | head -n 1)" != "$$req_version" ]; then \echo "please upgrade cmake version to 3.13.0 or newer"; \exit 1; \fi; \$(call build_M4_image,$(MCU_SDK_IMX8QM_DEMO_PATH),MIMX8QM,$(UBOOT_M4_BUILD_TYPE),$(MCU_SDK_IMX8QM_CMAKE_FILE)); \$(call build_M4_image,$(MCU_SDK_IMX8QX_DEMO_PATH),MIMX8QX,$(UBOOT_M4_BUILD_TYPE),$(MCU_SDK_IMX8QX_CMAKE_FILE))elseUBOOT_M4_BIN:endif # PRODUCT_IMX_CAR_M4_BUILDdefine build_imx_ubootif [ `echo $(2) | cut -d '-' -f1` == "imx8qm" ] && [ `echo $(2) | cut -d '-' -f2` != "xen" ]; then \MKIMAGE_PLATFORM=`echo iMX8QM`; \SCFW_PLATFORM=`echo 8qm`;  \ATF_PLATFORM=`echo imx8qm`; \REV=`echo B0`;  \if [ `echo $(2) | rev | cut -d '-' -f1` == "uuu" ]; then \FLASH_TARGET=`echo flash_b0`;  \else \FLASH_TARGET=`echo flash_linux_m4`;  \fi; \cp  $(FSL_PROPRIETARY_PATH)/imx-seco/firmware/seco/mx8qm*ahab-container.img $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/; \cp  $(FSL_PROPRIETARY_PATH)/fsl-proprietary/mcu-sdk/imx8q/imx8qm_m4_0_default.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/m4_image.bin; \cp  $(FSL_PROPRIETARY_PATH)/fsl-proprietary/mcu-sdk/imx8q/imx8qm_m4_1_default.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/m4_1_image.bin; \if [ "$(PRODUCT_IMX_CAR)" == "true" ] && [ `echo $(2) | rev | cut -d '-' -f1` != "uuu" ]; then \if [ "$(PRODUCT_IMX_CAR_M4)" == "true" ] ; then \FLASH_TARGET=`echo flash_all_spl_container_ddr_car`;  \if [ -f $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/m4_1_image.bin ]; then \rm -f $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/m4_1_image.bin; \fi; \cp  $(UBOOT_M4_OUT)/MIMX8QM/$(UBOOT_M4_BUILD_TYPE)/m4_image.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/m4_1_image.bin; \fi; \if [ -f $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/hdmitxfw.bin ]; then \rm -f $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/hdmitxfw.bin; \fi; \if [ -f $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/hdmirxfw.bin ]; then \rm -f $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/hdmirxfw.bin; \fi; \else \cp $(FSL_PROPRIETARY_PATH)/linux-firmware-imx/firmware/hdmi/cadence/hdmitxfw.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/hdmitxfw.bin; \cp $(FSL_PROPRIETARY_PATH)/linux-firmware-imx/firmware/hdmi/cadence/hdmirxfw.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/hdmirxfw.bin; \fi; \elif [ "$(strip $(2))" == "imx8qm-xen-dom0" ]; then \MKIMAGE_PLATFORM=`echo iMX8QM`; \SCFW_PLATFORM=`echo 8qm`;  \ATF_PLATFORM=`echo imx8qm`; \REV=`echo B0`;  \cp  $(FSL_PROPRIETARY_PATH)/imx-seco/firmware/seco/mx8qm*ahab-container.img $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/; \FLASH_TARGET=`echo flash_b0_spl_container_m4_1`;  \cp  $(UBOOT_M4_OUT)/MIMX8QM/$(UBOOT_M4_BUILD_TYPE)/m4_image.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/m4_1_image.bin; \elif [ "$(strip $(2))" == "imx8qm-xen" ]; then \MKIMAGE_PLATFORM=`echo iMX8QM`; \FLASH_TARGET=`echo flash_b0_xen_uboot`;  \REV=`echo B0`;  \elif [ `echo $(2) | cut -d '-' -f1` == "imx8qxp" ]; then \MKIMAGE_PLATFORM=`echo iMX8QX`; \SCFW_PLATFORM=`echo 8qx`; \ATF_PLATFORM=`echo imx8qx`; \if [ `echo $(2) | cut -d '-' -f2` == "c0" ] || [ `echo $(2) | cut -d '-' -f3` == "c0" ]; then \REV=`echo C0`;  \else \REV=`echo B0`;  \fi; \if [ `echo $(2) | rev | cut -d '-' -f1` == "uuu" ]; then \FLASH_TARGET=`echo flash`;  \else \FLASH_TARGET=`echo flash_linux_m4`;  \fi; \cp  $(FSL_PROPRIETARY_PATH)/imx-seco/firmware/seco/mx8qx*ahab-container.img $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/; \cp  $(FSL_PROPRIETARY_PATH)/fsl-proprietary/mcu-sdk/imx8q/imx8qx_m4_default.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/m4_image.bin; \if [ "$(PRODUCT_IMX_CAR)" == "true" ] && [ `echo $(2) | rev | cut -d '-' -f1` != "uuu" ]; then \if [ "$(PRODUCT_IMX_CAR_M4)" == "true" ] ; then \FLASH_TARGET=`echo flash_all_spl_container_ddr_car`;  \if [ -f $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/m4_image.bin ]; then \rm -f $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/m4_image.bin; \fi; \cp  $(UBOOT_M4_OUT)/MIMX8QX/$(UBOOT_M4_BUILD_TYPE)/rear_view_camera.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/m4_image.bin; \fi; \fi; \fi; \if [ "$(PRODUCT_IMX_CAR_M4)" == "true" ]; then \cp  $(FSL_PROPRIETARY_PATH)/fsl-proprietary/uboot-firmware/imx8q_car/mx$$SCFW_PLATFORM-scfw-tcm.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/scfw_tcm.bin; \else \cp  $(FSL_PROPRIETARY_PATH)/fsl-proprietary/uboot-firmware/imx8q/mx$$SCFW_PLATFORM-scfw-tcm.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/scfw_tcm.bin; \fi; \if [ "$(PRODUCT_IMX_CAR)" == "true" -a  `echo $(2) | rev | cut -d '-' -f1` != "uuu" -o `echo $(2) | cut -d '-' -f2` == "trusty" ]; then \cp  $(FSL_PROPRIETARY_PATH)/fsl-proprietary/uboot-firmware/imx8q_car/tee-imx$$SCFW_PLATFORM.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/tee.bin; \else \if [ -f $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/tee.bin ]; then \rm -f $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/tee.bin; \fi; \fi; \if [ "$(strip $(2))" != "imx8qm-xen" ]; then \$(MAKE) -C $(IMX_PATH)/arm-trusted-firmware/ PLAT=$$ATF_PLATFORM clean; \if [ "$(PRODUCT_IMX_CAR)" == "true" -a "$(strip $(2))" != "imx8qm-xen-dom0" -a `echo $(2) | rev | cut -d '-' -f1` != "uuu" -o `echo $(2) | cut -d '-' -f2` == "trusty" ]; then \$(MAKE) -C $(IMX_PATH)/arm-trusted-firmware/ CROSS_COMPILE="$(ATF_CROSS_COMPILE)" PLAT=$$ATF_PLATFORM bl31 SPD=trusty -B 1>/dev/null || exit 1; \else \$(MAKE) -C $(IMX_PATH)/arm-trusted-firmware/ CROSS_COMPILE="$(ATF_CROSS_COMPILE)" PLAT=$$ATF_PLATFORM bl31 -B 1>/dev/null || exit 1; \fi; \cp $(IMX_PATH)/arm-trusted-firmware/build/$$ATF_PLATFORM/release/bl31.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/bl31.bin; \cp  $(UBOOT_OUT)/u-boot.$(strip $(1)) $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/u-boot.bin; \if [ `echo $(2) | rev | cut -d '-' -f1` != "uuu" ]; then \cp  $(UBOOT_OUT)/spl/u-boot-spl.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/u-boot-spl.bin; \fi; \cp  $(UBOOT_OUT)/tools/mkimage  $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/mkimage_uboot; \$(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ clean; \$(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ SOC=$$MKIMAGE_PLATFORM REV=$$REV $$FLASH_TARGET || exit 1; \if [ "$(PRODUCT_IMX_CAR)" != "true" ] || [ `echo $(2) | rev | cut -d '-' -f1` == "uuu" ] || [ "$(strip $(2))" == "imx8qm-xen-dom0" ]; then \cp $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/flash.bin $(PRODUCT_OUT)/u-boot-$(strip $(2)).imx; \else \cp $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/boot-spl-container.img $(PRODUCT_OUT)/spl-$(strip $(2)).bin; \cp $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/u-boot-atf-container.img $(PRODUCT_OUT)/bootloader-$(strip $(2)).img; \rm $(PRODUCT_OUT)/u-boot-$(strip $(2)).imx; \fi; \else \cp $(UBOOT_OUT)/u-boot.$(strip $(1)) $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/u-boot.bin; \cp $(UBOOT_OUT)/spl/u-boot-spl.bin $(PRODUCT_OUT)/spl-$(strip $(2)).bin; \cp $(UBOOT_OUT)/tools/mkimage  $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/mkimage_uboot; \$(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ clean; \$(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ SOC=$$MKIMAGE_PLATFORM $$FLASH_TARGET 1>/dev/null || exit 1; \cp $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/u-boot-xen-container.img $(PRODUCT_OUT)/bootloader-$(strip $(2)).img; \rm $(PRODUCT_OUT)/u-boot-$(strip $(2)).imx; \fi;endef

我们以imx8qm AUTO 版本为例。如果编译的是UUU的uboot,所选的target是flash,否则是flash_linux_m4flash这个编译出的uboot是专门利用UUU工具烧写镜像文件所需要的。
继续往下看,如果设置了PRODUCT_IMX_CAR以及PRODUCT_IMX_CAR_M4,target变为flash_all_spl_container_ddr_car,我们看flash_linux_m4这个是在什么地方编译的呢,这个是在imx-mkimage目录下。
文件目录:

android-auto-p-2.3.3\android_build\vendor\nxp-opensource\imx-mkimage\iMX8QM

我们详细查看soc.mak

u-boot-hash.bin: u-boot.bin./$(MKIMG) -commit > head.hash@cat u-boot.bin head.hash > u-boot-hash.binu-boot-atf.bin: u-boot-hash.bin bl31.bin@cp bl31.bin u-boot-atf.bin@dd if=u-boot-hash.bin of=u-boot-atf.bin bs=1K seek=128@if [ -f "hdmitxfw.bin" ] && [ -f "hdmirxfw.bin" ]; then \objcopy -I binary -O binary --pad-to 0x20000 --gap-fill=0x0 hdmitxfw.bin hdmitxfw-pad.bin; \objcopy -I binary -O binary --pad-to 0x20000 --gap-fill=0x0 hdmirxfw.bin hdmirxfw-pad.bin; \cat u-boot-atf.bin hdmitxfw-pad.bin hdmirxfw-pad.bin > u-boot-atf-hdmi.bin; \cp u-boot-atf-hdmi.bin u-boot-atf.bin; \fiu-boot-atf.itb: u-boot-hash.bin bl31.bin@if [ -f "hdmitxfw.bin" ] && [ -f "hdmirxfw.bin" ]; then \objcopy -I binary -O binary --pad-to 0x20000 --gap-fill=0x0 hdmitxfw.bin hdmitxfw-pad.bin; \objcopy -I binary -O binary --pad-to 0x20000 --gap-fill=0x0 hdmirxfw.bin hdmirxfw-pad.bin; \cat u-boot-hash.bin hdmitxfw-pad.bin hdmirxfw-pad.bin > u-boot-hash.bin.temp; \mv u-boot-hash.bin.temp u-boot-hash.bin; \fi./$(PAD_IMAGE) bl31.bin./$(PAD_IMAGE) u-boot-hash.bin./mkimage_fit_atf.sh > u-boot.its;./mkimage_uboot -E -p 0x3000 -f u-boot.its u-boot-atf.itb;@rm -f u-boot.itsu-boot-atf-container.img: bl31.bin u-boot-hash.bin@if [ -f "hdmitxfw.bin" ] && [ -f "hdmirxfw.bin" ]; then \objcopy -I binary -O binary --pad-to 0x20000 --gap-fill=0x0 hdmitxfw.bin hdmitxfw-pad.bin; \objcopy -I binary -O binary --pad-to 0x20000 --gap-fill=0x0 hdmirxfw.bin hdmirxfw-pad.bin; \cat u-boot-hash.bin hdmitxfw-pad.bin hdmirxfw-pad.bin > u-boot-hash.bin.temp; \mv u-boot-hash.bin.temp u-boot-hash.bin; \fiif [ -f "tee.bin" ]; then \if [ $(shell echo $(ROLLBACK_INDEX_IN_CONTAINER)) ]; then \./$(MKIMG) -soc QM -sw_version $(ROLLBACK_INDEX_IN_CONTAINER) -rev B0 -c -ap bl31.bin a53 0x80000000 -ap u-boot-hash.bin a53 0x80020000 -ap tee.bin a53 0xFE000000 -out u-boot-atf-container.img; \else \./$(MKIMG) -soc QM -rev B0 -c -ap bl31.bin a53 0x80000000 -ap u-boot-hash.bin a53 0x80020000 -ap tee.bin a53 0xFE000000 -out u-boot-atf-container.img; \fi; \else \./$(MKIMG) -soc QM -rev B0 -c -ap bl31.bin a53 0x80000000 -ap u-boot-hash.bin a53 0x80020000 -out u-boot-atf-container.img; \fi...........................................flash_linux_m4: $(MKIMG) $(AHAB_IMG) scfw_tcm.bin u-boot-spl.bin m4_image.bin m4_1_image.bin u-boot-atf-container.img./$(MKIMG) -soc QM -rev B0 -dcd skip -append $(AHAB_IMG) -c -flags 0x00200000 -scfw scfw_tcm.bin -ap u-boot-spl.bin a53 0x00100000 -p3 -m4 m4_image.bin 0 0x34FE0000 -p4 -m4 m4_1_image.bin 1 0x38FE0000 -out flash.bincp flash.bin boot-spl-container.img@flashbin_size=`wc -c flash.bin | awk '{print $$1}'`; \                   pad_cnt=$$(((flashbin_size + 0x400 - 1) / 0x400)); \                   echo "append u-boot-atf-container.img at $$pad_cnt KB"; \                   dd if=u-boot-atf-container.img of=flash.bin bs=1K seek=$$pad_cnt;

再回到AndroidUboot.mk文件,

if [ `echo $(2) | rev | cut -d '-' -f1` != "uuu" ]; then \cp  $(UBOOT_OUT)/spl/u-boot-spl.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/u-boot-spl.bin; \fi; \cp  $(UBOOT_OUT)/tools/mkimage  $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/mkimage_uboot; \$(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ clean; \$(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ SOC=$$MKIMAGE_PLATFORM REV=$$REV $$FLASH_TARGET || exit 1; \if [ "$(PRODUCT_IMX_CAR)" != "true" ] || [ `echo $(2) | rev | cut -d '-' -f1` == "uuu" ] || [ "$(strip $(2))" == "imx8qm-xen-dom0" ]; then \cp $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/flash.bin $(PRODUCT_OUT)/u-boot-$(strip $(2)).imx; \else \cp $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/boot-spl-container.img $(PRODUCT_OUT)/spl-$(strip $(2)).bin; \cp $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/u-boot-atf-container.img $(PRODUCT_OUT)/bootloader-$(strip $(2)).img; \rm $(PRODUCT_OUT)/u-boot-$(strip $(2)).imx; \fi; \else \cp $(UBOOT_OUT)/u-boot.$(strip $(1)) $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/u-boot.bin; \cp $(UBOOT_OUT)/spl/u-boot-spl.bin $(PRODUCT_OUT)/spl-$(strip $(2)).bin; \cp $(UBOOT_OUT)/tools/mkimage  $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/mkimage_uboot; \$(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ clean; \$(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ SOC=$$MKIMAGE_PLATFORM $$FLASH_TARGET 1>/dev/null || exit 1; \cp $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/u-boot-xen-container.img $(PRODUCT_OUT)/bootloader-$(strip $(2)).img; \rm $(PRODUCT_OUT)/u-boot-$(strip $(2)).imx; \fi;

这部分讲的就是生成最后的bootloader 相关的image的方法。

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android(安卓)OTA 升级
  6. Android架构组件--App Startup学习笔记
  7. EditText 修改光标颜色及位置
  8. Android(安卓)SSL BKS证书的生成过程
  9. Android(安卓)API : SimpleCursorAdapter()

随机推荐

  1. Android使用Spannable对文字进行设置
  2. Android摇一摇功能实现(摇一摇监听)
  3. Android:view常用属性和操作方法
  4. Android图形绘制
  5. usb连接的PTP模式,同时显示内置、外置SD卡
  6. Android初级教程理论知识(第八章网络编程
  7. Android Studio 学习笔记(1)
  8. Android Paint的使用详解
  9. android学习记录(四)管理里中基本组键
  10. Android--MapView.第一个简单的MapView