米爾STM32MP25x開發(fā)板Bring Up培訓(xùn)課程(二)
1.概述
本文引用地址:http://m.butianyuan.cn/article/202502/467457.htm本文將以 MYIR 的 MYC-LD25X 核心模塊及MYD-LD25X開發(fā)平臺為例,講解如何使用 STM32CubeMX 來實現(xiàn)Developer package最小系統(tǒng)和外設(shè)資源的配置。
2.修改設(shè)備樹(接上一期)
查看生成的Bring up工程空文件的設(shè)備樹,CA35的設(shè)備樹文件夾,其他的是M33核的工程資料。
我們可以看到生成的設(shè)備樹文件如下
myir@myir-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
以上的設(shè)備樹已經(jīng)配置了大部分內(nèi)容的工程,但是工程是還無法全部啟動,我們需要先把設(shè)備樹同步到相應(yīng)的BSP代碼中。
stm32mp25x-BringUp-bsp.tar.gz已拷貝并解壓到虛擬機(jī):/home/myir。
注:windows和ubuntu之間目錄共享
myir@myir-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
在“虛擬機(jī)設(shè)置”選項中設(shè)置完成后, 啟動虛擬機(jī)執(zhí)行如下命令進(jìn)行掛載:
myir@myir-vm# sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
sudo 密碼為:123456
在虛擬機(jī)的/mnt/hgfs目錄下已經(jīng)成功掛載上共享的目錄,如未掛載上,可以重新啟動下虛擬機(jī)。
/home/myir/目錄為我這邊虛擬機(jī)的目錄,實際目錄以自己本機(jī)為準(zhǔn)。
tf-a設(shè)備樹軟鏈接:
myir@myir-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設(shè)備樹stm32mp257d-bringup-mx.dts和stm32mp257d-bringup-mx-rcc.dtsi軟鏈接:
myir@myir-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/
root@myir-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設(shè)備樹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設(shè)備樹軟鏈接:
myir@myir-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設(shè)備樹軟鏈接:
Note: STM32CubeMX 的規(guī)則是先生成 Kernel 的 dts, 然后將生成的 dts 文件拷貝到 u-boot 目錄下,也就是說 u-boot 的設(shè)備樹 stm32mp257d-bringup-mx.dts 是從 kernel 目錄拷貝過來的,所以在 U-Boot 階段修改設(shè)備樹,添加 User code 時,請同步修改 kernel 的設(shè)備樹或者將修改好的設(shè)備樹拷貝到 Kernel 目錄,防止下次使用 CubeMX 生成設(shè)備樹的時候,u-boot 部分的修改被 kernel 未修改的設(shè)備樹覆蓋。
2.1.配置和編譯TF-A
需要手動添加 TF-A 階段的串口配置的 user code. 使用文本編輯工具打開生成的 打開 TF-A 設(shè)備樹(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”節(jié)點:
/* 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: stpmic@33 {
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;
};
};
};
/* USER CODE END i2c7 */
};
&ddr{
status = "okay";
/* USER CODE BEGIN ddr */
vdd1-supply = <&vdd1_ddr>;
vdd2-supply = <&vdd2_ddr>;
vddq-supply = <&vdd2_ddr>;
/* USER CODE END ddr */
};
使用文本編輯工具打開生成的 打開 TF-A 設(shè)備樹(BringupCA35DeviceTreeBringuptf-astm32mp257d-bringup-mx-fw-config.dts)
本次配置不涉及防火墻內(nèi)容,因此屏蔽如下內(nèi)容:
/* st-mem-firewall {
bl31_context: bl31-context@81ff0000 {
reg = <0x0 0x81ff0000 0x0 0x10000>;
st,protreg = <RISAFPROT(RISAF_REG_ID(7), 0, 0, 0, RIF_NSEC, RIF_ENC_DIS, RIF_BREN_EN)>;
};
op_tee: op-tee@82000000 {
reg = <0x0 0x82000000 0x0 0x2000000>;
st,protreg = <RISAFPROT(RISAF_REG_ID(8), 0, 0, 0, RIF_NSEC, RIF_ENC_DIS, RIF_BREN_EN)>;
};
};
*/
新增如下內(nèi)容:
/* USER CODE BEGIN root */
dtb-registry {
soc_fw-config {
load-address = <0x0 0x81fc0000>;
max-size = <0x40000>;
};
tos_fw {
load-address = <0x0 0x82000000>;
max-size = <0x2000000>;
};
};
st-mem-firewall {
bl31_context: bl31-context@81fc0000 {
reg = <0x0 0x81fc0000 0x0 0x40000>;
st,protreg = <RISAFPROT(RISAF_REG_ID(7), RIF_CID0_BF|RIF_CID1_BF, RIF_CID0_BF|RIF_CID1_BF, 0, RIF_SEC, RIF_ENC_DIS, RIF_BREN_EN)>;
};
op_tee: op-tee@82000000 {
reg = <0x0 0x82000000 0x0 0x2000000>;
st,protreg = <RISAFPROT(RISAF_REG_ID(8), RIF_CID0_BF|RIF_CID1_BF, RIF_CID0_BF|RIF_CID1_BF, 0, RIF_SEC, RIF_ENC_DIS, RIF_BREN_EN)>;
};
};
/* USER CODE END root */
以上已完成配置,就可以進(jìn)行TF-A的單獨編譯。
myir@myir-vm: cd /home/myir/stm32mp25x-BringUp-bsp/myir-st-tfa/tf-a-myir
myir@myir-vm:~/stm32mp25x-BringUp-bsp/myir-st-tfa/tf-a-myir$ source /opt/st/myd-ld25x/4.2.4-snapshot/environment-setup-cortexa35-ostl-linux
myir@myir-vm:~/stm32mp25x-BringUp-bsp/myir-st-tfa/tf-a-myir$ export FIP_DEPLOYDIR_ROOT=../../FIP_artifacts
myir@myir-vm:~/stm32mp25x-BringUp-bsp/myir-st-tfa/tf-a-myir$ export FWDDR_DIR=../../stm32mp-ddr-phy-A2022.11-r0/stm32mp-ddr-phy-A2022.11
myir@myir-vm:~/stm32mp25x-BringUp-bsp/myir-st-tfa/tf-a-myir$ make -f $PWD/../Makefile.sdk DEPLOYDIR=$FIP_DEPLOYDIR_ROOT/arm-trusted-firmware TF_A_CONFIG="optee-emmc usb" TF_A_DEVICETREE=stm32mp257d-bringup-mx ELF_DEBUG_ENABLE='1' stm32 metadata
注:已將上述TF-A單獨編譯的命令存放在/home/myir/stm32mp25x-BringUp-bsp/myir-st-tfa/tf-a-myir/build.sh
編譯完成:
評論