第1章:学习正点原子开发板-stm32mp157-tf-a移植

第1章:学习正点原子开发板-stm32mp157-tf-a移植

1. tf-a移植需要

我们先来讲一下什么叫移植?移植就是把某个系统(或程序)放到一个平台上面运行,系统不会出现bug,也就是不会出现不兼容的现象。对此我们就大概明白移植的意思了。

我们在移植之前我们需要知道tf-a移植的大致步骤,首先,我们需要去半导体厂商官网下载相关支持包,因为半导体厂商已有一些移植好的设备树驱动,我们只需要修改少部分就行,而且半导体厂商会开发出一些示例板,我们可以按照官方的板子画pcb,尽量减少开发人员的开发难度。所以我们在移植过程中就是参照官方的ev板,主要正点原子就是参照此板子设计的开发板。

2. 开发步骤

第一步,给ST官方原厂的资源打补丁,我们打了补丁之后才能正常使用,半导体厂商也是根据arm官方来修改的资源包。

cd tf-a-stm32mp-2.2.r1
for p in ls -1 ../*.patch; do patch -p1 < $p; done //打补丁

然后进入到tf-a-stm32mp-2.2.r1\fdts 目录,因为我们开发的设备树文件都在此文件中。

cd tf-a-stm32mp-2.2.r1\fdts
cp stm32mp157d-ed1.dts stm32mp157d-atk.dts //复制
cp stm32mp157d-ed1.dtsi stm32mp157d-atk.dtsi //复制

我们本来是参照 stm32mp157d-ev1.dts文件的,但是其中的内容比较少,他调用的stm32mp157d-ed1.dts 反而需要修改的内容却很多。所以我们就直接复制stm32mp157d-ed1.dts 和stm32mp157d-ed1.dtsi生成自己需要的atk文件。

vi stm32mp157d-atk.dts
修改12行的内容为#include “stm32mp157d-atk.dtsi”
vi stm32mp157d-atk.dtsi
去掉pmic节点,第54~281行 。
去掉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;
};

修改TF卡和EMMC设备树,继续操作 stm32mp157d-atk.dtsi 这个文件,找到“sdmmc1”和“sdmmc2”这 2 个节点
在这里插入图片描述
修改为一下代码

&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 设备树,将以下节点进行修改
在这里插入图片描述
修改为以下内容,并且添加usbphyc节点:

&usbotg_hs {
phys = <&usbphyc_port1 0>;
phy-names = "usb2-phy";
usb-role-switch;
status = "okay";
};

&usbphyc {
status = "okay";
 };

最后就可以编译了,若不想编译其他的设备树,则在Makefile.sdk中只需把以下信息修改即可
在这里插入图片描述
最后把文件
build/trusted/tf-a-stm32mp157d-atk-trusted.stm32拷贝出来使用STM32CubeProgrammer烧录到开发板测试就行。
**注意:**在烧录时要添加SSBL的分区。PE 0x06 ssbl Binary mmc1 0x00080000注意是TAB键。

3. 编译xxx-serialboot.stm32文件

打开Makefile.sdk文件,找到EXTRA_OEMAKE_SERIAL变量

vi Makefile.sdk
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

编译输入以下指令即可,你也可以创建一个文件xx.sh将以下内容拷贝进去即可。

cd tf-a-stm32mp-2.2.r1/ //进入到 tf-a 源码目录下
make -f …/Makefile.sdk clean //清除以前的编译
make -f …/Makefile.sdk TFA_DEVICETREE=stm32mp157d-atk TF_A_CONFIG=serialboot
ELF_DEBUG_ENABLE=‘1’ all //编译

这样就生成了对应的serial文件,但注意,因为在编译时修改了TF_A_CONFIG变量,则生成的文件中只有serial,没有trust和optee。将对应生成的文件拷贝出来烧录到板子中即可。

以上内容为个人学习了正点原子相关资源写的回忆和记录,所以有不妥的地方请联系删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值