正点原子STM32MP135移植遇到的问题
环境
Ubuntu24.04(6.8.0-36-generic)
MP1-DEV-SRC 5.1.0(en.SOURCES-stm32mp1-openstlinux-6.1-yocto-mickledore-mpu-v24.06.26.tar.gz)
MP1-DEV-x86 5.1.0(en.SDK-x86_64-stm32mp1-openstlinux-6.1-yocto-mickledore-mpu-v24.06.26.tar.gz)
目录
一、准备
1.SDK下载
2.环境搭建
2.1安装
2.2使用
二、TF-A移植
1.make: ../Makefile.sdk: 没有那个文件或目录make: *** 没有规则可制作目标“../Makefile.sdk”。 停止。
2.[ERROR][PARAMETER] You MUST specify a valid directory which contains the binaries for FIP generation
3.更改电源描述数量
4.[ERROR] some files are not present, please provide it or change the paremeters
三、optee移植
1.core/arch/arm/dts/stm32mp131.dtsi:590.24-632.6: ERROR (phandle_references): /soc/etzpc@5c007000/adc@48004000: Reference to non-existent node or label "vdd_adc"
1.1第一个方案将vdd_adc修改为vdd
1.2另一个方案,在根节点下加上vdd_adv的描述
2.cp: 对 '/home/herrian/linux/stm32mp1-openstlinux-6.1-yocto-mickledore-mpu-v24.06.26/sources/arm-ostl-linux-gnueabi/optee-os-stm32mp-3.19.0-stm32mp-r2-r0/optee-os-stm32mp-3.19.0-stm32mp-r2/../build/sstm32mp135-atk/core/tee-header_v2.bin' 调用 stat 失败: 没有那个文件或目录
四、u-boot移植
1.修改Makefile.sdk
2.FIP_artifacts/u-boot文件夹下没有生成stm32mp135-atk相关文件
1.1 修改Makefile.sdk
1.2修改stm32mp13_defconfig
3.报错
4.FIP_artifacts/fip文件夹下没有生成stm32mp135-atk相关文件
五、烧录
1.STM32CubeProgrammer USB显示No DFU detected
1.1检查STM32CubeProgrammer是否正确安装
1.2安装usb驱动
1.3允许通过基本命令连接到usb端口
2.烧录脚本
3.mmc device 1 not found
4.stm32-usbphyc usbphyc@5a006000: Can't get phy-supply regulator
六、内核移植
一、准备
(一)正点原子STM32MP135移植——准备1
1.SDK下载
输入命令:lscpu
即可看见架构:x86_64
根据架构选择合适的SDK
ARMv7 = armv7l = ARM
x86_64 = x64 = amd64
2.环境搭建
2.1安装
SDK压缩包解压后文件夹下有个.sh文件,安装它,询问事项可以都按回车默认
./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-4.2.4-openstlinux-6.1-yocto-mickledore-mpu-v24.06.26.sh
安装好后有一个路径,就是环境变量所在的路径
2.2使用
在使用交叉编译器前一定要使能环境变量
source /opt/st/stm32mp1/4.2.4-openstlinux-6.1-yocto-mickledore-mpu-v24.06.26/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
查看gcc版本
arm-ostl-linux-gnueabi-gcc –version
二、TF-A移植
(二)正点原子STM32MP135移植——TF-A移植
1.make: ../Makefile.sdk: 没有那个文件或目录
make: *** 没有规则可制作目标“../Makefile.sdk”。 停止。
查看终端打开的位置
使用的命令
make -f ../Makefile.sdk all
即此目录下的上级目录没有Makefile.sdk,检查是否终端所在目录有误
2.[ERROR][PARAMETER] You MUST specify a valid directory which contains the binaries for FIP generation
export FIP_DEPLOYDIR_ROOT=$PWD/../../FIP_artifacts
检查使用此命令时终端所在目录的上两级目录里是否有FIP_artifacts文件夹
若没有则创建,或者输入正确的FIP_artifacts路径
3.更改电源描述数量
即根节点下的电源有几个+1
4.[ERROR] some files are not present, please provide it or change the paremeters
等optee和u-boot都编译好了就没有错误了
三、optee移植
(三)正点原子STM32MP135移植——optee移植
1.core/arch/arm/dts/stm32mp131.dtsi:590.24-632.6: ERROR (phandle_references): /soc/etzpc@5c007000/adc@48004000: Reference to non-existent node or label "vdd_adc"
打开stm32mp135-atk.dts文件
1.1第一个方案将vdd_adc修改为vdd
&adc_2 {
vdda-supply = <&vdd>;
vref-supply = <&vdd>;
status = "okay";
adc2: adc@0 {
status = "okay";
channel@15 {
reg = <15>;
label = "vbat";
};
};
};
1.2另一个方案,在根节点下加上vdd_adc的描述
vdd_adc: vdd_adc {
compatible = "regulator-fixed";
regulator-name = "vdd_adc";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-off-in-suspend;
regulator-always-on;
};
2.cp: 对 '/home/herrian/linux/stm32mp1-openstlinux-6.1-yocto-mickledore-mpu-v24.06.26/sources/arm-ostl-linux-gnueabi/optee-os-stm32mp-3.19.0-stm32mp-r2-r0/optee-os-stm32mp-3.19.0-stm32mp-r2/../build/sstm32mp135-atk/core/tee-header_v2.bin' 调用 stat 失败: 没有那个文件或目录
检查Makefile.sdk里的设备树是否写错
CFG_EMBED_DTB_SOURCE_FILE ?= stm32mp135-atk
四、u-boot移植
(四)正点原子STM32MP135移植——u-boot移植
1.修改Makefile.sdk
DEPLOYDIR ?= $(SRC_PATH)/../../FIP_artifacts/u-boot
//第11行,后续设备树修改也可以改这
UBOOT_DEVICETREE ?= stm32mp135f-dk
2.FIP_artifacts/u-boot文件夹下没有生成stm32mp135-atk相关文件
1.1 修改Makefile.sdk
UBOOT_DEVICETREE ?= stm32mp135-atk
UBOOT_DEVICETREE_stm32mp13_defconfig ?= stm32mp135-atk
1.2修改stm32mp13_defconfig
CONFIG_DEFAULT_DEVICE_TREE="stm32mp135-atk"
3.报错
方案一:打开stm32mp135-atk.dts,删除这些标签所在的节点
方案二:对照stm32mp135f-dk.dts和stm32mp13-pinctrl.dtsi修改stm32mp135-atk.dts和stm32mp13-pinctrl-atk.dtsi,添加上描述
4.FIP_artifacts/fip文件夹下没有生成stm32mp135-atk相关文件
我也不知道为什么fip文件只有在tf目录下才能生成
cd ../../tf-a-stm32mp-v2.8.15-stm32mp-r2-r0/tf-a-stm32mp-v2.8.15-stm32mp-r2/
make -f ../Makefile.sdk all
五、烧录
1.STM32CubeProgrammer USB显示No DFU detected
安装STM32CubeProgrammer
1.1检查STM32CubeProgrammer是否正确安装
将STM32CubeProgrammer安装目录下的bin文件添加到PATH环境变量
export PATH=$HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin:$PATH
STM32_Programmer_CLI –h
1.2安装usb驱动
sudo apt-get install libusb-1.0-0
1.3允许通过基本命令连接到usb端口
将安装目录下的Drivers/rules拷贝到/etc/udev/rules.d
cd $HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer/Drivers/rules/
sudo cp *.* /etc/udev/rules.d/
2.烧录脚本
脚本每行最后的文件要根据具体生成文件进行更改,建议在终端打开,才能保证使用TAB空开
#Opt Id Name Type IP Offset Binary
– 0x01 fsbl1-boot Binary none 0x0 arm-trusted-firmware/tf-a-stm32mp135-atk-usb.stm32
– 0x03 fip-boot FIP none 0x0 fip/fip-stm32mp135-atk-optee-emmc.bin
P 0x04 fsbl1 Binary mmc1 boot1 arm-trusted-firmware/tf-a-stm32mp135-atk-optee-emmc.stm32
P 0x05 fsbl2 Binary mmc1 boot2 arm-trusted-firmware/tf-a-stm32mp135-atk-optee-emmc.stm32
P 0x06 metadata1 Binary mmc1 0x00080000 arm-trusted-firmware/metadata.bin
P 0x07 metadata2 Binary mmc1 0x00100000 arm-trusted-firmware/metadata.bin
P 0x08 fip-a FIP mmc1 0x00180000 fip/fip-stm32mp135-atk-optee-emmc.bin
PED 0x09 fip-b FIP mmc1 0x00580000 none
PED 0x0A u-boot-env Binary mmc1 0x00980000 none
3.mmc device 1 not found
修改u-boot文件夹下的stm32mp135-atk-u-boot.dtsi
&sdmmc2 {
status = "okay";
};
4.stm32-usbphyc usbphyc@5a006000: Can't get phy-supply regulator
修改u-boot下的stm32mp135-atk.dts
vdd_usb: vdd_usb {
u-boot,dm-pre-reloc;
compatible = "regulator-fixed";
regulator-name = "vdd_usb";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-off-in-suspend;
regulator-always-on;
};
六、内核移植
(六)正点原子STM32MP135移植——内核移植
setenv ipaddr 192.168.1.3
setenv eth0addr 00:01:02:03:04:05
setenv netmask 255.255.255.0
setenv gateway 192.168.1.1
setenv serverip 192.168.1.134
saveenv
验证网络是否设置好,ping一下电脑
ping 192.168.1.134
用tftp和nfs启动内核
setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp135-atk.dtb;bootm c2000000 – c4000000'
setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.1.134:/home/herrian/linux/nfs/rootfs,proto=tcp,v4,rw rootwait ip=192.168.1.3:192.168.1.134:192.168.1.1:255.255.255.0::eth0:off'
saveenv
boot
作者:知识不耐受