1.准备TF-A镜像文件
阅读README得知解压顶层目录下的压缩包
tar xfz tf-a-stm32mp-2.2.r2-r0.tar.gz
进入解压后的目录,加载补丁文件
cd tf-a-stm32mp-2.2.r2
for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
配置交叉编译链编译工具
CROSS_COMPILE=arm-linux-gnueabihf-
修改设备树文件
1)首先备份参考公版DK1的相关设备树源文件与头文件,并修改相关的包含关系
2)在顶层Makefile.sdk中,将修改后设备树源文件添加
TFA_DEVICETREE ?= stm32mp157a-fsmp1a
3)删除DK1使用的i2c4节点,cpu0,cpu1,并添加FSMP1A需要的设备树节点
4)在解压缩目录下,执行编译命令
make -f $PWD/../Makefile.sdk all
2.准备U-BOOT镜像文件
3.将上述文件烧写到开发板EMMC中
先将准备好的TF-A与UBOOT镜像文件使用拷贝文件命令以物理方式写入TF卡中
sudo dd if=tf-a-stm32mp157a-fsmp1a-trusted.stm32 of=/dev/sdb1 conv=fdatasync
sudo dd if=tf-a-stm32mp157a-fsmp1a-trusted.stm32 of=/dev/sdb2 conv=fdatasync
sudo dd if=u-boot-stm32mp157a-fsmp1a-trusted.stm32 of=dev/sdb3 conv=fdatasync
使用TF卡启动开发板,进入uboot交互界面使用ums命令,使用mini-usb连接LINUX端与开发板
ums 0 mmc 0 ------------>将TF卡挂载到Ubuntu中
ums 0 mmc 1 ------------>将EMMC设备挂载到Ubuntu中
再次使用拷贝文件命令以物理方式写入EMMC中
sudo dd if=tf-a-stm32mp157a-fsmp1a-trusted.stm32 of=/dev/sdb1 conv=fdatasync
sudo dd if=tf-a-stm32mp157a-fsmp1a-trusted.stm32 of=/dev/sdb2 conv=fdatasync
sudo dd if=u-boot-stm32mp157a-fsmp1a-trusted.stm32 of=dev/sdb3 conv=fdatasync
4.准备LINUX内核镜像文件(使用TFTP服务器下载到开发板,加载到内存)
选择EMMC启动方式,使用UBOOT交互模式,使用TFTP命令下载设备树文件与内核镜像文件,使用BOOTM命令加载
tftp 0xc2000000 uImage
tftp 0xc4000000 stm32mp157a-fsmp1a.dtb
bootm 0xc2000000 - 0xc4000000
5.准备根文件系统文件(使用NFS服务器实现挂载)
设置bootargs参数
setenv bootargs root=/dev/nfs nfsroot=192.168.1.100:/home/ubuntu/nfs/rootfs,tcp,v4 rw console=ttySTM0,115200 init=/linuxrc ip=192.168.1.250
tips:
在设置正确的NFS挂载路径后,在交互界面使用TFTP与BOOTM命令正确加载设备树镜像文件与内核镜像文件后,bootargs自动加载,Linux系统开始启动。
可以通过设置bootcmd来避免重复输入
setenv bootcmd tftp 0xc2000000 uImage\;tftp 0xc4000000 stm32mp157a-fsmp1a.dtb\;bootm 0xc2000000 - 0xc4000000