避坑指南:用米尔MYC-LD25X板子编译Yocto时,我遇到的几个“坑”及解决方法

张开发
2026/5/23 6:59:24 15 分钟阅读
避坑指南:用米尔MYC-LD25X板子编译Yocto时,我遇到的几个“坑”及解决方法
米尔MYC-LD25X开发板Yocto编译实战避坑指南与效率优化第一次接触米尔MYC-LD25X开发板时那种既兴奋又忐忑的心情至今记忆犹新。作为一款基于STM32MP257处理器的工业级开发平台它强大的双核Cortex-A35架构和丰富的接口资源让人跃跃欲试但随之而来的Yocto编译过程却给了我一个下马威——长达数小时的等待、莫名其妙的依赖错误、网络同步中断...这些坑几乎让我的开发热情消耗殆尽。1. 环境准备阶段的常见陷阱Ubuntu系统版本的选择往往被新手忽视但这恰恰是第一个大坑。我最初在Ubuntu 22.04 LTS上尝试编译结果在安装基础依赖库时就遇到了麻烦sudo apt-get install -y gawk wget git-core diffstat unzip texinfo gcc-multilib \ build-essential chrpath socat libsdl1.2-dev xterm sed cvs subversion \ coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc g \ desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf \ automake groff curl lzop asciidoc u-boot-tools cpio locales bc \ libncurses5-dev screen flex bison vim-tiny device-tree-compiler xvfb \ libgtk2.0-dev libssl-dev net-tools libyaml-dev rsync liblz4-tool zstd \ python3-pip git-lfs iputils-ping jq执行上述命令后系统提示多个包无法安装。经过排查发现部分库在Ubuntu 22.04中已被废弃或更名。解决方案有两种版本降级法改用官方推荐的Ubuntu 20.04 LTS替代方案对于无法安装的包手动添加PPA或从源码编译提示建议使用官方推荐的Ubuntu 20.04 LTS系统可减少90%的依赖问题磁盘空间是另一个容易被低估的问题。Yocto编译过程中会产生大量中间文件建议预留至少150GB空间。我曾遇到编译中途因磁盘空间不足而失败的情况检查方法df -h /path/to/yocto2. 源码获取与同步难题使用repo工具同步源码时网络问题是最常见的障碍。米尔官方的manifest仓库位于GitHub国内开发者可能会遇到连接超时或速度极慢的情况。我尝试过的几种解决方案镜像源替换修改repo的URL为国内镜像代理设置配置git的http.proxy需遵守相关规定分段同步使用--depth1参数减少数据量同步命令示例repo init -u https://github.com/MYiR-Dev/myir-st-manifest.git \ --no-clone-bundle --depth1 \ -m myir-stm32mp2-6.1.82-1.0.0.xml \ -b myd-ld25x-v24.06.26-mickledore同步过程中可能遇到的错误及解决方法错误类型现象描述解决方案连接超时长时间卡在Cloning阶段检查网络尝试更换DNS证书错误SSL证书验证失败更新CA证书包或临时禁用验证权限拒绝403 Forbidden错误检查SSH密钥配置3. 编译过程中的疑难杂症bitbake编译是整个过程中最耗时的环节也是最容易出问题的地方。以下是几个典型问题3.1 配方(recipe)失败编译过程中经常会在某个recipe处卡住并报错。例如ERROR: myir-image-full-1.0-r0 do_rootfs: Could not invoke dnf. Command /path/to/dnf failed with exit code 1这类问题通常是由于网络问题导致包下载失败本地配置与recipe不兼容依赖关系未正确解析解决方法分步骤查看详细日志确定具体失败原因cat tmp-glibc/work/myd-ld25x/myir-image-full/1.0-r0/temp/log.do_rootfs根据错误信息调整配置或手动下载缺失文件清理缓存后重新编译bitbake -c cleanall problematic-package bitbake myir-image-full -k3.2 编译速度优化默认配置下的编译速度令人抓狂。经过多次尝试我总结出以下加速技巧并行编译调整BB_NUMBER_THREADS和PARALLEL_MAKE参数export BB_NUMBER_THREADS$(nproc) export PARALLEL_MAKE-j $(nproc)禁用不必要的功能在local.conf中关闭文档生成等非必需任务INHIBIT_PACKAGE_STRIP 0 INHIBIT_PACKAGE_DEBUG_SPLIT 0使用预编译缓存共享sstate-cache目录优化前后时间对比优化措施全系统编译时间核心镜像编译时间默认配置6小时3小时并行编译4小时2小时全优化2.5小时1小时4. 烧录与启动问题排查编译成功后烧录阶段也可能遇到各种问题。米尔MYC-LD25X开发板支持多种启动方式最常用的是通过USB OTG烧录到eMMC。4.1 烧录工具配置烧录前需要确认拨码开关设置为0000烧录模式使用官方提供的STM32CubeProgrammer工具选择正确的flashlayout文件常见烧录错误USB连接不稳定尝试更换USB线或端口权限问题将用户加入plugdev组sudo usermod -a -G plugdev $USER镜像文件损坏重新生成镜像或检查编译日志4.2 启动失败分析烧录完成后将拨码开关设为0100eMMC启动通过串口查看启动日志。常见的启动问题包括uboot阶段卡住检查uboot环境变量和设备树内核panic确认内核配置与硬件匹配根文件系统挂载失败验证文件系统镜像完整性串口调试技巧screen /dev/ttyUSB0 115200启动日志中的关键信息点DRAM初始化内存检测是否正常设备树加载是否正确识别硬件文件系统挂载分区表是否匹配5. 实战经验与进阶技巧经过多次完整编译周期后我总结出一些提升效率的方法增量编译修改代码后只需重新编译特定组件bitbake package-name -c compile -f定制镜像移除不需要的包减小镜像体积IMAGE_INSTALL_remove unnecessary-package本地配方开发创建自己的layer添加定制功能bitbake-layers create-layer ../meta-custom bitbake-layers add-layer ../meta-custom开发板使用中的几个实用命令查看CPU信息cat /proc/cpuinfo监测温度cat /sys/class/thermal/thermal_zone*/temp测试NPU性能stm32mp257-npu-demo记得第一次成功启动Weston界面时的成就感所有的等待和排错都值得了。对于刚接触Yocto的开发者我的建议是保持耐心仔细阅读错误日志善用社区资源。每个坑都是进步的机会当系统最终按预期运行时那种掌控感是无与伦比的。

更多文章