你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32MP157 Linux系统移植开发篇1:linux系统移植前说明及源码编译

[复制链接]
STMCU小助手 发布时间:2022-10-1 19:52
系统移植前说明

关于命令行提示符:


在实验步骤中会涉及到执行命令的操作,为区分操作是在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 章 源码编译
编译环境配置
源码目录结构

由于OpenSTLinux所涉及到的源码较多,且有路径的依赖。所以请按照本文的说明建立源码文件夹。

在用户home目录下建立fs-mp1a文件夹。

linux@ubuntu:$ cd ~

linux@ubuntu:$ mkdir fs-mp1a

将工作目录切换到fs-mp1a目录下,建立linux、optee-os、trusted-firmware、u-boot、tools文件夹

linux@ubuntu: $ cd ~/fs-mp1a

linux@ubuntu: $ mkdir linux optee-os trusted-firmware u-boot tools

20210803094827427.png

请务必按照此目录名称建立文件夹,否则会导致后续的OpenSTLinux系统编译错误。

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文件夹下进行解压。

linux@ubuntu: $ tar -xvf en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz  -C  /home/linux/fs-mp1a/tools/

解压之后得到sdk目录,进入到sdk文件夹之后内容如下。
20210803094838667.png

执行st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh安装脚本。

linux@ubuntu: $ ./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh

运行之后会提示输入安装位置,直接按回车键默认即可:

20210803094851348.png

继续询问是否安装SDK,输入Y,回车

20210803094900197.png

默认安装路径安装在opt目录下,这个目录需要有root权限,所以安装时需要使用sudo 安装,过程中需要输入用户的sudo密码(如果当前用户sudo功能已经授权,这个密码就是用户的登录密码),输入密码后开始进行安装。

20210803094938733.png

输入密码后等待安装,安装后显示如下:

20210803094950642.png

导入sdk

linux@ubuntu: $ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

验证开发工具是否安装正确,显示版本信息如下图所示。

linux@ubuntu: $ $CC --version

20210803095001792.png

源码导入

1.Bootloader源码
将光盘资料中下的u-boot-fsmp1a-2020.01.tar.xz和Makefile.sdk导入到fs-mp1a目录下u-boot文件夹中

20210803095012397.png

将u-boot-fsmp1a-2020.01.tar.xz解压之后得到u-boot-fsmp1a-2020.01文件夹

linux@ubuntu:$ tar -xvf u-boot-fsmp1a-2020.01.tar.xz

20210803095020264.png

2.trusted-firmware源码
将光盘资料中下的fsmp1a-trusted-firmware-2.2.tar.xz和Makefile.sdk导入到fs-mp1a目录下trusted-firmware文件夹中

20210803095031217.png

将fsmp1a-trusted-firmware-2.2.tar.xz解压之后得到fsmp1a-trusted-firmware-2.2文件夹

linux@ubuntu:$ tar -xvf fsmp1a-trusted-firmware-2.2.tar.xz

20210803095040662.png

3.optee_os源码
将光盘资料中下的fsmp1a-optee_os-3.9.0.tar.xz和Makefile.sdk导入到fs-mp1a目录下optee-os文件夹中

20210803095050539.png

将fsmp1a-optee_os-3.9.0.tar.xz解压之后得到fsmp1a-optee_os-3.9.0文件夹

linux@ubuntu:$ tar -xvf fsmp1a-optee_os-3.9.0.tar.xz

20210803095059641.png

4.linux源码
  盘资料中下的fsmp1a-linux-5.4.31.tar.xz导入到fs-mp1a目录下linux文件夹中

20210803095108787.png

将fsmp1a-linux-5.4.31.tar.xz解压之后得到fsmp1a-linux-5.4.31文件夹

linux@ubuntu:$ tar -xvf fsmp1a-linux-5.4.31.tar.xz

20210803095116810.png

5.Yocto源码
盘资料中下的fsmp1a-ST-Yocto.tar.xz导入到fs-mp1a目录下

20210803095125219.png

将fsmp1a-ST-Yocto.tar.xz解压之后得到fsmp1a-ST-Yocto文件夹

linux@ubuntu:$ tar -xvf fsmp1a-ST-Yocto.tar.xz

20210803095133868.png

