• MP157-2-TF-A移植:



    正点原子第九章内容:
    自己记的笔记,详细内容请参考正点原子教程STM32MP1 嵌入式 Linux 驱动开发指南2.0。

    1. TF-A移植:

    1.1 新建开发板的设备树

    VSCODE 打开 tf-a-stm32mp-2.2.r1\fdts 目录并且打开终端在这里插入图片描述
    复制这两个文件stm32mp157d-ed1.dts,stm32mp15xx-edx.dtsi 为atk,我测试了qcy不能用。。。

    cp stm32mp157d-ed1.dts stm32mp157d-atk.dts
    cp stm32mp15xx-edx.dtsi stm32mp157d-atk.dtsi
    
    • 1
    • 2

    在这里插入图片描述
    头文件名称也要修改
    在这里插入图片描述

    1.2 修改设备树电源管理

    打开 stm32mp157d-atk.dtsi 文件,第 54~281 行的内容全部删除掉,pmic节点信息内容全部删除。
    在这里插入图片描述
    在这里插入图片描述
    将上面vin 节点内容全部删除掉,也就是将 17~23 行代码删除掉,替换为下面的
    代码:

    在这里插入图片描述

    vddcore: regulator-vddcore {
            compatible = "regulator-fixed";
            regulator-name = "vddcore";
            regulator-min-microvolt = <1200000>;
            regulator-max-microvolt = <1350000>;
            regulator-off-in-suspend;
            regulator-always-on;
        };
    
        v3v3: regulator-3p3v {
            compatible = "regulator-fixed";
            regulator-name = "v3v3";
            regulator-min-microvolt = <3300000>;
            regulator-max-microvolt = <3300000>;
            regulator-off-in-suspend;
            regulator-always-on;
        };	
    
        vdd: regulator-vdd {
            compatible = "regulator-fixed";
            regulator-name = "vdd";
            regulator-min-microvolt = <3300000>;
            regulator-max-microvolt = <3300000>;
            regulator-off-in-suspend;
            regulator-always-on;
        };
    
        vdd_usb: regulator-vdd-usb {
            compatible = "regulator-fixed";
            regulator-name = "vdd_usb";
            regulator-min-microvolt = <3300000>;
            regulator-max-microvolt = <3300000>;
            regulator-off-in-suspend;
            regulator-always-on;
        };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    1.3修改TF卡和EMMC设备树

    继续操作 stm32mp157d-atk.dtsi 这个文件,找到“sdmmc1”和“sdmmc2”这 2 个节点。

    在这里插入图片描述
    将 sdmmc1 和 sdmmc2 节点改为如下所示内容:
    在这里插入图片描述

    &sdmmc1 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_dir_pins_a>;
    	st,neg-edge;
        broken-cd;
    	bus-width = <4>;
    	vmmc-supply = <&v3v3>;
    	status = "okay";
    };
    
    &sdmmc2 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_a>;
    	non-removable;
    	st,neg-edge;
    	bus-width = <8>;
    	vmmc-supply = <&v3v3>;
        vqmmc-supply = <&v3v3>;
    	status = "okay";
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    1.4 修改USBOTG设备树

    继续操作 stm32mp157d-atk.dtsi,找到
    “usbotg_hs”这个节点。
    在这里插入图片描述
    将 usbotg_hs 节点改为如下所示内容:
    并文件里面添加了一个名为“usbphyc”的节点。
    在这里插入图片描述

    &usbotg_hs {
    	phys = <&usbphyc_port1 0>;
    	phy-names = "usb2-phy";
    	usb-role-switch;
    	status = "okay";
    };
    
    &usbphyc {
    	status = "okay";
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2 编译测试

    2.1 Makefile.sdk 修改内容:

    #remove default variable
    LDFLAGS=
    CFLAGS=
    CPPFLAGS=
    CC=
    CPP=
    AS=
    AR=
    LD=
    NM=
    
    LOCAL_PATH=$(PWD)
    
    EXTRA_OEMAKE=CROSS_COMPILE=arm-none-linux-gnueabihf- DEBUG=1 LOG_LEVEL=40 PLAT=stm32mp1 ARCH=aarch32 ARM_ARCH_MAJOR=7 STM32MP_SDMMC=1 STM32MP_EMMC=1 STM32MP_SPI_NOR=1 STM32MP_RAW_NAND=1 STM32MP_SPI_NAND=1
    #EXTRA_OEMAKE_SERIAL= STM32MP_UART_PROGRAMMER=1 STM32MP_USB_PROGRAMMER=1
    EXTRA_OEMAKE_SERIAL=$(filter-out STM32MP_SDMMC=1 STM32MP_EMMC=1 STM32MP_SPI_NOR=1 STM32MP_RAW_NAND=1 STM32MP_SPI_NAND=1,$(EXTRA_OEMAKE)) STM32MP_UART_PROGRAMMER=1 STM32MP_USB_PROGRAMMER=1
    
    # Set default config
    ELF_DEBUG_ENABLE ?= 1
    TF_A_CONFIG ?=  trusted  optee  serialboot
    
    # Set specific OEMAKE config
    TF_A_CONFIG_OEMAKE =  trusted,"AARCH32_SP=sp_min" optee,"AARCH32_SP=optee" serialboot,"AARCH32_SP=sp_min"
    # Set default TFA_DEVICETREE
    #TFA_DEVICETREE ?=   stm32mp157d-atk stm32mp157a-dk1 stm32mp157d-dk1 stm32mp157c-dk2 stm32mp157f-dk2   stm32mp157c-ed1 stm32mp157f-ed1   stm32mp157a-ev1 stm32mp157c-ev1 stm32mp157d-ev1 stm32mp157f-ev1 
    TFA_DEVICETREE ?= stm32mp157d-atk
    
    #Set default TF_A_ENABLE_DEBUG_WRAPPER
    TF_A_ENABLE_DEBUG_WRAPPER ?= 1
    
    help:
    	@echo
    	@echo "Available targets:"
    	@echo "  all   : build TF-A binaries for defined config(s)"
    	@echo "  clean : clean build directories from generated files"
    	@echo
    	@echo "TF-A configuration:"
    	@echo "  TF_A_CONFIG = $(TF_A_CONFIG)"
    	@echo "  TFA_DEVICETREE = $(TFA_DEVICETREE)"
    	@echo "  ELF_DEBUG_ENABLE = '$(ELF_DEBUG_ENABLE)' ('1' to export elf files)"
    	@echo "  TF_A_ENABLE_DEBUG_WRAPPER = '$(TF_A_ENABLE_DEBUG_WRAPPER)' ('1' to generate tf-a for debugging)"
    	@echo
    
    all: tf
    
    host_tools:
    	@$(MAKE) --no-print-directory -C $(LOCAL_PATH)/tools/stm32image
    
    tf: host_tools
    	for config in $(TF_A_CONFIG) ; do \
    		# Init any extraoemake \
    		add_extraoemake= ; \
    		for fullconfig in $(TF_A_CONFIG_OEMAKE) ; do \
    			extraconfig=$$(echo $$fullconfig | cut -d',' -f1) ; \
    			if [ "$$extraconfig" = "$$config" ]; then \
    				add_extraoemake=$$(echo $$fullconfig | cut -d',' -f2) ; \
    			fi ; \
    		done ; \
    		mkdir -p $(LOCAL_PATH)/../build/$$config ; \
    		if test -n "$(TFA_DEVICETREE)" ; then \
    			for dt in $(TFA_DEVICETREE) ; do \
    				if [ "$(TF_A_CONFIG)" != "serialboot" ]; then \
    					$(MAKE) $(EXTRA_OEMAKE) -C $(LOCAL_PATH) DTB_FILE_NAME=$$dt.dtb BUILD_PLAT=$(LOCAL_PATH)/../build/$$config $$add_extraoemake ; \
    				else \
    					$(MAKE) $(EXTRA_OEMAKE_SERIAL) -C $(LOCAL_PATH) DTB_FILE_NAME=$$dt.dtb BUILD_PLAT=$(LOCAL_PATH)/../build/$$config $$add_extraoemake ; \
    				fi \
    				# Copy binary file with explicit name \
    				cp -f $(LOCAL_PATH)/../build/$$config/tf-a-$$dt.stm32 $(LOCAL_PATH)/../build/$$config/tf-a-$$dt-$$config.stm32 ; \
    				if [ "$(TF_A_ENABLE_DEBUG_WRAPPER)" = "1" ]; then \
    					# Generate wrapper for debugging \
    					stm32wrapper4dbg -s $(LOCAL_PATH)/../build/$$config/tf-a-$$dt.stm32 -d $(LOCAL_PATH)/../build/$$config/debug-tf-a-$$dt-$$config.stm32 ; \
    				fi \
    			done ; \
    		else \
    			$(MAKE) $(EXTRA_OEMAKE) -C $(LOCAL_PATH) BUILD_PLAT=$(LOCAL_PATH)/../build/$$config $$add_extraoemake; \
    			tf_version=$$(find $(LOCAL_PATH)/../build/$$config -name tf-a*.stm32 -exec basename {} \; | sed "s/\.stm32//") ; \
    			# Copy binary file with explicit name \
    			cp -f $(LOCAL_PATH)/../build/$$config/$$tf_version.stm32 $(LOCAL_PATH)/../build/$$config/$$tf_version-$$config.stm32 ; \
    			if [ "$(TF_A_ENABLE_DEBUG_WRAPPER)" = "1" ]; then \
    				# Generate wrapper for debugging \
    				stm32wrapper4dbg -s $(LOCAL_PATH)/../build/$$config/$$tf_version.stm32 $(LOCAL_PATH)/../build/$$config/debug-$$tf_version-$$config.stm32 ; \
    			fi \
    		fi ; \
    		# Copy elf files with explicit name \
    		if [ "$(ELF_DEBUG_ENABLE)" = "1" ] ; then \
    			if [ -f $(LOCAL_PATH)/../build/$$config/bl2/bl2.elf ] ; then \
    				cp -f $(LOCAL_PATH)/../build/$$config/bl2/bl2.elf $(LOCAL_PATH)/../build/$$config/tf-a-bl2-$$config.elf ; \
    			fi ; \
    			if [ -f $(LOCAL_PATH)/../build/$$config/bl32/bl32.elf ] ; then \
    				cp -f $(LOCAL_PATH)/../build/$$config/bl32/bl32.elf $(LOCAL_PATH)/../build/$$config/tf-a-bl32-$$config.elf ; \
    			fi ; \
    		fi ; \
    	done
    
    clean:
    	@for config in $(TF_A_CONFIG) ; do \
    		rm -rf $(LOCAL_PATH)/../build/$$config ; \
    	done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98

    2.2 编译命令:

    make -f ../Makefile.sdk TFA_DEVICETREE=stm32mp157d-atk TF_A_CONFIG=serialboot ELF_DEBUG_ENABLE=`1` all
    
    • 1

    注意 ELF_DEBUG_ENABLE=,1 不是单引号,是tab键上面的一个键。
    在这里插入图片描述

  • 相关阅读:
    (附源码)计算机毕业设计SSM敬老院信息管理系统
    Linux MQTT智能家居项目(网络基础知识)
    二、基于PCL的RANSAC拟合点云中所有直线或平面——3D点云处理系列
    LightDB23.4 table函数支持column_value列
    Redis 持久化配置,RDB和AOF方式配置说明
    软件测试学习-黑马程序员,软件测试学习大纲
    incarnation flashback database 时可以 offline 不符合的 datafile
    Web开发-登录页面设计流程
    maven打包时和 deploy时候将不会 依赖包含在生成的项目 jar中方法
    华为智能高校出口安全解决方案(3)
  • 原文地址:https://blog.csdn.net/qq_50808730/article/details/128096487