第1章:学习正点原子开发板-stm32mp157-tf-a移植
1. tf-a移植需要
我们先来讲一下什么叫移植?移植就是把某个系统(或程序)放到一个平台上面运行,系统不会出现bug,也就是不会出现不兼容的现象。对此我们就大概明白移植的意思了。
我们在移植之前我们需要知道tf-a移植的大致步骤,首先,我们需要去半导体厂商官网下载相关支持包,因为半导体厂商已有一些移植好的设备树驱动,我们只需要修改少部分就行,而且半导体厂商会开发出一些示例板,我们可以按照官方的板子画pcb,尽量减少开发人员的开发难度。所以我们在移植过程中就是参照官方的ev板,主要正点原子就是参照此板子设计的开发板。
2. 开发步骤
第一步,给ST官方原厂的资源打补丁,我们打了补丁之后才能正常使用,半导体厂商也是根据arm官方来修改的资源包。
cd tf-a-stm32mp-2.2.r1
for p inls -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。将对应生成的文件拷贝出来烧录到板子中即可。
以上内容为个人学习了正点原子相关资源写的回忆和记录,所以有不妥的地方请联系删除。