构建Linux系统
[!NOTE]
参考网址:STM32MP1 Developer Package - stm32mpu (stmicroelectronics.cn)
构建方式为STM32MP135的Developer_Package,Developer_Package应是从Yocto构建的系统源码中提取出的
一、构建前提条件
系统环境条件
配置项 | 建议 (最低限度) |
---|---|
Linux | Ubuntu22.04(64 位) |
内存 | 8 GB |
硬盘 | 320G |
更新Linux软件包
sudo apt-get update
必须的软件包
sudo apt-get install gawk wget git diffstat unzip texinfo gcc-multilib chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint xterm bsdmainutils
sudo apt-get install libssl-dev libgmp-dev libmpc-dev lz4 zstd
建议包
sudo apt-get install build-essential libncurses-dev libyaml-dev libssl-dev
其他包
sudo apt-get install coreutils bsdmainutils sed curl bc lrzsz corkscrew cvs subversion mercurial nfs-common nfs-kernel-server libarchive-zip-perl dos2unix texi2html libxml2-utils
下载使用Start package源码包
start package源码包是stm32mp1系列的官方系统烧录文件,先向板子内烧录一个简单系统,方便后面开发,且里面有些后面需要的相关文件
安装STM32CubeProgrammer烧录工具软件
STM32CubeProgrammer工具下载地址
https://www.st.com/en/development-tools/stm32cubeprog.html#get-software
创建STM32工作目录
mkdir $HOME/STM32MPU_workspace
创建STM32工具目录
mkdir $HOME/STM32MPU_workspace/STM32MPU-Tools
创建烧录工具安装目录
mkdir $HOME/STM32MPU_workspace/STM32MPU-Tools/STM32CubeProgrammer-x.y.z
创建用于存放下载包的临时目录
mkdir $HOME/STM32MPU_workspace/tmp
将安装包从windows中复制到linux的$HOME/STM32MPU_workspace/tmp目录中,或者直接在linux的浏览器上下载然后移到tmp目录,然后解压安装包
执行安装命令
./SetupSTM32CubeProgrammer-2.16.0.linux
安装弹窗只需修改软件安装路径为上面建立的即可
USB串口链路
安装USB库(Ubuntu应该自带有的)
sudo apt-get install libusb-1.0-0
允许STM32CubeProgrammer通过低级命令访问USB端口
先进入stm32cubeprogrammer安装目录下的rules文件夹
cd $HOME/STM32MPU_workspace/STM32MPU-Tools/STM32CubeProgrammer-x.y.z/Drivers/rules
将rules文件夹下的相关文件复制/etc/udev/rules.d/
sudo cp *.* /etc/udev/rules.d/
安装Linux串口工具
一个linux内使用的串口调试工具,可用于查看开发板系统烧录和启动时的日志信息
安装命令
sudo apt-get install minicom
下载Start package系统镜像包
windows浏览器去官网下载(建议),下载网址:
https://www.st.com/en/embedded-software/stm32mp1starter.html#get-software
创建STM32源码工作目录
mkdir $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0
创建Start package源码工作目录
mkdir $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Starter-Package
将下载的start package源码包复制到工作目录,并进入目录解压
tar xvf en.flash-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz
将系统映像烧录到官方开发板中
没有官方开发板可忽略此步
启动STM32CubeProgrammer工具并将模式设置成USB(在此之前得先将板子通过USB线与Ubuntu虚拟机连接)
点击open file会弹出新窗口,在解压的系统映像文件夹下选择FlashLayout_sdcard_stm32mp135x-dk-optee.tsv(SD卡烧录专用)
所处的文件夹路径:stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/images/stm32mp1/flashlayout_st-image-weston/optee
选择相关固件文件夹(系统映像解压后的文件夹内)
具体路径:stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/images/stm32mp1
参考ST官方教程 https://wiki.stmicroelectronics.cn/stm32mpu/wiki/Getting_started/STM32MP1_boards/STM32MP135x-DK
二、下载源码包和SDK
下载网址:STM32MP1Dev - STM32MP1 OpenSTLinux Developer Package - STMicroelectronics
Linux下构建,使用x86那个SDK包即可
三、安装与使用SDK
安装
解压下载后的SDK资源包,然后进入SDK文件夹内,打开shell终端执行安装脚本,如下图所示,最后等待安装完成即可。
注意:如果安装脚本无法运行,可能是没有执行权限,使用 sudo chmod +x <安装脚本文件全名>
示例:sudo chmod +x st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-4.2.1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.sh
安装完成后,进入安装目录即可看到如下文件,只需要关注那个带-setup-的文件即可
使用
短暂使用
每次使用该交叉编译工具链时,都需要source上面那个带-setup-的文件
即:source <SDK安装路径>/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
注意:用此方法后,只能在运行该方法的终端使用交叉编译工具链,新建终端后需要重新运行一遍该方法
示例:source /home/morgic/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Developer-Package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
source交叉编译工具后即可通过下面指令检测SDK是否在当前终端使用
长期使用
如果经常使用该交叉编译工具链,建议将其添加到Linux的PATH环境中
- 法一:添加到/etc/profile文件中
在/etc/profile文件的末尾添加:source <SDK安装路径>/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi,然后保存退出,再重启Linux即可在每个新建终端都能使用该SDK了,但是不建议,添加错误会导致Linux崩溃。
vi /etc/profile
在$HOME/.bashrc(等同于~/.bashrc)文件的末尾添加:source <SDK安装路径>/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi,然后保存退出,再新建终端即可,可在每个新建终端都能使用该SDK了,但也不建议,后面使用Yocto方式构建系统的时候会导致构建出错。所以还是每次在新终端source一下SDK更安全。
vi $HOME/.bashrc
四、解压系统源码包
tar xvf en.sources-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz
解压后进入源码包可看到如下项目文件夹,红色框中的所有源码都需要构建,而FIP_artifacts文件夹内常用作存放构建的结果
目前,ST提供的Linux系统都由图中几部分组成
TF-A
TF-A(Trusted Firmware-A)是一部分ARM基础安全架构(ARM Trusted Firmware)项目的组件之一。TF-A是一款开源的、用于ARM处理器的固件,旨在提供一个可信的启动和运行时环境,以确保系统的安全性和可靠性,TF-A通常用于启动ARM处理器上的操作系统(如Linux)之前。
OPTEE
OP-TEE(Open Portable Trusted Execution Environment)是一个开源的可信执行环境(TEE)实现,旨在为ARM架构的处理器提供安全的执行环境。OP-TEE项目由全球的开发者社区共同维护和支持,其核心目标是为处理器提供一个可信的、隔离的执行环境,以保护敏感数据和应用程序免受恶意软件和攻击的威胁,OP-TEE通常作为Developer_Package中的一个组件,用于提供安全的执行环境,与TF-A等组件配合使用,以构建更安全可信的嵌入式系统。
UBOOT
U-Boot,全称为Universal Boot Loader,是一款开源的引导加载程序(Boot Loader),用于嵌入式系统的通用引导加载程序,被广泛应用于各种嵌入式系统中,包括个人电脑、网络设备、移动设备等。
Linux内核
Linux操作系统的核心部分,负责管理系统资源、提供系统调用接口、调度任务、管理内存和文件系统等核心功能。
System文件系统
提供给用户管理系统数据的方式,主要构建方式有:buildroot、yocto等等