Linux第34步_TF-A移植的第2步_修改设备树和tf-a.tsv

2024-01-22 10:04
文章标签 linux 移植 修改 tf 34 设备 tsv

本文主要是介绍Linux第34步_TF-A移植的第2步_修改设备树和tf-a.tsv,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在虚拟机中,使用VSCode打开linux /atk-mp1/atk-mp1/my-tfa/目录下tf-a.code-workspace”;

找到“tf-a-stm32mp-2.2.r1/fdts”目录,就是设备树文件所在的目录。

见下图:

一、修改“stm32mp157d-atk.dts”

修改后,见下图:

二、修改设备树中的电源管理

由于正点原子STM32MP157开发板没有使用“STPMIC1A”这个电源管理芯片,所以,要修改电源管理。ST公司的STM32MP157 EVK开发板将STPMIC1A芯片挂到了I2C4下,在设备树头文件中,我们要修改节点“i2c4”。

1、打开设备树头文件“stm32mp157d-atk.dtsi”,将“54~281行之间的代码”全部删除掉,就相当于删除掉“STPMIC1A”这个芯片的相关描述了

见下图:

2、在“stm32mp157d-atk.dtsi”文件里,面找到“vin节点”,见下图:

3、删除掉“vin节点”的内容,替换为下面的代码:

//描述VDDCORE电源,也就是STM32MP157的内核电源,最小为为1.2V,最大为1.35V

   vddcore: regulator-vddcore {

        compatible = "regulator-fixed";

        regulator-name = "vddcore";

        regulator-min-microvolt = <1200000>;

        regulator-max-microvolt = <1350000>;

        regulator-off-in-suspend;

        regulator-always-on;

    };

//描述3.3V电源,最小和大都是3.3V

    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电源,最小和大都是3.3V

    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电源,最小和大都是3.3V

    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设备树

1、打开设备树头文件“stm32mp157d-atk.dtsi”,找到“sdmmc1”节点和“sdmmc2”节点。

见下图:

2、修改“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";

};

修改“TF卡和EMMC设备树”后结果,见下图:

四、修改USB OTG设备树

1、打开设备树头文件“stm32mp157d-atk.dtsi”,找到“usbotg_hs”节点。

见下图:

 2、修改“usbotg_hs”节点的内容如下:

&usbotg_hs {

phys = <&usbphyc_port1 0>;

phy-names = "usb2-phy";

usb-role-switch;

status = "okay";

};

见下图:

 4、添加usbphyc节点,其内容如下:

&usbphyc {

status = "okay";

};

见下图:

 五、修改“linux /atk-mp1/atk-mp1/my-tfa/Makefile.sdk”

1、打开终端

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd linux回车”,切换“linux”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd atk-mp1/回车”,切换“atk-mp1”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd my-tfa回车”,切换“my-tfa”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

见下图:

2、输入“vim Makefile.sdk回车”,使用vim命令打开已有的“Makefile.sdk”文件

 3、将“TFA_DEVICETREE ?=   stm32mp157a-dk1 stm32mp157d-dk1 stm32mp157c-dk2 stm32mp157f-dk2   stm32mp157c-ed1 stm32mp157f-ed1   stm32mp157a-ev1 stm32mp157c-ev1 stm32mp157d-ev1 stm32mp157f-ev1  stm32mp157d-atk”注释掉,只用“TFA_DEVICETREE ?= stm32mp157d-atk”,目的是:关闭多个STM32MP1开发板的TF-A镜像,只保留正点原子的开发板的TF-A镜像

见下图:

 4、按下ESC”键,输入“:wq,保存退出。

六、编译TF-A

1、输入“cd tf-a-stm32mp-2.2.r1/回车”,进入到“tf-a-stm32mp-2.2.r1”目录下;

输入“ls回车”,列出“tf-a-stm32mp-2.2.r1”目录下所有的文件和文件夹;

输入“make -f ../Makefile.sdk all回车”, 执行编译, '-f'的意思是重新指定Makefile。

如果需要加快编译速度,可是使用多线程编译,线程数量最好和自己给虚拟机分配的物理核心保持一致,使用-j来指定线程数,命令如下:

make -f ../Makefile.sdk -j8 all //使用8线程编译

见下图:

2、输入“cd ..回车”,返回上层目录“my-tfa”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd build/回车”,切换“build”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd trusted/回车”,切换“trusted”目录下

输入“ls -l回车”,列出当前目录下所有的文件和文件夹

见下图:

可见,还可以看到多个STM32MP1开发板的TF-A镜像,所以要删除“build”目录和“build目录下所有文件”。

3、输入“cd ..回车”,返回上层目录“build”目录下