盘资料中下的downloads.tar.xz导入到由fsmp1a-ST-Yocto.tar.xz得到的fsmp1a-ST-Yocto文件夹下。

20210803095145159.png

将downloads.tar.xz解压之后得到downloads文件夹。

linux@ubuntu:$ tar -xvf downloads.tar.xz

20210803095154106.png

至此OpenSTLinux全部源码就导入完成了。导入源码完成后的fs-mp1a目录结构如下。

20210803095202127.png

u-boot源码编译

1.导入交叉编译工具链并验证
linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

linux@ubuntu:$ $CC --version

20210803095211769.png

2.将工作目录切换到u-boot-fsmp1a-2020.01源码目录下。
linux@ubuntu:$ cd ${HOME}/fs-mp1a/u-boot/u-boot-fsmp1a-2020.01

20210803095223991.png

3.导入配置文件。
fsmp1a的u-boot可以支持basic、trusted、optee三种配置。分别对应三种配置文件。

20210803095233351.png

这里使用trusted配置来编译

linux@ubuntu:$ make stm32mp15_trusted_defconfig

20210803095241413.png

4.编译源码
linux@ubuntu:$ make DEVICE_TREE=stm32mp157a-fsmp1a all

编译完成后得到u-boot.img文件

20210803095251421.png

5.使用Makefile.sdk编译
除了传统的编译方式之外还可以通过上层目录下的Makefile.sdk来编译镜像。使用此方法需要将先前编译过的源码清除后再编译,否则会导致编译出错。

linux@ubuntu:$ make distclean

6.编译basic镜像
linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_basic_defconfig,basic,u-boot.img

编译成功后会在上级目录下生成build-basic目录。其中的u-boot-stm32mp157a-fsmp1a-basic.img和u-boot-spl.stm32-stm32mp157a-fsmp1a-basic即为生成的烧写镜像

20210803095301289.png

7.编译trusted镜像
linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_trusted_defconfig,trusted,u-boot.stm32

编译成功后会在上级目录下生成build-trusted目录。其中的u-boot-stm32mp157a-fsmp1a-trusted.stm32即为生成的烧写镜像

2021080309530930.png

8.编译optee镜像
linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_trusted_defconfig,optee,u-boot.stm32

编译成功后会在上级目录下生成build-optee目录。其中的u-boot-stm32mp157a-fsmp1a-optee.stm32即为生成的烧写镜像

20210803095318637.png

9.编译basic、trusted、optee三种镜像
linux@ubuntu:$ make -f $PWD/../Makefile.sdk all

编译成功后会在上级目录下会同时生成build-basic、build-trusted、build-optee三个目录。

20210803095329955.png

10.tf-a源码编译
导入交叉编译工具链并验证
linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

linux@ubuntu:$ $CC --version

20210803095339955.png

11.将工作目录切换到fsmp1a-trusted-firmware-2.2源码目录下。
linux@ubuntu:$ cd ${HOME}/fs-mp1a/trusted-firmware/fsmp1a-trusted-firmware-2.2

12.编译trusted镜像
linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all

编译成功之后会在上级目录下生成build目录,build目录下的trusted目录中tf-a-stm32mp157a-fsmp1a-trusted.stm32即为烧写镜像。

20210803095348665.png

13.编译optee镜像
linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=optee ELF_DEBUG_ENABLE='1' all

编译成功之后会在上级目录下生成build目录,build目录下的optee目录中tf-a-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。

202108030953574.png

14.编译trusted、optee两种镜像
linux@ubuntu:$ make -f $PWD/../Makefile.sdk all

编译成功后会在上级目录下生成build目录,该目录下同时生成了trusted和optee两个目录。

2021080309541166.png

15.optee-os源码编译
导入交叉编译工具链并验证
linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

linux@ubuntu:$ $CC --version

20210803095419809.png

16.将工作目录切换到fsmp1a-optee_os-3.9.0源码目录下。
linux@ubuntu:$ cd ${HOME}/fs-mp1a/optee-os/fsmp1a-optee_os-3.9.0

20210803095426803.png

17.编译源码
linux@ubuntu:$ make -f $PWD/../Makefile.sdk CFG_EMBED_DTB_SOURCE_FILE=stm32mp157a-fsmp1a

编译成功之后会在上级目录下生成build目录其目录下的tee-header_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pageable_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pager_v2-stm32mp157a-fsmp1a-optee.stm32即为烧写镜像。

