0


Yocto构建Linux系统镜像时,git下载出错/慢、常见问题的解决方案

4/26更新:
在更换URL后,出现GIT 下载LFS的一个文件出错

ERROR: cryptoauthlib-1.0+gitAUTOINC+b3fcd839ee-r0 do_unpack: Bitbake Fetcher Error: FetchError('Fetch command export PSEUDO_DISABLED=1; export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus,guid=c1303cfe07d692f2b61a84ab662af89d"; export SSH_AGENT_PID="2466"; export SSH_AUTH_SOCK="/run/user/1000/keyring/ssh"; export PATH="/home/hqyj/Sam9x60/gml/poky/build-microchip/tmp/sysroots-uninative/x86_64-linux/usr/bin:/home/hqyj/Sam9x60/gml/poky/scripts:/home/hqyj/Sam9x60/gml/poky/build-microchip/tmp/work/armv5e-poky-linux-gnueabi/cryptoauthlib/1.0+gitAUTOINC+b3fcd839ee-r0/recipe-sysroot-native/usr/bin/arm-poky-linux-gnueabi:/home/hqyj/Sam9x60/gml/poky/build-microchip/tmp/work/armv5e-poky-linux-gnueabi/cryptoauthlib/1.0+gitAUTOINC+b3fcd839ee-r0/recipe-sysroot/usr/bin/crossscripts:/home/hqyj/Sam9x60/gml/poky/build-microchip/tmp/work/armv5e-poky-linux-gnueabi/cryptoauthlib/1.0+gitAUTOINC+b3fcd839ee-r0/recipe-sysroot-native/usr/sbin:/home/hqyj/Sam9x60/gml/poky/build-microchip/tmp/work/armv5e-poky-linux-gnueabi/cryptoauthlib/1.0+gitAUTOINC+b3fcd839ee-r0/recipe-sysroot-native/usr/bin:/home/hqyj/Sam9x60/gml/poky/build-microchip/tmp/work/armv5e-poky-linux-gnueabi/cryptoauthlib/1.0+gitAUTOINC+b3fcd839ee-r0/recipe-sysroot-native/sbin:/home/hqyj/Sam9x60/gml/poky/build-microchip/tmp/work/armv5e-poky-linux-gnueabi/cryptoauthlib/1.0+gitAUTOINC+b3fcd839ee-r0/recipe-sysroot-native/bin:/home/hqyj/Sam9x60/gml/poky/bitbake/bin:/home/hqyj/Sam9x60/gml/poky/build-microchip/tmp/hosttools"; export HOME="/home/hqyj"; git -c core.fsyncobjectfiles=0 -c gc.autoDetach=false -c core.pager=cat checkout b3fcd839eec1cd63a695f541bbf5c5d6af2c96e3 failed with exit code 128, output:\nDownloading cryptoauthlib-manual.pdf (3.6 MB)\nError downloading object: cryptoauthlib-manual.pdf (5509c5b): Smudge error: Error downloading cryptoauthlib-manual.pdf (5509c5b1d9a739cf202c0d7b0c56bc464cb91a1cef151053fb615365665db5ee): Error transferring "5509c5b1d9a739cf202c0d7b0c56bc464cb91a1cef151053fb615365665db5ee": [0] remote missing object 5509c5b1d9a739cf202c0d7b0c56bc464cb91a1cef151053fb615365665db5ee\n\nErrors logged to /home/hqyj/Sam9x60/gml/poky/build-microchip/tmp/work/armv5e-poky-linux-gnueabi/cryptoauthlib/1.0+gitAUTOINC+b3fcd839ee-r0/git/.git/lfs/logs/20240426T011247.063650489.log\nUse `git lfs logs last` to view the log.\nerror: external filter \'git-lfs filter-process\' failed\nfatal: cryptoauthlib-manual.pdf: smudge filter lfs failed\n', None)
ERROR: Logfile of failure stored in: /home/hqyj/Sam9x60/gml/poky/build-microchip/tmp/work/armv5e-poky-linux-gnueabi/cryptoauthlib/1.0+gitAUTOINC+b3fcd839ee-r0/temp/log.do_unpack.15971
ERROR: Task (/home/hqyj/Sam9x60/gml/meta-atmel/recipes-security/cryptoauthlib/cryptoauthlib_git.bb:do_unpack) failed with exit code '1'

尝试重新上传等等方法失败了。后面将URL地址修改回原来的地址(我将git的地址修改为本地的地址了)就没报错了。应该是yocto在下载目录找到了仓库,就没有执行do_fetch步骤了。正确后通过,至于之前的LFS的问题,是有一个pdf文件无法通过lfs下载下来,具体出错原因不详。

问题的关键在于找到错误中,yocto期望创建的本地git仓库名。在出错信息里面有。一般为你构建目录下downloads下的git某个相关目录,找到它然后替换!

建议出错就重新执行。不要因为一两个包将整个下载进度卡住,重新下载时,可使用下面的方法下载易出错、下载慢的包。

以下是原回答:

如图,有时在使用git下载github上的相关内容时,时常会因为网络原因导致下载失败进而构建失败。由于我目前还没有找到通过方法让git通上主机的VPN。因此想的是一个笨办法来解决问题:手动通过配方文件的下载链接使用支持科学上网的下载工具下载,下载好后放入yocto的构建目录。

在构建目录的downloads下,会有git2和其他的压缩文件。其中,git2目录存放的是自github上拉取下来的裸仓库。downloads下存放的就是纯文件。

这里面包含了下载下来的所有包,很大。所以一定要预留足够的空间

那么这里就主要分为两种情况:

