MYD-Y6ULX-HMI系列开发板U-Boot编译失败问题求助
MYD-Y6ULX-HMI开发板U-Boot编译故障排查
基础环境信息
- 硬件:搭载Linux Kernel 4.1.15的MYD-Y6ULX-HMI系列开发板,所用核心板型号为MYC-Y6ULY2-356N256D-50-C,板卡配套软硬件资源齐全,官方推荐使用Ubuntu 16.04 64位版本作为开发环境
- 已完成的环境部署操作:
- 在VirtualBox虚拟机中完成Ubuntu 16.04 64位系统安装
- 安装编译所需的全部依赖软件包,在根目录创建专属工作目录
- 安装gcc 5.3.0版本、面向驱动开发的Yocto metaToolchain,安装完成后执行命令加载环境:
source /opt/myir-imx6ulx-fb/4.1.15-2.0.1/environment-setup-cortexa7hf-neon-poky-linux-gnueabi - 执行版本校验命令,确认工具链可正常调用:
arm-poky-linux-gnueabi-gcc --version
故障现象
U-Boot配置阶段可正常生成配置文件,但编译阶段始终报错无法完成,执行的操作流程如下:
- 普通用户权限下加载metaToolChain环境
- 进入U-Boot源码目录
- 执行
sudo make distclean清理历史编译产物 - 手动导出
CROSS_COMPILE、ARCH相关环境变量 - 执行
sudo make启动编译,编译失败 - 再次执行
sudo make仍无法完成编译
故障原因
编译全程加sudo提权是报错的核心原因:
- 不管是source加载的工具链环境变量,还是手动导出的交叉编译参数,都只在当前普通用户的会话中生效。一旦加
sudo切换到root身份执行命令,系统会重置所有环境变量,编译脚本无法找到交叉编译器路径、匹配不到对应编译参数,就会报错中断 - 前期执行
sudo make distclean会把源码目录下所有文件的属主改成root,后续就算不用sudo操作,也会因为权限不足无法读写文件,触发异常
解决步骤
- 先修复源码目录权限,进入U-Boot源码所在的上级目录,执行命令把整个源码目录的权限改回当前登录的普通用户:
sudo chown -R $USER:$USER 替换为你的U-Boot源码文件夹名称
- 不带sudo执行清理命令,删除之前异常生成的编译缓存和产物:
make distclean
- 重新加载Yocto工具链环境,执行对应核心板型号的U-Boot配置指令
- 直接执行编译命令即可,全程不要加sudo:
make -j$(nproc)
注:如果习惯手动指定架构和交叉编译器前缀,直接在当前普通用户会话下导出ARCH=arm、CROSS_COMPILE=arm-poky-linux-gnueabi-即可,不需要提权操作。
内容的提问来源于stack exchange,提问作者maha
相关产品推荐
相关产品推荐

