什么是符号链接?
简单来说,符号链接在Linux中就像Windows的“快捷方式”。它是一个特殊的文件,其内容是指向另一个文件或目录的路径。在ls -l命令下,它们通常会以 l 开头,并显示一个箭头指向目标,例如:link_name -> /path/to/original_directory。

Buildroot和Linux内核中的符号链接
在复杂的编译项目(如Buildroot和Linux内核)中,符号链接被广泛使用。例如,在Buildroot的output目录中,经常会有这样的结构:

output/build/linux-custom/source 可能是一个指向项目根目录下实际内核源代码的符号链接,比如 ../../linux-5.15.4。

或者存在一些指向父目录的链接,如 parent -> ..。

scp 的问题行为
当您使用 scp -r (递归复制) 来拉取整个目录时,scp 的默认行为是“跟随”符号链接。它不会把链接本身复制过来,而是会把链接指向的实际内容复制过来。

这就是导致无限循环的根源:

假设scp正在复制 /path/to/project/output/ 目录。

它遇到了一个符号链接 source,这个链接指向了上层目录 /path/to/project/。

scp 会跟随这个链接,开始复制 /path/to/project/ 的所有内容,并把它们放到本地的 .../project/output/source/ 目录下。

在这个新复制的目录里,它又会遇到 output/ 目录和里面的 source 链接,于是再次重复这个过程。 最终形成这样的无限嵌套结构,直到您的磁盘空间被占满或达到文件系统的其他限制。


使用 rsync (最推荐的专业方案)
rsync 是一个比 scp 更强大、更智能的文件同步工具,它能完美地处理符号链接。

rsync 默认不会跟随符号链接,而是将它们作为链接本身复制过来,这正是您所需要的。

-a: 归档模式,包含了 -l (保留链接) 等一系列常用参数
-v: 显示详细过程
-z: 压缩传输,提高效率
--progress: 显示传输进度
rsync -avz --progress <用户名>@<远程服务器IP>:/path/to/remote/project /path/to/your/local/directory

rsync -avz --progress ronz@192.168.6.23:/ws ./

1. setup env/download uboot
ronz@RonzLocalLinux:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.0.0.1        0.0.0.0         UG    0      0        0 enp3s0
default         192.168.88.1    0.0.0.0         UG    600    0        0 wlp2s0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 enp3s0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-059bee45ca2b
192.168.88.0    0.0.0.0         255.255.255.0   U     600    0        0 wlp2s0
192.168.88.1    0.0.0.0         255.255.255.255 UH    600    0        0 wlp2s0
ronz@RonzLocalLinux:~$  ping github.com
PING github.com (20.205.243.166) 56(84) bytes of data.
64 bytes from 20.205.243.166: icmp_seq=1 ttl=112 time=89.7 ms

ronz@RonzLocalLinux:/opt/V3s_WS$ sudo route add -net 20.205.243.0 netmask 255.255.255.0 gw 192.168.88.1 dev wlp2s0
[sudo] password for ronz: 
ronz@RonzLocalLinux:/opt/V3s_WS$ git clone https://github.com/u-boot/u-boot -b v2021.07
Cloning into 'u-boot'...
remote: Enumerating objects: 1072908, done.
remote: Counting objects: 100% (1055/1055), done.
remote: Compressing objects: 100% (412/412), done.
remote: Total 1072908 (delta 763), reused 643 (delta 643), pack-reused 1071853 (from 3)
Receiving objects: 100% (1072908/1072908), 294.41 MiB | 16.72 MiB/s, done.
Resolving deltas: 100% (853843/853843), done.

2. refer whycan
https://whycan.com/t_7248.html
patch -p1 < smallwitpi_lite_v3x_uboot_patch_for_202107.diff

3. build docker
vim Dockerfile

FROM ubuntu:20.04
RUN  apt update
RUN  apt install lib32ncurses5-dev -y
RUN  apt install libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi libncurses5-dev build-essential bison flex libssl-dev bc python device-tree-compiler -y
RUN  apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
RUN  apt install python3 python3-dev python3-distutils python3-pip -y
RUN  apt install swig -y
RUN  apt install wget cpio unzip rsync git -y



sudo docker build -t ronz0313/v3s-build-env .

sudo docker run  -v /opt/V3s_WS/:/ws -it ronz0313/v3s-build-env /bin/bash

root@0166703103ec:/# cd /ws/u-boot/
root@0166703103ec:/ws/u-boot# ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make smallwitpi_lite_v3s_ddr2_debug_uart0_pb8_pb9_defconfig 

//
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make menuconfig 
//
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make

https://github.com/jake5253/allwinner-livesuit

and

Download source code https://packages.ubuntu.com/xenial/libpng12-0

wget http://archive.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng_1.2.54.orig.tar.xz

tar xvf  libpng_1.2.54.orig.tar.xz 

cd libpng-1.2.54
./autogen.sh
./configure
make -j8 
sudo make install

then update the links with:

sudo ldconfig

prior to any of this assure your machine has these preliminary packages installed ... baseline for any dev kit