12.12TF-A移植

一、TF-A移植

1.获取tf-a源码
2.分析tf-a源码
3.分析README文件
4.移植tf-a源码
5.测试tf-a源码
6.电源错误信息更改
6.添加FSMP1A设备树内容
7.编译tf-a源码测试

源码获取

ST开发社区获取
	https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32MP1_Developer_Package
ST官网
	https://www.st.com/en/embedded-software/stm32mp1dev.html

分析tf-a源码

1.进入到/home/linux/FSMP1A/tf-a-stm32mp-2.2.r2-r0
目录下
2.分析tf-a目录下内容
├── 0001-st-update-v2.2-r2.0.0.patch   ----->补丁文件
├── 0002-st-update-v2.2-r2.1.0.patch
├── Makefile.sdk ----->工程管理文件
├── README.HOW_TO.txt ----->分析文件
├── series ----->补丁文件列表
└── tf-a-stm32mp-2.2.r2-r0.tar.gz -----> tf-a源码压缩包

分析README文件

1.分析目录
        1>Pre-requisite
        2>Initialise cross-compilation via SDK
        3>Prepare tf-a source code
        4>Management of tf-a source code
        5>Compile tf-a source code
        6>Update software on board   
2.解压tf-a源码目录
       $> tar xfz tf-a-stm32mp-2.2.r2-r0.tar.gz
3.对tf-a源码打补丁
      $> for p in `ls -1 ../*.patch`; do patch -p1 < $p; done 
4.编译tf-a源码命令
       $> make -f $PWD/../Makefile.sdk all
     or for a specific config :
      $ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157c-ev1 TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all
5.tf-a源码生成镜像文件路径
    Files generated should be as follow:
    #> ../build/*/tf-a-*.stm32  

正式移植TF-A源码

1.进入tf-a源码目录下,进行打补丁----->打补丁打一次即可
	for p in `ls -1 ../*.patch`; do patch -p1 < $p; done 
2.打开Makefile.sdk文件,搜索:CROSS_COMPILE,更改交叉编译工具链前缀:arm-linux-gnueabihf-
3.由于FSMP1A开发板是参考DK1公板进行设计的,所以需要复制DK1公板设备树相关内容
	1)进入tf-a源码目录下fdts目录下,复制设备树相关内容
	2)进入tf-a源码目录下fdts目录下,更改复制完成后的FSMP1A相关设备树内容
4.进入tf-a源码顶层目录下,打开Makefile.sdk文件,搜索TFA_DEVICETREE 添加 stm32mp157a-fsmp1a
5.对tf-a源码进行编译,进入tf-a源码目录下	make -f $PWD/../Makefile.sdk all
	查看是否生成对应镜像文件 
	在tf-a-stm32mp-2.2.r2-r0/build/trusted/目录下查看是否有tf-a-stm32mp157a-fsmp1a-trusted.stm32
6.对tf-a源码进行编译,进入tf-a源码目录下
     make -f $PWD/../Makefile.sdk all
会出现如下现象信息解决方法:
错误信息:/bin/sh: 22: stm32wrapper4dbg: not found
	进入tf-a源码顶层目录下,打开Makefile.sdk,搜索:stm32wrapper4dbg查看到如下信息:
	67    if [ "$(TF_A_ENABLE_DEBUG_WRAPPER)" = "1" ]; then \
    68    # Generate wrapper for debugging \
    69    stm32wrapper4dbg -s $(LOCAL_PATH)/../build/$$
    搜索TF_A_ENABLE_DEBUG_WRAPPER是如何进行赋值的,通过搜索:TF_A_ENABLE_DEBUG_WRAPPER,打印如下信息
    将如下内容:
        27 TF_A_ENABLE_DEBUG_WRAPPER ?= 1
        更改为:
        27 TF_A_ENABLE_DEBUG_WRAPPER ?= 0

对tf-a源码进行测试

1.进入到/home/linux/FSMP1A/tf-a-stm32mp-2.2.r2-r0/build/trusted
2.将tf-a-stm32mp157a-fsmp1a-trusted.stm32拷贝到uboot源码目录下
   cp tf-a-stm32mp157a-fsmp1a-trusted.stm32 ~/FSMP1A/u-boot-stm32mp-v2020.10-stm32mp-r2-r0/u-boot-stm32mp-v2020.10-stm32mp-r2/
3.进入到uboot源码目录下
    cd ~/FSMP1A/u-boot-stm32mp-v2020.10-stm32mp-r2-r0/u-boot-stm32mp-v2020.10-stm32mp-r2/
4.将TF卡插入到读卡器中,并被ubuntu识别
5.在uboot源码顶层目录下,执行脚本文件,进行烧写镜像文件
     ./sdtools.sh /dev/sdb
6.将读卡器从ubuntu中退出
7.将TF卡插入到开发板中,并进行测试,观察现象
8.出现如下错误现象为正常现象:电源错误信息
Exception mode=0x00000016 at: 0x2ffdf799
    PANIC at PC : 0x2ffdf799

电源错误信息更改

