全志V3S零基础教程

U-boot编译

环境配置

先换源,避免后续的下载速度太慢

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8kePUcWN-1671702397481)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222133921325.png)]

执行 sudo apt-get update

下载一个vim,等下方便修改

sudo apt-get install vim

进入vi配置文件 sudo vi /etc/vim/vimrc

在配置文件设置行距为4并且打开行号

vim的使用这里步做过多讲解,自行百度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2AFN5uO-1671702397482)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222140410003.png)]

进入正题,配置交叉环境,安装gcc编译器,本教程使用的是6.3.1版本

先cd /opt文件里面

执行 : sudo wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz

如果出现安全证书过期,请换成http进行下载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NHiZiLDx-1671702397482)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222140955530.png)]

解压交叉编译器 sudo tar xvf gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz

完成 ls 查看一下文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5px2qI2m-1671702397484)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222141337823.png)]

添加交叉编译器路径 修改profile文件

sudo vim /etc/profile

再最后一行加入export PATH=命令行路径:$PATH

如:export PATH=/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin:$PATH

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YRDDk4MJ-1671702397484)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222141443552.png)]

保存退出后运行source /etc/profile 生效

或者重启系统生效

备注:如果需要查看路径,终端运行 echo $PATH。 Ubuntu几种路径添加方式对比:(11条消息) ubuntu添加环境变量的四种方法_K_K_yl的博客-CSDN博客_ubuntu添加环境变量

查看编译器是否安装成功,终端运行arm-linux-gnueabihf-gcc -v

成功会返回如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LBCmpWDh-1671702397485)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222141719412.png)]

将终端退出重新打开一下 安装设备树编译器

终端输入sudo apt-get install device-tree-compiler

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qjUwVhby-1671702397486)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222141937440.png)]

下载Uboot

安装git,终端输入sudo apt-get install git

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YgMGbctU-1671702397487)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222142118582.png)]

拷贝Uboot到Ubuntu下,终端输入 sudo git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-spi-experimental

克隆失败,重新克隆可以解决

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6MhiZBfv-1671702397487)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222143509185.png)]

下载完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQq9w7nn-1671702397488)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222143601433.png)]

进入u-boot

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z3biAZFE-1671702397488)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222143719278.png)]

uboot目录结构

├── api 存放uboot提供的API接口函数

├── arch 平台相关的部分我们只需要关心这个目录下的ARM文件夹

│ ├──arm

│ │ └──cpu

│ │ │ └──armv7

│ │ └──dts

│ │ │ └──*.dts 存放设备的dts,也就是设备配置相关的引脚信息

├── board 对于不同的平台的开发板对应的代码

├── cmd 顾名思义,大部分的命令的实现都在这个文件夹下面。

├── common 公共的代码

├── configs 各个板子的对应的配置文件都在里面,我们的Lichee配置也在里面

├── disk 对磁盘的一些操作都在这个文件夹里面,例如分区等。

├── doc 参考文档,这里面有很多跟平台等相关的使用文档。

├── drivers 各式各样的驱动文件都在这里面

├── dts 一种树形结构(device tree)这个应该是uboot新的语法

├── examples 官方给出的一些样例程序

├── fs 文件系统,uboot会用到的一些文件系统

├── include 头文件,所有的头文件都在这个文件夹下面

├── lib 一些常用的库文件在这个文件夹下面

├── Licenses 这个其实跟编译无关了,就是一些license的声明

├── net 网络相关的,需要用的小型网络协议栈

├── post 上电自检程序

├── scripts 编译脚本和Makefile文件

├── spl second program loader,即相当于二级uboot启动。

├── test 小型的单元测试程序。

└── tools 里面有很多uboot常用的工具。

安装make 终端输入 sudo apt-get install make

设置参数

sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig

#or sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero480x272LCD_defconfig

#or sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_defconfig

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YutrTdFQ-1671702397489)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222143840865.png)]

安装libncurses5-dev,终端输入sudo apt-get install libncurses5-dev解决

uboot配置命令

终端输入 sudo make menuconfig

