发布时间:2025-05-28 03:59:03 来源:锐评时讯 作者:新闻
1.概述。
本文引证地址:
本文将以 MYIR 的 MYC-LD25X 中心模块及MYD-LD25X开发渠道为例,解说论争运用 STM32CubeMX 来完结Developer package最小体系和外设资源的装备。
2.修正设备树(接上一期)。
检查生成的Bring up工程空文件的设备树,CA35的设备树文件夹,其他的是M33核的工程材料。
咱们能够看到生成的设备树文件如下。
myirmyir-vm:/mnt/hgfs/ShareWorkspace/stm32mp25x-bringup/Bringup/CA35/DeviceTree/Bringup$ tree -l。
.。
├── kernel。
│ ├── stm32mp257d-bringup-mx.dts。
│ └── stm32mp257d-bringup-mx-resmem.dtsi。
├── optee-os。
│ ├── stm32mp257d-bringup-mx.dts。
│ ├── stm32mp257d-bringup-mx-rcc.dtsi。
│ ├── stm32mp257d-bringup-mx-resmem.dtsi。
│ └── stm32mp257d-bringup-mx-rif.dtsi。
├── tf-a。
│ ├── stm32mp257d-bringup-mx.dts。
│ ├── stm32mp257d-bringup-mx-fw-config.dts。
│ ├── stm32mp257d-bringup-mx-rcc.dtsi。
│ └── stm32mp25-mx.dtsi。
└── u-boot。
├── stm32mp257d-bringup-mx.dts。
├── stm32mp257d-bringup-mx-resmem.dtsi。
└── stm32mp257d-bringup-mx-u-boot.dtsi。
4 directories, 13 files。
以上的设备树现已装备了大部分内容的工程,可是工程是还无法悉数发动,咱们需求先把设备树同步到相应的BSP代码中。
stm32mp25x-BringUp-bsp.tar.gz已复制并解压到虚拟机:/home/myir。
注:windows和ubuntu之间目录同享。
myirmyir-vm:~/stm32mp25x-BringUp-bsp$ tree -L 2。
.。
├── Bringup。
│ ├── Bringup.ioc。
│ ├── CA35。
│ ├── CM33。
│ ├── Common。
│ └── Drivers。
├── build。
├── FIP_artifacts。
│ ├── arm-trusted-firmware。
│ ├── fip。
│ ├── flash-all.sh。
│ ├── FlashLayout_emmc_stm32mp25x-bringup-mx.tsv。
│ ├── flash.sh。
│ ├── optee。
│ └── u-boot。
├── myir-st-optee。
│ ├── fiptool-stm32mp。
│ ├── Makefile.sdk。
│ ├── myir-st-external-dt。
│ ├── myir-st-optee。
│ └── README。
├── myir-st-tfa。
│ ├── fiptool-stm32mp。
│ ├── Makefile.sdk。
│ └── tf-a-myir。
├── myir-st-uboot。
│ ├── fiptool-stm32mp。
│ ├── Makefile.sdk。
│ └── u-boot-myir。
└── stm32mp-ddr-phy-A2022.11-r0。
├── README.HOW_TO.txt。
└── stm32mp-ddr-phy-A2022.11。
19 directories, 13 files。
在“虚拟机设置”选项中设置完结后, 发动虚拟机履行如下指令进行挂载:
myirmyir-vm# sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other。
sudo 暗码为:123456 。
在虚拟机的/mnt/hgfs目录下现已成功挂载上同享的目录,如未挂载上,能够重新发动下虚拟机。
/home/myir/目录为我这边虚拟机的目录,实践目录以自己本机为准。
tf-a设备树软链接:
myirmyir-vm:/mnt/hgfs/ShareWorkspace# ln -s /mnt/hgfs/ShareWorkspace/Bringup/CA35/DeviceTree/bringup/tf-a/* /home/myir/stm32mp25x-BringUp-bsp/myir-st-tfa/tf-a-myir/fdts/。
Optee-os设备树stm32mp257d-bringup-mx.dts和stm32mp257d-bringup-mx-rcc.dtsi软链接:
myirmyir-vm:/mnt/hgfs/ShareWorkspace# ln -s /mnt/hgfs/ShareWorkspace/Bringup/CA35/DeviceTree/bringup/optee-os/stm32mp257d-bringup-mx.dts /home/myir/stm32mp25x-BringUp-bsp/myir-st-optee/myir-st-optee/core/arch/arm/dts/。
rootmyir-vm:/mnt/hgfs/ShareWorkspace# ln -s /mnt/hgfs/ShareWorkspace/Bringup/CA35/DeviceTree/bringup/optee-os/stm32mp257d-bringup-mx-rcc.dtsi /home/myir/stm32mp25x-BringUp-bsp/myir-st-optee/myir-st-optee/core/arch/arm/dts/。
Optee-os设备树stm32mp257d-bringup-mx-resmem.dtsi和stm32mp257d-bringup-mx-rif.dtsi直接运用SourceCode压缩包Optee-os目录中的文件,可通过软链接或许复制的方法放到stm32mp25x-BringUp-bsp/myir-st-optee/myir-st-optee/core/arch/arm/dts/目录下。
Uboot设备树软链接:
myirmyir-vm:/mnt/hgfs/ShareWorkspace# ln -s /mnt/hgfs/ShareWorkspace/Bringup/CA35/DeviceTree/bringup/u-boot/* /home/myir/stm32mp25x-BringUp-bsp/myir-st-uboot/u-boot-myir/arch/arm/dts/。
Kernel设备树软链接:
Note: STM32CubeMX 的规则是先生成 Kernel 的 dts, 然后将生成的 dts 文件复制到 u-boot 目录下,也就是说 u-boot 的设备树 stm32mp257d-bringup-mx.dts 是从 kernel 目录复制过来的,所以在 U-Boot 阶段修正设备树,添加 User code 时,请同步修正 kernel 的设备树或许将修正好的设备树复制到 Kernel 目录,避免下次运用 CubeMX 生成设备树的时分,u-boot 部分的修正被 kernel 未修正的设备树掩盖。
2.1.装备和编译TF-A。
需求手动添加 TF-A 阶段的串口装备的 user code. 运用文本编辑东西翻开生成的 翻开 TF-A 设备树(BringupCA35DeviceTreeBringuptf-astm32mp257d-bringup-mx.dts)。
添加头文件。
/* USER CODE BEGIN includes */。
#include "stm32mp25xf.dtsi"
#include "stm32mp25-pinctrl.dtsi"
/* USER CODE END includes */。
在”USER CODE BEGIN root”方位添加”chosen”和”aliases”节点:
/* USER CODE BEGIN root */。
aliases {。
serial0 = &usart2;
};
chosen {。
stdout-path = "serial0:115200n8";
};
/* USER CODE END root */。
添加PMIC装备。
&i2c7{。
pinctrl-names = "default";
pinctrl-0 = <&i2c7_pins_mx>;
status = "okay";
/* USER CODE BEGIN i2c7 */。
pmic2: stpmic33 {。
compatible = "st,stpmic2";
reg = <0x33>;
status = "okay";
regulators {。
compatible = "st,stpmic2-regulators";
vddcpu: buck1 {。
regulator-name = "vddcpu";
regulator-min-microvolt = <800000>;
regulator-max-microvolt = <910000>;
regulator-always-on;
};
vddcore: buck2 {。
regulator-name = "vddcore";
regulator-min-microvolt = <820000>;
regulator-max-microvolt = <820000>;
regulator-always-on;
};
vddgpu: buck3 {。
regulator-name = "vddgpu";
regulator-min-microvolt = <800000>;
regulator-max-microvolt = <900000>;
regulator-always-on;
};
vddio_pmic: buck4 {。
regulator-name = "vddio_pmic";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
v1v8: buck5 {。
regulator-name = "v1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
vdd2_ddr: buck6 {。
regulator-name = "vdd2_ddr";
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>;
};
v3v3: buck7 {。
regulator-name = "v3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
vdda1v8_aon: ldo1 {。
regulator-name = "vdda1v8_aon";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
vdd_emmc: ldo2 {。
regulator-name = "vdd_emmc";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
vdd1_ddr: ldo3 {。
regulator-name = "vdd1_ddr";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-enable-ramp-delay = <1000>;
};
vdd3v3_usb: ldo4 {。
regulator-name = "vdd3v3_usb";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
v5v_hdmi: ldo5 {。
regulator-name = "v5v_hdmi";
regulator-min-microvolt = <2000000>;
regulator-max-microvolt = <2000000>;
};
vdd_sdcard: ldo7 {。
regulator-name = "vdd_sdcard";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
vddio_sdcard: ldo8 {。
regulator-name = "vddio_sdcard";
st,regulator-bypass-microvolt = <3300000>;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
。