【ZYNQ Linux开发】Petalinux编译u-boot报错:Task u-boot-xlnx_2020.1.bbdo_compile failed with exit code ‘1‘
1 问题描述
具体的报错如下:
ERROR: Task (/home/chj/peta_prj/linuxPsBase/petalinux/components/yocto/layers/meta-xilinx/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-xlnx_2020.1.bb:do_compile) failed with exit code ‘1’

这个 ERROR 通常表示在 u-boot 的编译过程中出现段错误(Segmentation Fault),即程序试图访问非法内存地址,导致崩溃。
2 具体解决方法
1,首先检查是不是内存或者硬盘空间不够,看虚拟机分配的资源够不够,建议内存分配16G,硬盘剩余15G以上。内存就看虚拟机配置分配的够不够,硬件在左下角应用里搜 disk,选择磁盘查看。

2,首先查看交叉编译器是否可用:
which arm-linux-gnueabihf-gcc
arm-linux-gnueabihf-gcc --version
如果有问题,需要安装工具链,这个一般如果安装了 Vivado 和 Vitis 后就不会有问题。
3,清理 petalinux 的编译结果重新尝试编译,在petalinux的工作目录下,执行以下命令:
petalinux-build -x mrproper –f
这里可能是 Petalinux 的 Bug,有时候后面加 -f,会弹出整个命令的使用方式,按照它的说明,使用:
petalinux-build -x mrproper
可能会成功,但有时它会说明工作目录已存在,让加 -f 参数,就很抽象!

4,检查 petalinux 的配置:
petalinux-config
按下图进行选择,查看 u-boot 与 kernel 的自动配置选项,如果打开了,尝试关闭,保存后重新编译。(我是原来勾选这两个选项可以正常编译,自己尝试用 petalinux 辅助移植 Linux 系统后不行了,不勾选后修复,应该是修改了其中的一些文件,但具体是什么有影响不知道了)


关闭这两个选项后,重新编译,就成功了。

后面查询了一下黑金的开发手册,这两个选项是老版本的 petalinux 会勾选的,新版本可能会因为这两个选项报错。
3 进一步的思考
虽然问题是解决了,但是,我们去掉的自动配置选项,究竟有什么用呢?查阅 Xilinx 相关文档获知:
3.1 u-boot autoconfig
如果勾选了 u-boot 的自动配置,PetaLinux 会根据 project-spec/meta-user/recipes-kernel/linux 下的配置片段(如 linux-xlnx_%.bbappend 或 fragment.cfg)自动更新内核配置(.config)。
在编译的时候,PetaLinux 会强制应用这些配置片段,覆盖任何手动修改的内核配置。
而不勾选的话,内核的 .config 文件不会被自动覆盖,我们通过以下命令:
petalinux-config -c u-boot
手动修改的配置会保留。
3.2 kernel autoconfig
与 u-boot 类似,PetaLinux 会根据 project-spec/meta-user/recipes-kernel/linux 下的配置片段(如 linux-xlnx_%.bbappend 或 fragment.cfg)自动更新内核配置(.config)。并且会强制应用这些配置片段,覆盖任何手动修改的内核配置。
而不勾选的话,内核的 .config 文件不会被自动覆盖,我们通过以下命令:
petalinux-config -c kernel
的配置才能够有效。
而我是在尝试自己移植内核前勾选这两个选项的,当时可以编译过,而现在不行了,回想起来,在uboot中,确实有修改相关的配置文件,导致后面报错了。
更多推荐
所有评论(0)