此时会跳出以下配置界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CdmhG9HI-1671702397489)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222144042998.png)]

—按回车,即选择当前菜单

------- 按Y 代表该config选项选中

------- 按N 代表不选中该选项

-------- 按M

代表该驱动编译成**.ko的方式,在系统起来之后,当驱动需要的时候加载---------按/ 可以查找某个选项---------退出<** > ----------按Y选中后的状态

这里面有几个常见的配置选项我们可以看下:

  1. 第一个Architecture select架构选择,不用质疑这个是ARM架构
  2. 第二个ARM architecture

这个选项比较重要,主要配置ARM框架下的常用的配置函数以及LCD等参数

DDR配置

选择这个,进入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ULtxp8YZ-1671702397490)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222144552438.png)]

再进这个

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z4TTA43P-1671702397490)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222144704345.png)]

···
Target select (Support sunxi (Allwinner) SoCs)   #进去之后可以选择sunxi Soc系列芯片
···
[*] Sunxi SoC Variant    # 这个就是对芯片Soc 的选择,我们可以看到配置选择了`sun8i (Allwinner V3s)
(360) sunxi dram clock speed     # 配置dram的时钟速率
(14779) sunxi dram zq value     #  配置dram的ZQ值,是用来动态加强DDR3的
-*- Board uses DDR2 DRAM     #   使用DDR2 DRAM

时钟频率配置#

Boot images --->(1008000000) CPU clock frequency

这里设置了CPU的时钟频率

开机延时设置#

delay in seconds before automatically booting

这个是uboot开机的时候的一个等待时间的秒数,可以改大一点,默认是2s

SPL配置

SPL / TPL ---> 这个就是SPL相关的配置了
[*]   MMC raw mode: by sector                       按扇区      
(0x50)  Address on the MMC to load U-Boot from  mmc加载uboot的地址
[*] Support GPIO                                 支持GPIO
[ ] Support I2C                                 支持I2C
[*] Support common libraries                    支持通用lib
[*] Support disk paritions                      支持分区
[*] Support generic libraries                   支持一般lib库
[*] Support MMC                                 支持MMC
[*] Support power drivers                  支持电源驱动
[*] Support serial                               支持串口

spi lcd及串口输出配置

修改include/configs/sun8i.h 使uboot从tf卡启动

不需要LCD的在sun8i.h中加入以下

#define CONFIG_BOOTCOMMAND   "setenv bootm_boot_mode sec; " 
  						   "load mmc 0:1 0x41000000 zImage; "  
​                            "load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb; " 
​                            "bootz 0x41000000 - 0x41800000;"
\#define CONFIG_BOOTARGS     "console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw  vt.global_cursor_default=0"

需要LCD显示的在sun8i.h中加入以下

#define CONFIG_BOOTCOMMAND   "setenv bootm_boot_mode sec; " \
 						   "load mmc 0:1 0x41000000 zImage; " \
 						   "load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb; " \
   						   "bootz 0x41000000 - 0x41800000;"
#define CONFIG_BOOTARGS     "console=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw  vt.global_cursor_default=0"

备注:因为我们需要使用lcd显示跟串口同时输出,所以使用第二种加入后如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TSi4OeXE-1671702397491)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222152559579.png)]

执行编译

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

编译成功后可以uboot目录发现多出了个u-boot-sunxi-with-spl.bin

如果权限不够,可以给这个文件夹最高权限

sudo chmod -R 777 u-boot

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rDBCRms4-1671702397491)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222145552096.png)]

编译成功后可以uboot目录发现多出了个u-boot-sunxi-with-spl.bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-spUHeiFN-1671702397492)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222145725511.png)]

然后需要将SD卡格式化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-maZl4WS0-1671702397492)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222150022226.png)]

分区需要在Ubuntu进行,先安装软件

sudo apt-get install gparted

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IChfZViE-1671702397492)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222150358845.png)]

打开查看SD卡是sdb

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c9Le28mz-1671702397493)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222150522431.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5QdDqrJ4-1671702397493)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222150615422.png)]

