正点原子STM32MP157学习——2.内核移植(TF-A部分)

一、源码获取

        在实际开发中,使用半导体厂商修改过的工具包进行开发即可。在ST官方下载处获取TF-A、U-Boot、Kernel等资源的源码。

        在ubuntu中使用以下命令进行解压。

#创建文件夹
mkdir linux
cd linux
mkdir atk-mp1
#将下载的压缩包放到此文件夹下进行解压
tar -xvf xxxx

5.15版本的压缩包解压后有两个文件夹,一个image文件夹,存放编译出的kernel、tf-a和u-boot镜像文件,另一个是source文件夹,存放的是tf-a、u-boot、kernel和optee的源码。在学习中只使用tf-a、u-boot、kernel的源码编译镜像并移植即可。

二、TF-A

        全称Trusted Firmware-Arm(Arm可信固件)。在启动时,TF-A 会先初始化 DDR 等外设,把 Uboot 从 Flash(NAND、 NOR FLASH、 SD、 MMC 等)拷贝到 DDR 中。

1.给源码打补丁

        源码中的TF-A不能直接使用,需要对其打补丁。在相应文件夹中的xxxx.patch即为补丁文件,xxxx.tar.xz为源文件。

        使用以下命令完成源文件的解压和补丁的安装。并且将打完补丁的源文件移到一个更方便的路径备用。

#解压
tar -vxf xxxx.tar.xz
#打补丁
#先进入解压后的文件夹
for p in `ls -1 ../*.patch`;do patch -p1 < $p;done
#意思是将上一层所有的.patch文件通过patch命令打补丁到源码目录
###################
#创建新文件夹存储打补丁后的文件
mkdir (xxxx)/atk-mp1/tf-a
cp * (xxxx)/atk-mp1/tf-a -rf

2.编译工具安装

        首先安装stm32wrapper4dbg工具,用来编译tf-a或者U-Boot。可以在ST官方地址进行下载。并对其进行解压和编译安装。

#下载并编译
git clone https://github.com/STMicroelectronics/stm32wrapper4dbg.git
cd xxxx
make
#将编译得到的可执行文件添加到系统文件夹
sudo cp stm32wrapper4dbg /usr/bin
#这样就可以直接在终端使用
#查看信息
stm32wrapper4dbg -s

3.源码编译

        由于官方提供的TF-A源码未经过修改,实际使用可能会出现一些问题,所以直接编译正点原子提供的TF-A源码。

#先将正点原子提供的源码包放到新文件夹并解压
tar -vxf xxxx.tar.bz2
#安装设备树编译相关命令
sudo apt-get install device-tree-compiler
#修改makefile,将交叉编译器更改为自己安装的交叉编译器
#在Makefile.sdk第14行修改,我的交叉编译器是arm-linux-gnueabihf-
#编译
make -f ../Makefile.sdk all

编译后生成的build文件夹下,有一个trusted文件夹,里面保存了MP1所有型号的TF-A固件。

4.TF-A固件烧录

Windows下使用STM32Programmer软件将TF-A固件烧录到开发板中。

需要的文件:

①tf-a-stm32mp157d-atk-serialboot.stm32,使用正点原子提供的文件

②u-boot.stm32,使用正点原子提供的文件

③tf-a-stm32mp157d-atk-trusted.stm32,由编译生成

固件①用来初始化USB、DDR等外设,固件②为U-Boot相关文件,最后再将固件③写入存储介质。

④烧写脚本,用来规范上述固件的烧写地址,使用正点原子提供的文件atk_emmc-stm32mp157d-atk-qt.tsv。脚本文件还需要进行修改,使用Notepad++,设置“视图→显示符号→显示空格与制表符”用来查看空格与Tab的区别,修改名称为tf-a.tsv,方便使用。

修改内容如下:

每一列的具体含义可查看手册。之后就可以使用软件进行烧写。在开机Log中的BL2提示部分可以显示出TF-A的编译时间,用来确认是否烧写成功。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值