输入“cd ..回车”,返回上层目录“my-tfa”目录下

输入“rm build -rf回车”,删除“build”目录和“build目录下所有文件

注意:通常用输入“make -f ../Makefile.sdk clean”,清除以前的编译

输入“cd tf-a-stm32mp-2.2.r1/回车”,进入到“tf-a-stm32mp-2.2.r1”目录下;

输入“ls回车”,列出“tf-a-stm32mp-2.2.r1”目录下所有的文件和文件夹;

输入“make -f ../Makefile.sdk all回车”, 执行编译, '-f'的意思是重新指定Makefile。

如果需要加快编译速度,可是使用多线程编译,线程数量最好和自己给虚拟机分配的物理核心保持一致,使用-j来指定线程数,命令如下:

make -f ../Makefile.sdk -j8 all //使用8线程编译

见下图:

 4、输入“cd ..回车”,返回上层目录“my-tfa”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd build/回车”,切换“build”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd trusted/回车”,切换“trusted”目录下

输入“ls -l回车”,列出当前目录下所有的文件和文件夹

见下图:

至此,生成了“tf-a-stm32mp157d-atk-trusted.stm32镜像文件”。

七、再次修改“linux /atk-mp1/atk-mp1/my-tfa/Makefile.sdk”

1、打开终端

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd linux回车”,切换“linux”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd atk-mp1/回车”,切换“atk-mp1”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd my-tfa回车”,切换“my-tfa”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

见下图:

 2、输入“vim Makefile.sdk回车”,使用vim命令打开已有的“Makefile.sdk”文件

将“EXTRA_OEMAKE_SERIAL= STM32MP_UART_PROGRAMMER=1 STM32MP_USB_PROGRAMMER=1”注释掉

换成下面的语句:

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

见下图:

按下ESC”键,输入“:wq,保存退出。

八、再次编译TF-A

1、输入“cd tf-a-stm32mp-2.2.r1/回车”,进入到“tf-a-stm32mp-2.2.r1”目录下;

输入“ls回车”,列出“tf-a-stm32mp-2.2.r1”目录下所有的文件和文件夹;

输入“make -f ../Makefile.sdk clean”,清除以前的编译;

输入“make -f ../Makefile.sdk all回车”, 执行编译, '-f'的意思是重新指定Makefile。

如果需要加快编译速度,可是使用多线程编译,线程数量最好和自己给虚拟机分配的物理核心保持一致,使用-j来指定线程数,命令如下:

make -f ../Makefile.sdk -j8 all //使用8线程编译

见下图:

 2、输入“cd ..回车”,返回上层目录“my-tfa”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd build/回车”,切换“build”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd serialboot/回车”,切换“serialboot”目录下

输入“ls -l回车”,列出当前目录下所有的文件和文件夹

至此,生成了“tf-a-stm32mp157d-atk-serialboot.stm32”。

九、创建新的“tf-a.tsv”文件

1、从以前的拷贝一份“tf-a.tsv”文件,修改为新的“tf-a.tsv”文件。

路径:C:\Program Files\STMicroelectronics\images

见下图:

 2、使用“Notepad++”打开“tf-a.tsv”文件

见下图:

3、修改后,见下图:

“PE”:不用更新程序,即“指定的分区”或“指定的设备”不需要烧写固件

十、烧录

打开虚拟机,使用“FileZilla Client”,将tf-a-stm32mp157d-atk-trusted.stm32tf-a-stm32mp157d-atk-serialboot.stm32传到“C:\Program Files\STMicroelectronics\images”目录下;

1、关闭虚拟机,防止开发板连接到虚拟机

2、将开发板上拨码开关拨到“000”位置

3、将USB导线连接电脑的USB3.0接口,另外一端连接开发板的USB OTG接口;

4、将USB导线连接电脑的USB3.0接口,另外一端连接到开发板的USB TTL接口;

5、双击“STM32CubeProgrammer”图标

6、选择图中的USB,然后点击“Connect”

7、点击“刷新”,直到出现USB1,表示连接成功。

8、点击“Open file”,找到“C:\Program Files\STMicroelectronics\images”目录下“tf-a.tsv”打开。

9、点击“Browse”,打开“C:\Program Files\STMicroelectronics\images”目录。

10、点击“选择文件夹”

11、点击“Download”

12、点击“确定”

 

13、将拨码开关设置为“010”

14、按下开发板的“复位按钮”,重新启动开发板。

TF-A运行信息,见下图:

uboot运行信息,见下图:

 至此,TF-A全部移植完成。

这篇关于Linux第34步_TF-A移植的第2步_修改设备树和tf-a.tsv的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/632640

相关文章

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将