
关于命令行提示符: 在实验步骤中会涉及到执行命令的操作,为区分操作是在Ubuntu上完成还是在开发板上完成,不同操作会有不同的提示符: Ubuntu操作时命令行提示符为:linux@ubuntu:$ 开发板Linux系统下操作时命令行提示符为:root@fsmp1a:$ 开发板u-boot期间操作是命令行提示符为:STM32MP> 注意:由于部分操作需要进入特定目录下完成,导致命令行提示符较长如: linux@ubuntu:~/FS-MP1A/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/u-boot-stm32mp-2020.01-r0/u-boot-stm32mp-2020.01$ 过长的命令行提示符不便于文档编写,所以本文中所有命令行提示符均忽略了当前工作目录的显示,命令行提示符不代表当前目录,具体当前操作是在哪个目录下完成,请结合文档上下文确定。 第 1 章 源码编译 1.1 编译环境配置 1.1.1 源码目录结构 由于OpenSTLinux所涉及到的源码较多,且有路径的依赖。所以请按照本文的说明建立源码文件夹。在用户home目录下建立fs-mp1a文件夹。
将工作目录切换到fs-mp1a目录下,建立linux、optee-os、trusted-firmware、u-boot、tools文件夹。
![]() 请务必按照此目录名称建立文件夹,否则会导致后续的OpenSTLinux系统编译错误。 1.1.2 SDK工具链安装 OpenSTLinux SDK是Yocto SDK定制发行版的软件开发套件,它提供了独立的交叉开发工具链和针对特定镜像中所使用到的特定链接库。 开发资料光盘中提供的SDK是基于FS-MP1A开发板的定制交叉编译工具链,该工具链可用于FS-MP1A开发板中所有项目的编译与调试。 将资料光盘下【华清远见-FS-MP1A开发资料\01-工具软件】的en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz复制到ubuntu主机中,可以采用共享文件夹的方式也可以使用tfp方式将文件存入FS-MP1A源码目录下的tools文件夹下进行解压。
解压之后得到sdk目录,进入到sdk文件夹之后内容如下。 ![]() 执行st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh安装脚本。
运行之后会提示输入安装位置,直接按回车键默认即可: ![]() 继续询问是否安装SDK,输入Y,回车 ![]() 默认安装路径安装在opt目录下,这个目录需要有root权限,所以安装时需要使用sudo 安装,过程中需要输入用户的sudo密码(如果当前用户sudo功能已经授权,这个密码就是用户的登录密码),输入密码后开始进行安装。 ![]() 输入密码后等待安装,安装后显示如下: ![]() 导入sdk
验证开发工具是否安装正确,显示版本信息如下图所示。
![]() 1.1.3 源码导入 Bootloader源码 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\u-boot】下的u-boot-fsmp1a-2020.01.tar.xz和Makefile.sdk导入到fs-mp1a目录下u-boot文件夹中。 ![]() 将u-boot-fsmp1a-2020.01.tar.xz解压之后得到u-boot-fsmp1a-2020.01文件夹。 linux@ubuntu ![]() ![]() trusted-firmware源码 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\tf-a】下的fsmp1a-trusted-firmware-2.2.tar.xz和Makefile.sdk导入到fs-mp1a目录下trusted-firmware文件夹中 ![]() 将fsmp1a-trusted-firmware-2.2.tar.xz解压之后得到fsmp1a-trusted-firmware-2.2文件夹。
![]() optee_os源码 将光盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\optee】下的fsmp1a-optee_os-3.9.0.tar.xz和Makefile.sdk导入到fs-mp1a目录下optee-os文件夹中。 ![]() 将fsmp1a-optee_os-3.9.0.tar.xz解压之后得到fsmp1a-optee_os-3.9.0文件夹。
![]() linux源码 盘资料中【华清远见-FS-MP1A开发资料\02-程序源码\05-预装系统源码\linux】下的fsmp1a-linux-5.4.31.tar.xz导入到fs-mp1a目录下linux文件夹中。 ![]() 将fsmp1a-linux-5.4.31.tar.xz解压之后得到fsmp1a-linux-5.4.31文件夹。 linux@ubuntu ![]() ![]() Yocto源码 盘资料中下的fsmp1a-ST-Yocto.tar.xz导入到fs-mp1a目录下。 ![]() 将fsmp1a-ST-Yocto.tar.xz解压之后得到fsmp1a-ST-Yocto文件夹。
![]() 盘资料中下的downloads.tar.xz导入到由fsmp1a-ST-Yocto.tar.xz得到的fsmp1a-ST-Yocto文件夹下。 ![]() 将downloads.tar.xz解压之后得到downloads文件夹。
![]() 至此OpenSTLinux全部源码就导入完成了。导入源码完成后的fs-mp1a目录结构如下。 ![]() 1.2 u-boot源码编译 1.导入交叉编译工具链并验证
![]() 2) 将工作目录切换到u-boot-fsmp1a-2020.01源码目录下。
![]() 3) 导入配置文件。 fsmp1a的u-boot可以支持basic、trusted、optee三种配置。分别对应三种配置文件。 ![]() 这里使用trusted配置来编译。
![]() 4) 编译源码
![]() 使用Makefile.sdk编译 除了传统的编译方式之外还可以通过上层目录下的Makefile.sdk来编译镜像。使用此方法需要将先前编译过的源码清除后再编译,否则会导致编译出错。
编译basic镜像
编译成功后会在上级目录下生成build-basic目录。其中的u-boot-stm32mp157a-fsmp1a-basic.img和u-boot-spl.stm32-stm32mp157a-fsmp1a-basic即为生成的烧写镜像 ![]() 编译trusted镜像
编译成功后会在上级目录下生成build-trusted目录。其中的u-boot-stm32mp157a-fsmp1a-trusted.stm32即为生成的烧写镜像。 ![]() 编译optee镜像
编译成功后会在上级目录下生成build-optee目录。其中的u-boot-stm32mp157a-fsmp1a-optee.stm32即为生成的烧写镜像。 ![]() 编译basic、trusted、optee三种镜像
![]() 1.3 tf-a源码编译 1.导入交叉编译工具链并验证 在这里插入代码片linux@ubuntu ![]() linux@ubuntu ![]() ![]() 2) 将工作目录切换到fsmp1a-trusted-firmware-2.2源码目录下。
编译成功之后会在上级目录下生成build目录,build目录下的trusted目录中tf-a-stm32mp157a-fsmp1a-trusted.stm32即为烧写镜像。 ![]() 编译optee镜像
编译成功之后会在上级目录下生成build目录,build目录下的optee目录中tf-a-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。 ![]() 编译trusted、optee两种镜像
编译成功后会在上级目录下生成build目录,该目录下同时生成了trusted和optee两个目录。 ![]() 1.4 optee-os源码编译 导入交叉编译工具链并验证
![]() 2) 将工作目录切换到fsmp1a-optee_os-3.9.0源码目录下。
![]() 3) 编译源码
![]() 1.5 linux源码编译 1.导入交叉编译工具链并验证
![]() 2) 将工作目录切换到fsmp1a-linux-5.4.31源码目录下。
![]() 3) 导入配置文件 linux@ubuntu ![]() ![]() 如果需要修改配置可以使用如下命令来启动menuconfig。
![]() 4) 编译内核镜像
编译成功之后会在arch/arm/boot/目录下生成uImage文件。 ![]() 在源码目录下生成用于调试的vmlinux文件。 ![]() 5) 编译设备树文件
![]() stm32mp157a-fsmp1a-rgb070.dtb为rgb屏幕的设备树文件 stm32mp157a-fsmp1a-mipi050.dtb为mipi屏幕的设备树文件 6.编译内核模块
编译成功后会在上层目录生成build目录其中的install_artifact 目录中存放的即为导出的驱动模块。 1.6 Yocto构建系统 1.将工作目录切换到fsmp1a-ST-Yocto源码目录下。
![]() 2) 导入编译配置
如下界面提示主机的ubuntu版本与期望的版本不同,这里输入y。 ![]() 如果是第一次配置,需要同意一些协议,输入y。 ![]() 之后按空格键到协议底部。 ![]() 输入y会出现如下界面。 ![]() 3) 编译源码
由于OpenSTLinux涉及到的源码较多,因此编译会比较耗时。 编译完成后所生成的镜像文件保存在tmp-glibc/deploy/images/fsmp1a/目录下。 这里生成了fs-mp1a开发板所需的烧写镜像,包括basic、trusted、optee三种。 basic专有镜像
trusted专有镜像
optee专有镜像
公用镜像
配置文件 flashlayout_fs-mp1a-weston文件夹中存放的是烧写时所使用的配置文件。 ———————————————— 版权声明:左月先生 |
更新STM32MP135-Openwrt镜像
基于STM32MP1和STM32MP2在嵌入式Linux平台上部署有效的安全保护机制
利用STM32MP1和STM32MP2为嵌入式Linux提供有效的安全措施:供当今决策者参考的3条宝贵经验
STM32MP1 WiFi连接
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【STM32MPU 安全启动】 TF-A BL2 TrustedBoot原理学习
《STM32MPU安全启动》学**结
《STM32MPU安全启动》学习笔记之optee 如何加载CORTEX-M核和使能校验
《STM32MPU安全启动》学习笔记之TF-A BL2校验optee和uboot的流程以及如何使能
《STM32MPU 安全启动》课程学习心得+开启一扇通往嵌入式系统安全领域深处的大门。