Docker下为STM32MP1平台编译Yocto Linux系统
STM32MP1平台是ST推出的微处理器,分为两类型号,STM32MP13x和STM32MP15x。
STM32MP13x系列型号的功能区别:
- STM32MP131: Single Cortex-A7 core
- STM32MP133: STM32MP131 + 2x CAN, ETH2(GMAC), ADC1
- STM32MP135: STM32MP133 + DCMIPP, LTDC
STM32MP15x系列型号的功能区别:
- STM32MP157: Dual Cortex-A7 cores, Cortex-M4 core @ 209 MHz, 3D GPU, DSI display interface and CAN FD
- STM32MP153: Dual Cortex-A7 cores, Cortex-M4 core @ 209 MHz and CAN FD
- STM32MP151: Single Cortex-A7 core, Cortex-M4 core @ 209 MHz
ST为STM32MP1平台提供的构建系统方案是Yocto,开发者可以根据自己的需求,实现最大化对系统的定制或设置功能。由于Yocto对编译主机的环境要求ubuntu1804版本,对开发者带来了一些麻烦:
- 开发系统需要Ubuntu1804版本,开发者需要安装虚拟机软件来为Yocto单独配置编译系统
- 使用Yocto构建系统的过程中会下载目标系统依赖的所有软件包,部分软件包下载失败,导致编译被卡在下载阶段
- 使用Yocto构建系统时,第一次构建会建立缓存,近5000多个软件包,花费的时间比较长
针对以上开发中带来的各种问题,我们提出了以下的解决方法:
- 使用Docker虚拟化软件,我们定制了容器的镜像,安装了必备的开发工具软件包。方便开发者在各类Linux系统下直接编译Yocto,降低对主系统的干扰
- 我们预先下载了ST Yocto构建中需要的软件包,存放在downloads目录下,大部分软件包并不需要修改,所以开发者直接使用即可,其他没有包含软件包的会继续下载,但也是少数部分了
- 我们把第一次编译的环境目录也打包出来,这样可以最大程度缩减编译时间
编译中需要的文件包
ST Yocto代码 https://tmp.link/f/6443af7c154d4
Docker的Ubuntu1804镜像 https://tmp.link/f/6443b204336ed
Yocto编译时的downloads目录 https://tmp.link/f/64425547d0f45
Yocto编译的缓存sstate-cache目录 https://tmp.link/f/6443adc02b65e
Docker编译Yocto步骤
导入ubuntu1804镜像
docker load -i i2som-ubuntu1804-yocto.tar.gz
准备Yocto代码和缓存目录
tar xvf stm32mp1-yocto-kirkstone-V4.1.0.tar.gz
tar xvf stm32mp1-yocto-kirkstone-dldir-V4.1.0.tar.gz -C stm32mp1-yocto-kirkstone-V4.1.0
tar xvf stm32mp1-yocto-kirkstone-sstatedir-V4.1.0.tar.gz -C stm32mp1-yocto-kirkstone-V4.1.0
ls stm32mp1-yocto-kirkstone-V4.1.0
downloads layers sstate-cache
初始化Yocto配置和配置Yocto缓存目录
DISTRO=openstlinux-weston MACHINE=stm32mp13-disco source layers/meta-st/scripts/envsetup.sh
vi conf/local.conf
DL_DIR ?= "${TOPDIR}/../downloads"
SSTATE_DIR ?= "${TOPDIR}/../sstate-cache"
CONNECTIVITY_CHECK_URIS = "http://www.baidu.com"
编译Yocto
bitbake st-image-weston
等待进度条跑完后,编译就完成了,tmp-glibc/deploy/images/stm32mp13-disco/目录下是编译好的镜像文件。