20210803095435598.png

18.linux源码编译
导入交叉编译工具链并验证
linux@ubuntu:$ linux@ubuntu source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

linux@ubuntu:$ $CC --version

2021080309544686.png

19.将工作目录切换到fsmp1a-linux-5.4.31源码目录下。
linux@ubuntu:$ cd ${HOME}/fs-mp1a/linux/fsmp1a-linux-5.4.31

20210803095454698.png

20.导入配置文件
linux@ubuntu:$ make stm32_fsmp1a_defconfig

20210803095501641.png

如果需要修改配置可以使用如下命令来启动menuconfig

linux@ubuntu:$ make menuconfig

20210803095510810.png

21.编译内核镜像
linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040

编译成功之后会在arch/arm/boot/目录下生成uImage文件

20210803095520633.png

在源码目录下生成用于调试的vmlinux文件

20210803095528696.png

22.编译设备树文件
linux@ubuntu:$ make ARCH=arm dtbs

编译成功之后会在arch/arm/boot/dts目录下生成stm32mp157a-fsmp1a.dtb、stm32mp157a-fsmp1a-rgb070.dtb和stm32mp157a-fsmp1a-mipi050.dtb文件

20210803095536130.png

stm32mp157a-fsmp1a-rgb070.dtb为rgb屏幕的设备树文件

stm32mp157a-fsmp1a-mipi050.dtb为mipi屏幕的设备树文件

23.编译内核模块
linux@ubuntu:$ make ARCH=arm modules

linux@ubuntu:$ make ARCH=arm INSTALL_MOD_PATH="$PWD/../build/install_artifact" modules_install

编译成功后会在上层目录生成build目录其中的install_artifact 目录中存放的即为导出的驱动模块。

24.Yocto构建系统
将工作目录切换到fsmp1a-ST-Yocto源码目录下。
linux@ubuntu:$ cd ${HOME}/fs-mp1a/ fsmp1a-ST-Yocto

20210803095546757.png

25.导入编译配置
linux@ubuntu:$ DISTRO=openstlinux-weston MACHINE=fsmp1a source layers/meta-farsight/scripts/envsetup.sh

如下界面提示主机的ubuntu版本与期望的版本不同,这里输入y

20210803095555842.png

如果是第一次配置,需要同意一些协议,输入y。。

20210803095605423.png

之后按空格键到协议底部

20210803095619321.png

输入y会出现如下界面

20210803095624874.png

26.编译源码
linux@ubuntu:$ bitbake fs-mp1a-weston

注意:在编译Yocto系统时确保ubuntu主机可以连接互联网

由于OpenSTLinux涉及到的源码较多,因此编译会比较耗时。

编译完成后所生成的镜像文件保存在tmp-glibc/deploy/images/fsmp1a/目录下。

这里生成了fs-mp1a开发板所需的烧写镜像,包括basic、trusted、optee三种。

basic专有镜像
u-boot-spl.stm32-stm32mp157a-fsmp1a-basic

u-boot-stm32mp157a-fsmp1a-basic.img

trusted专有镜像
tf-a-stm32mp157a-fsmp1a-trusted.stm32

u-boot-stm32mp157a-fsmp1a-trusted.stm32

optee专有镜像
tf-a-stm32mp157a-fsmp1a-optee.stm32

u-boot-stm32mp157a-fsmp1a-optee.stm32

tee-header_v2-stm32mp157a-fsmp1a-optee.stm32

tee-pageable_v2-stm32mp157a-fsmp1a-optee.stm32

tee-pager_v2-stm32mp157a-fsmp1a-optee.stm32

公用镜像
st-image-bootfs-openstlinux-weston-fsmp1a.ext4

st-image-userfs-openstlinux-weston-fsmp1a.ext4

st-image-vendorfs-openstlinux-weston-fsmp1a.ext4

fs-mp1a-weston-openstlinux-weston-fsmp1a.ext4

配置文件
flashlayout_fs-mp1a-weston文件夹中存放的是烧写时所使用的配置文件

由上图可以看到配置文件分为sdcard烧写配置和emmc烧写配置。


————————————————
版权声明:华清远见IT开放实验室


收藏 评论0 发布时间:2022-10-1 19:52

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版