ST账号:tianli0929@126.com 密码:
1、系统源码获取并进行解压
STM32MP1Dev - STM32MP1 OpenSTLinux Developer Package - STMicroelectronics
在Linux创建 st-sources 把源文件复制到此文件夹中
sudo mkdir st-sources
解压
sudo tar -xvf en.SOURCES-stm32mp1-openstlinux-5-4-dunfell-mp1-20-06-24.tar.xz
2、TF-A 源码打补丁
进入文件
2、解压
sudo tar -xvf tf-a-stm32mp-2.2.r1-r0.tar.gz
进入文件夹 cd tf-a-stm32mp-2.2.r1
sudo for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
问题 :-bash: syntax error near unexpected token `do'
临时解决 把命令保存为文件 .sh 然后执行 . /*.sh 命令
切换为root 用户执行
首先设置root 密码
sudo passwd root 密码设置为0
然后切换 su root 用户
复制文件到
sudo cp * /home/tcl/linux/tf-a/ -rf
二、编译和烧录 TF-A
1、安装 stm32wrapper4dbg 这个工具
下载地址 https://github.com/STMicroelectronics/stm32wrapper4dbg
2、解压
unzip stm32wrapper4dbg-master.zip
3、编译
cd stm32wrapper4dbg-master //进入到此文件夹
make //编译
4、拷贝到 Ubuntu 的/usr/bin 目录下
sudo cp stm32wrapper4dbg /usr/bin
命令查看
stm32wrapper4dbg -s
三、编译移植官方 tf-a
1、首先安装设备树编译相关命令,输入如下命令:
sudo apt-get install device-tree-compiler
2、 修改 Makefile.sdk
VIM 编辑器打开 Makefile.sdk, 找到“CROSS_COMPILE”,将其改为“arm-none-linux-gnueabihf-”,
3、编译
保存退出 进入到图 tf-a-stm32mp-2.2.r1 目录下
cd tf-a-stm32mp-2.2.r1/ //进入到 tf-a 源码目录下
make -f ../Makefile.sdk all //编译
../Makefile.sdk:45: recipe for target 'host_tools' failed 切换为root 用户执行命令
/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin
sudo adduser tcl sudo 把TCL用户权限改为管理员权限
以上是没有移植先进行编译i测试
一下开始移植
1、创建板子对应的设备树(设备树文件文件后缀为.dts 头文件后缀为.dtsi)
打开 tf-a-stm32mp-2.2.r1\fdts 目录, fdts 目录下保存的就是所有开发板的设备树文件
cd fdts
cp stm32mp157d-ed1.dts stm32mp157d-tcl.dts //复制
cp stm32mp15xx-edx.dtsi stm32mp157d-tcl.dtsi
2、修改 stm32mp157d-atk.dts
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
*/
/dts-v1/;
#include "stm32mp157.dtsi"
#include "stm32mp15xd.dtsi"
#include "stm32mp15-pinctrl.dtsi"
#include "stm32mp15xxaa-pinctrl.dtsi"
#include "stm32mp157d-atk.dtsi"
#include <dt-bindings/soc/st,stm32-etzpc.h>
/ {
model = "STMicroelectronics STM32MP157D eval daughter";
compatible = "st,stm32mp157d-ed1", "st,stm32mp157";
chosen {
stdout-path = "serial0:115200n8";
};
aliases {
serial0 = &uart4;
};
};
&cpu1 {
cpu-supply = <&vddcore>;
};
重点是修改后的第 12 行 修改头文件 #include "stm32mp157d-tcl.dtsi"
2、 修改 Makefile.sdk
第24行 添加 stm32mp157d-tcl
3、修改设备树电源管理
打开 stm32mp157d-atk.dtsi 文件
将 代码 中第 54~281 行的内容全部删除掉
删除后为
删除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;
};
修改后为
修改 TF 卡和 EMMC 设备树
修改为
&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";
};
修改USB OTG
修改为:
&usbotg_hs {
phys = <&usbphyc_port1 0>;
phy-names = "usb2-phy";
usb-role-switch;
status = "okay";
};
添加 “usbphyc”节点里面的“status”属性值
&usbphyc {
status = "okay";
};
编译 生成了 tf-a-stm32mp157d-tcl.stm32 镜像文件