1、如果是下载的具体压缩文件,如xxx.tar.gz有直接的下载链接,那么只需要自己在主机下载好文件,放入构建目录的下的downloads文件夹即可。

2、如果拉取的是GitHub仓库,如拉取Linux的内核文件。拉取仓库十分大,我拉的有大概八个G。下载几乎百分百出错。看了配方文档,知道下载的是Linux-6.6-mchp。但是我不清楚把下载下来的文件以什么命名,放在哪儿合适(放在downloads下不对,后来知道其是下载裸仓库,然后检出Linux-6.6-mchp这个分支。)

那么:

如果错误信息中有下载链接,那么直接使用下载链接在windows下载加速即可

如果没有,下载的极其缓慢。我们可以去找相关的配方文件,下载对应的包。

比如这里的是linux-firmware-l_20230625文件,我们在poky的上层目录搜索相关的bb文件。

找到并查看SRC得知

  • ${KERNELORG_MIRROR}: 通常这个变量在 Yocto 的配置文件或者环境变量中定义,常见的值可能是 https://kernel.org/pub。

  • ${BPN}: 这是 BitBake 的包名变量,对于 linux-firmware,这个值应该就是 linux-firmware。

  • ${PV}: 这是包的版本,版本应该是 20230625。

得到下载链接:https://kernel.org/pub/linux/kernel/firmware/linux-firmware-20230625.tar.xz

这是一个示例,时候遇到那种极个别的下载缓慢的包可这样操作。

    获取链接后去主机使用**恰当的方法**加速下载相关裸仓库(我这里使用的github desktop)将其在widows下的**.git**的裸仓库复制到Linux下的downloads/git2下的相关目录。分三种情况:
     如果你在错误信息内找到了要下载回来的目标仓库名,却在downloads的git2下没找到该文件夹,就直接将windows下的.git文件复制,创建对应的仓库文件夹,将刚才复制的文件粘贴在此文件夹内。

    如果git2已经有了仓库文件,就替换其git2内的相关文件。

    如果是tar文件,就下载tar文件放在downloads目录即可。

    可以看到已经跳过do_fetch步骤开始下一步了。

至此应该能解决问题,如果还是失败,接着尝试下面的方法:

修改配方文件,将远程仓库链接改为本地链接

并且需要去找到对应的配方文件并修改(在错误报告中就有路径,配方文件为bb后缀)。

这里我就修改了git路径。成功解决了问题。

另外在do_install的时候,出现了删除一个文件,但文件不存在报的警告,却中止了整个install进程。于是准备一步一步看其删除指令的配方脚本文件。

rm: cannot remove '/home/hqyj/Sam9x60/gml/poky/build-microchip/tmp/work/sam9x60_curiosity-poky-linux-gnueabi/linux-mchp/6.6+gitAUTOINC+468020704f-r0/image/lib/modules/6.6.23-linux4microchip-2024.04-rc1+/source': No such file or directory
WARNING: exit code 1 from a shell command.

最后通过依赖关系在kernel.bbclass内找到了相关的代码,将其修改为查询目录是否存在,存在再删除。

kernel_do_install() {
    #
    # First install the modules
    #
    unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
    if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
        oe_runmake DEPMOD=echo MODLIB=${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION} INSTALL_FW_PATH=${D}${nonarch_base_libdir}/firmware modules_install
        rm "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/build"
        rm "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/source"
        # Remove empty module directories to prevent QA issues
        find "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel" -type d -empty -delete
    else
        bbnote "no modules to install"
    fi

    #
    # Install various kernel output (zImage, map file, config, module support files)
    #
    install -d ${D}/${KERNEL_IMAGEDEST}

    #
    # When including an initramfs bundle inside a FIT image, the fitImage is created after the install task
    # by do_assemble_fitimage_initramfs.
    # This happens after the generation of the initramfs bundle (done by do_bundle_initramfs).
    # So, at the level of the install task we should not try to install the fitImage. fitImage is still not
    # generated yet.
    # After the generation of the fitImage, the deploy task copies the fitImage from the build directory to
    # the deploy folder.
    #

    for imageType in ${KERNEL_IMAGETYPES} ; do
        if [ $imageType != "fitImage" ] || [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ] ; then
            install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType ${D}/${KERNEL_IMAGEDEST}/$imageType-${KERNEL_VERSION}
        fi
    done
 修改为:

使用相关bitback命令清除状态然后重新构建对应内容即可。

还有一个常见的问题,由于设备的硬件条件,编译的时候因为rom/ram不足会导致的一系列问题:
如下面的错误日志的报错:

  File "/home/hqyj/Sam9x60/gml/poky/build-microchip-headless-imagep/tmp/work/x86_64-linux/rust-native/1.59.0-r0/rustc-1.59.0-src/src/bootstrap/bootstrap.py", line 182, in run
    raise RuntimeError(err)
RuntimeError: failed to run: /home/hqyj/Sam9x60/gml/poky/build-microchip-headless-imagep/tmp/work/x86_64-linux/rust-native/1.59.0-r0/rustc-1.59.0-src/build/bootstrap/debug/bootstrap -j 8 build --stage 2 --verbose
WARNING: exit code 1 from a shell command.

可以尝试对出错的部分单独先bitback clean后再单独bitback。会解决很多问题

如果在使用yocto时有比较好的Linux下的git加速方法,还希望有老哥能提点一下

标签: linux git

本文转载自: https://blog.csdn.net/qq_53090814/article/details/138188495
版权归原作者 拒绝摆烂! 所有, 如有侵权,请联系我们删除。

“Yocto构建Linux系统镜像时,git下载出错/慢、常见问题的解决方案”的评论:

还没有评论