右键删除fat32

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LewPI8rw-1671702397493)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222150653244.png)]

分区一(boot分区)设置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X2pRRjSe-1671702397494)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222150800454.png)]

分区二(rootfs分区)设置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0F32fFk5-1671702397494)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222150922804.png)]

最终得到

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bumrkAmE-1671702397495)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222150948118.png)]

点一下勾勾完成,耐心等待

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-65UOg7yS-1671702397495)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222151053492.png)]

完成后拔插一下这样就分区成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UL5MKlSj-1671702397495)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222151649448.png)]

烧录到SD卡的8k偏移处

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CHzDCRZ0-1671702397496)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222151754828.png)]

Kernel编译

1、安装依赖#

sudo apt install git wget make gcc flex bison libssl-dev bc kmod

2、下载Linux源码

git clone -b zero-5.2.y --depth 1 https://github.com/Lichee-Pi/linux.git

3、编译源码

修改Makefile文件

cd linux

vim Makefile

[364]行 修改为ARCH            = arm
[365]行 添加 CROSS_COMPILE    = arm-linux-gnueabihf-
[366]行 添加 INSTALL_MOD_PATH = out

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EdezJh36-1671702397496)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222153818396.png)]

修改参数:添加LCD st7789

终端输入make menuconfig

按如下箭头操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YIGcWGy2-1671702397496)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222154028343.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ln4degAn-1671702397497)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222154127942.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o5yf6ZbA-1671702397497)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222154345883.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cAigIgtG-1671702397497)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222154357342.png)]

然后选Save并退出

要使用lcd要在设备树上做一些修改

1、sun8i-v3s.dtsi中注释掉自带的视频输出

终端输入vim arch/arm/boot/dts/sun8i-v3s.dtsi

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sz8RnPCn-1671702397498)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222154610958.png)]

在sun8i-v3s-licheepi-zero-dock.dts增加屏幕驱动节点并注释掉i2c0

&spi0 {
status = "okay";
st7789v: st7789v@0{
compatible        = "sitronix,st7789v";
reg               = <0>;
status            = "okay";
spi-max-frequency = <36000000>;
spi-cpol;
spi-cpha;
rotate            = <0>;
fps               = <60>;
buswidth          = <8>;
rgb;
dc-gpios          = <&pio 1 5 GPIO_ACTIVE_HIGH>; //PB5
reset-gpios       = <&pio 1 6 GPIO_ACTIVE_HIGH>; //PB6
width             = <240>;
height            = <320>;
debug             = <0>;
};
};

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KkO65RwD-1671702397498)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222155357758.png)]

单独编译设备树

终端输入make dtbs

make licheepi_zero_defconfig
make menuconfig   #一般不用修改,需要时单独改
make -j16
make  -j16 modules #编译模块
make -j16 modules_install #安装模块
make dtbs #编译设备树

编译完成后,zImage在arch/arm/boot/下,驱动模块在out/lib下,设备树在arch/arm/boot/dts下。

然后把zImage,sun8i-v3s-licheepi-zero-dock.dtb放到第一分区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-53Wu6Hm2-1671702397498)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222160127997.png)]

此时插卡上电串口有信息输出,但是没有根文件系统进不去

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3cVZ2DD4-1671702397499)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222160331175.png)]

licheepi buildroot根文件系统

首先安装一些依赖,比如linux头文件:

apt-get install linux-headers-$(uname -r)
apt-get install libncurses5-dev
apt-get install wget
apt-get install gcc automake autoconf libtool make

然后下载安装解压:

wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz
tar xvf buildroot-2017.08.tar.gz
cd buildroot-2017.08/
make menuconfig

ubootroot的目录结构

