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_%.bbappendfragment.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_%.bbappendfragment.cfg)自动更新内核配置(.config)。并且会强制应用这些配置片段,覆盖任何手动修改的内核配置。

       而不勾选的话,内核的 .config 文件不会被自动覆盖,我们通过以下命令:

 petalinux-config -c kernel 

       的配置才能够有效。


​       而我是在尝试自己移植内核前勾选这两个选项的,当时可以编译过,而现在不行了,回想起来,在uboot中,确实有修改相关的配置文件,导致后面报错了。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