编译手册
准备编译环境
安装交叉编译工具
准备交叉编译工具文件
在网盘下载“st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-4.0.4-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.sh”后,把文件传输到 x86_64 Linux 主机中。
执行安装
# =====> Input:
# 创建安装目录,把编译链放到该目录下
mkdir ~/my-work/stm32mp13/03_sdk -p
# 添加可执行权限
chmod +x st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-4.0.4-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.sh
# 安装
./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-4.0.4-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.sh
# 安装过程中要求输入安装目录,同样是安装在这个目录中
Enter target directory for SDK (default: /opt/st/stm32mp1/4.0.4-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23): /home/kuangwh/my-work/stm32mp13/03_sdk
配置交叉编译环境
安装成功后,在03目录下有一个environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi脚本,输入如下命令:
source environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
验证
$CC -v
输出如下信息代表环境配置成功:
Using built-in specs.
COLLECT_GCC=arm-ostl-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/kuangwh/my-work/stm32mp13/03_sdk/sysroots/x86_64-ostl_sdk-linux/usr/libexec/arm-ostl-linux-gnueabi/gcc/arm-ostl-linux-gnueabi/11.3.0/lto-wrapper
Target: arm-ostl-linux-gnueabi
。。。。
Supported LTO compression algorithms: zlib zstd
gcc version 11.3.0 (GCC)
备注
在每次打开终端窗口后都需要进行一次source配置。
下载源码包
网盘中02_源码目录下,下载源码包 en.SOURCES-stm32mp1-openstlinux-5.15.tar.bz2
创建编译目录:
mkdir ~/my-work/stm32mp13/02_sources -p
把源码放到此目录中,并进行解压:
tar xvf en.SOURCES-stm32mp1-openstlinux-5.15.tar.bz2 -C ~/my-work/stm32mp13/02_sources/
编译 tf-a
进入tf-a-stm32mp-v2.6-stm32mp-r2-r0目录,解压tf-a源码:
tar xvf tf-a-stm32mp-v2.6-stm32mp-r2.tar.bz2
解压后,进入tf-a-stm32mp-v2.6-stm32mp-r2目录中
在此目录下,可看到有一个编译脚本 build-512m.sh ,直接运行此脚本进行编译:
./build-512m.sh
编译完成后,在~/my-work/stm32mp13/02_sources/FIP_artifacts目录下会对镜像进行更新。
编译 optee
进入optee-os-stm32mp-3.16.0-stm32mp-r2-r0,解压源码:
tar xvf optee-os-stm32mp-3.16.0-stm32mp-r2.tar.bz2
解压后,进入optee-os-stm32mp-3.16.0-stm32mp-r2目录中
在此目录下,可看到有一个编译脚本 build-512m.sh ,直接运行此脚本进行编译:
./build-512m.sh
编译完成后,在~/my-work/stm32mp13/02_sources/FIP_artifacts目录下会对镜像进行更新。
编译 uboot
进入u-boot-stm32mp-v2021.10-stm32mp-r2-r0,解压源码:
tar xvf u-boot-stm32mp-v2021.10-stm32mp-r2.tar.bz2
解压后,进入u-boot-stm32mp-v2021.10-stm32mp-r2目录中
在此目录下输入,如下命令进行配置和编译打包等:
export FIP_DEPLOYDIR_ROOT=$PWD/../../FIP_artifacts
make -f $PWD/../Makefile.sdk DEPLOYDIR=$FIP_DEPLOYDIR_ROOT/u-boot UBOOT_CONFIG=trusted UBOOT_DEFCONFIG=myzrstm32mp13_defconfig UBOOT_BINARY=u-boot.dtb DEVICETREE=myzr-stm32mp13-512m all
编译完成后,在~/my-work/stm32mp13/02_sources/FIP_artifacts目录下会对镜像进行更新。
编译 内核
进入linux-stm32mp-5.15.67-stm32mp-r2-r0,解压源码:
tar xvf linux-5.15.67.tar.bz2
解压后,进入linux-5.15.67目录中
生成.config文件
make myzr-stm32mp13_defconfig
编译内核目标文件
make -j16 uImage LOADADDR=0xC2000040
编译设备树文件
make myzr-stm32mp13.dtb
编译内核模块包
# 进行编译
make -j16 modules
# 进入安装
make INSTALL_MOD_PATH="$PWD/install_artifact" modules_install
# 删除无关目录文件
rm install_artifact/lib/modules/5.15.67/source
rm install_artifact/lib/modules/5.15.67/build
# strip内核模块
find install_artifact/ -name "*.ko" | xargs $STRIP --strip-debug --remove-section=.comment --remove-section=.note --preserve-dates
# 打包内核模块
cd install_artifact
tar cjf modules.tar.bz2 *
镜像文件
内核镜像文件在:arch/arm/boot/uImage
内核设备树文件在: arch/arm/boot/dts/myzr/myzr-stm32mp13.dtb
内核模块包在: install_artifact/modules.tar.bz2
镜像文件更新
内核镜像文件更新:把内核镜像uImage拷贝到开发板中,并替换掉 /boot/uImage
内核设备树文件更新:把设备树文件myzr-stm32mp13.dtb拷贝到开发板中,并替换掉 /boot/myzr-stm32mp13.dtb
内核模块包更新:把内核模块包拷贝到开发板中,通过如下命令进行解压:
tar xvf modules.tar.bz2 -C /
解压完成后,输入如下命令进行重启开发板:
depmod -a sync reboot
--------------------------------------------------------------------------------
* 珠海明远智睿科技有限公司
* ZhuHai MYZR Technology CO.,LTD.
* Latest Update: 2023/9/12
* Supporter: Kuangwh
--------------------------------------------------------------------------------