.
├── arch: #存放CPU架构相关的配置脚本,如arm/mips/x86,这些CPU相关的配置,在制作工具链时,编译uboot和kernel时很关键.
├── board
├── boot
├── CHANGES
├── Config.in
├── Config.in.legacy
├── configs: #放置开发板的一些配置参数. 
├── COPYING
├── DEVELOPERS
├── dl: #存放下载的源代码及应用软件的压缩包. 
├── docs: #存放相关的参考文档. 
├── fs: #放各种文件系统的源代码. 
├── linux: #存放着Linux kernel的自动构建脚本. 
├── Makefile
├── Makefile.legacy
├── output: #是编译出来的输出文件夹. 
│   ├── build: #存放解压后的各种软件包编译完成后的现场.
│   ├── host: #存放着制作好的编译工具链,如gcc、arm-linux-gcc等工具.
│   ├── images: #存放着编译好的uboot.bin, zImage, rootfs等镜像文件,可烧写到板子里, 让linux系统跑起来.
│   ├── staging
│   └── target: #用来制作rootfs文件系统,里面放着Linux系统基本的目录结构,以及编译好的应用库和bin可执行文件. (buildroot根据用户配置把.ko .so .bin文件安装到对应的目录下去,根据用户的配置安装指定位置)
├── package:#下面放着应用软件的配置文件,每个应用软件的配置文件有Config.in和soft_name.mk。
├── README
├── support
├── system
├── toolchain
└── utils               # 实用工具

使用make config进入配置界面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PjquXUS0-1671702397499)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222161008461.png)]

选中Target options以选择licheepi对应的架构

​ licheepi用的v3s cpu 参数如下

CPU
ARM Cortex A7 @ 1.2GHz
Support NEON Advanced SIMD instruction
VFPv4 Floating Point Unit

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EQSmOEtx-1671702397499)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222161552331.png)]

Toolchain 配置交叉工具链

​ 配置成外部工具链

Toolchain type (External toolchain)  --->
x   ( ) Buildroot toolchain
x   (X) External toolchain

在u-boot时已经配置好外部工具,地址在

/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/

选中() Toolchain path (NEW),填入path

Toolchain prefix前缀是: arm-linux-gnueabihf

External toolchain gcc version:我们使用的是6.3版本,选中6.x

External toolchain kernel headers series:是在
arm-linux-gnueabihf/libc/usr/include/linux/version.h
里读取内核版本信息。本机的版本是4.6(263680=0x040600, 即4.6.0)

cat /opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/linux/version.h 
#define LINUX_VERSION_CODE 263680

External toolchain C library还是选择传统的glibc。需要小体积可以选uclibc(需要自行编译安装)。然后勾选上 [] Toolchain has C++ support?

最终配置

System configuration 配置系统参数
在这里插入图片描述

  • System hostname:根据需要定义一个字符串,是控制台前面的提示符xxx@vsi,这里改为 (licheepi) System hostname
  • Init system:这里选择busybox,轻量级使用非常广泛。可选的有systemV,systemd.
  • Root password配置登录密码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J53bilRy-1671702397500)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222162659894.png)]

Target package

用于配置一些软件包,例如QT5

Target packages  --->
x  Graphic libraries and applications (graphic/text)  --->
xx   [*] Qt5  ---> 

配置完成退出保存,安装环境

sudo apt-get install g++ patch cpio python unzip rsync bc

编译

make

如果报错,make clean all一下重新编译,这里一定要注意gcc的路径,不然会过不去

编译完成后会在output/images下生成rootfs.tar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ecl9P2Y-1671702397501)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222164018959.png)]

解压到第二分区后就能使用了

我喜欢直接拖动文件,启动超级文件权限

sudo nautilus

将子文件全部拖出来,不然还是会进不去系统

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vi68d1uS-1671702397501)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222164337575.png)]

默认失能串口登录,需要修改 /etc/inittab :

#console::respawn:/sbin/getty -L  console 0 vt100 # GENERIC_SERIAL
ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GE

如果需要免密码登录,直接

#console::respawn:/sbin/getty -L  console 0 vt100 # GENERIC_SERIAL
ttyS0::respawn:/bin/sh


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ub0V3Jl5-1671702397501)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222164532675.png)]

插卡,完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SUcaVvSV-1671702397502)(C:\Users\wlh\AppData\Roaming\Typora\typora-user-images\image-20221222174114450.png)]

  • 8
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序小吴2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值