1.通过对比电路图可知,FSMP1A采用的是电源分离的思想,而DK1公板采用的一个电源管理芯片对电源进行管理
2.解决方法:
    1)去掉DK1公板相关电源内容
    2)添加FSMP1A电源相关内容
3.进入tf-a-stm32mp-2.2.r2-r0/tf-a-stm32mp-2.2.r2/fdts目录下,打开stm32mp15xx-fsmp1x.dtsi 
        vi stm32mp15xx-fsmp1x.dtsi 
    1)删除i2c4节点(注释)
    2)删除cpu0和cpu1节点(注释)

添加FSMP1A开发板设备树内容

1.进入tf-a-stm32mp-2.2.r2-r0/tf-a-stm32mp-2.2.r2/fdts目录下,打开stm32mp15xx-fsmp1x.dtsi 
        vi stm32mp15xx-fsmp1x.dtsi 
2.添加电源相关节点内容 
3.添加sdmmc2相关节点内容 

对tf-a源码编译测试

0.对tf-a源码进行编译,进入tf-a源码目录下
     make -f $PWD/../Makefile.sdk all
1.进入到/home/linux/FSMP1A/tf-a-stm32mp-2.2.r2-r0/build/trusted
2.将tf-a-stm32mp157a-fsmp1a-trusted.stm32拷贝到uboot源码目录下
   cp tf-a-stm32mp157a-fsmp1a-trusted.stm32 ~/FSMP1A/u-boot-stm32mp-v2020.10-stm32mp-r2-r0/u-boot-stm32mp-v2020.10-stm32mp-r2/
3.进入到uboot源码目录下
    cd ~/FSMP1A/u-boot-stm32mp-v2020.10-stm32mp-r2-r0/u-boot-stm32mp-v2020.10-stm32mp-r2/
4.将TF卡插入到读卡器中,并被ubuntu识别
5.在uboot源码顶层目录下,执行脚本文件,进行烧写镜像文件
     ./sdtools.sh /dev/sdb
6.将读卡器从ubuntu中退出
7.将TF卡插入到开发板中,并进行测试,观察现象

二、部署开发阶段操作系统

1.准备tftp服务器,nfs服务器实现挂载
2.准备镜像文件
3.制作TF卡启动盘
4.使用ums命令烧写
5.在uboot源码目录下执行烧写命令
6.ubuntu和开发板组网
7.使用tftp命令下载镜像文件
8.设置bootargs参数
9.启动内核
10.设置bootcmd参数
1.准备tftp服务器,nfs服务器实现挂载
2.准备镜像文件
	tf-a镜像文件(TF卡/EMMC):tf-a-stm32mp157a-fsmp1a-trusted.stm32
	uboot镜像文件(TF卡/EMMC):u-boot-stm32mp157a-fsmp1a-trusted.stm32
	内核镜像文件(使用tftp服务器进行下载)
		stm32mp157a-fsmp1a.dtb
		uImage
3.制作TF卡启动盘
	保证开发板TF开启动方式成功,并且需要进入uboot安全模式启动
	ums命令属于uboot中的命令,所以一定保证开发板通过TF开启动方式成功
4.使用ums命令烧写
	ums 0 mmc 1  ------>当输入这个命令时,会在电脑中出现弹框,需要连接到虚拟机中
	在ubuntu中,查看一下是否识别到设备
    	ls /dev/sd*
5.在uboot源码目录下执行烧写命令
    ./sdtools.sh /dev/sdb
    EMMC拨码开关(0 1 0)
    如果可以进入到安全模式,代表uboot镜像文件,烧写到EMMC中成功
6.ubuntu和开发板组网
	在串口工具,对uboot组网参数进行配置
	setenv serverip 服务器IP
    setenv ipaddr 开发板网络IP
    setenv netmask 网络掩码
    setenv gatewayip 网关
    saveenv 保存设置
	测试开发板与ubuntu是否连接成功
	ping 服务器IP
7.使用tftp命令下载镜像文件
	tftp 0xc2000000 uImage(镜像文件)
	注意:需要先下载uImage
	tftp 0xc4000000 stm32mp157a-fsmp1a.dtb(设备树文件)
8.设置bootargs参数
	setenv bootargs root=/dev/nfs nfsroot=192.168.1.250:/home/ubuntu/nfs/rootfs,tcp,v4 rw console=ttySTM0,115200 init=/linuxrc ip=192.168.1.100
		root=/dev/nfs:使用nfs服务器挂载
    	nfsroot=192.168.1.250:/home/linux/nfs/rootfs:挂载的ip地址和路径,注意自己的路径和ip地址
    	tcp,v4:型号
    	rw :可读可写权限
    	console=ttySTM0:默认使用串口0
    	init=/linuxrc:默认启动1号进程
    	115200:波特率
    	ip=192.168.1.100 :板子的IP地址
9.启动内核
	bootm 0xc2000000 - 0xc4000000
10.设置bootcmd参数
	setenv bootcmd tftp 0xc2000000 uImage\;tftp 0xc4000000 stm32mp157a-fsmp1a.dtb\;bootm 0xc2000000 - 0xc4000000(记得保存,saveenv)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值