STM32MP157F-DK2开发板构建交叉编译链
1、环境下载
在线下载ST官方软件包,ST官方定义的三大软件包Starter Package(预编译的软件镜像-烧录到开发板即可运行)、Developer Package(带交叉编译链)、Distribution Package(基于OpenEbedded/Yocto完整的构架框架和源代码,由于Developer包不含QT交叉编译链,也无法附加所以需要使用Distribution)
(1)下载Distribution Package包
初始化本地仓库,并使用国内代理
repo init -u https://gitee.com/mirrors_STMicroelectronics/oe-manifest.git -b refs/tags/openstlinux-6.1-yocto-mickledore-mpu-v24.06.26
如果repo命令没有安装需要安装并验证版本
sudo curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o /usr/local/bin/repo
sudo chmod a+x /usr/local/bin/repo
repo --version
之后使用同步命令下载
repo sync
(2)下载相关库并且配置
首先下载对应的qt资源
git clone -b v2.2.0 https://github.com/STMicroelectronics/meta-st-x-linux-qt.git meta-st/meta-st-x-linux-qt
git clone -b 6.8 https://code.qt.io/yocto/meta-qt6.git
git clone -b mickledore https://github.com/kraj/meta-clang.git
配置
BSP_DEPENDENCY="layers/meta-qt6 layers/meta-st/meta-st-x-linux-qt layers/meta-clang" DISTRO=openstlinux-weston MACHINE=stm32mp1 source layers/meta-st/scripts/envsetup.sh
2、生成交叉编译链
(1)生成一个可以在开发板上启动运行的完整 Linux 系统镜像
bitbake st-image-qt package-index
这个命令运行时间很长,需要重复运行直到下载完成
(2)生成"交叉编译工具链安装包"
bitbake st-image-qt -c populate_sdk
这个命令执行完即可生成可执行SDK构建遍历链
注:这里有个问题qt编译时需要使用镜像自带的编译环境进行编译,要不打包时qt会用系统的环境,需要在"layers/meta-qt6/recipes-qt/qt6/gn-native_git.bbappend"文件下后面追加下面的代码
do_compile() {
${PYTHON} ${S}/src/3rdparty/gn/build/gen.py \
--no-last-commit-position \
--out-path ${B} \
--cc ${CC} \
--cxx ${CXX} \
--ld ${CXX} \
--platform linux \
--ar ${AR} \
--qt-version ${QT_VERSION}
# GCC 9 不支持 -std=gnu++20,替换为支持的 -std=gnu++2a
sed -i 's/-std=gnu++20/-std=gnu++2a/g' ${B}/build.ninja
ninja -C ${B} gn
}