嗷~~~润

前言

由于 Orin 的 数据手册, 参考手册, 载板原理图, Pinmux 等文档, 还有Jetpack 5.0 开发者预览版都出来了, 所以是可以着手进行开发或者测试的:

  • JETPACK SDK 5.0 DEVELOPER PREVIEW, https://developer.nvidia.com/jetpack-sdk-50dp
  • Jetson Download Center, https://developer.nvidia.com/embedded/downloads

开机设置

插上原装 90W TypeC电源, DP口接上显示器, 鼠标键盘, 按开机键配置, 用户名这里填上: orin

USB Type C联网

祖传的 192.168.55.1 口, 插上盒子里附赠的USB Type C线, 参考 README-usb-dev-mode.txt, 可以把PC的Ubuntu20的网络通过USB共享给Orin:

# PC
$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.65.128  netmask 255.255.255.0  broadcast 192.168.65.255

$ sudo su
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ iptables -t nat -A POSTROUTING -o ens33 -j SNAT --to 192.168.65.128

$ ssh orin@192.168.55.1
$ ping www.baidu.com

也可以用手机USB共享网络给Orin, 有线联网, WiFi联网等.

10G以太网口静态IP设置

天道好轮回, netplan 绕过谁, 这个eth0的静态IP(192.168.6.250)反而坑了不少时间…

$ sudo apt install -y netplan.io

$ sudo vi /etc/netplan/01-network-manager-all.yaml 
network:
    version: 2
    renderer: networkd
    ethernets:
        eth0:
            addresses:
                - 192.168.6.250/24
            gateway4: 192.168.6.1
            nameservers:
                addresses: [114.114.114.114, 8.8.8.8]

$ sudo netplan generate
$ sudo netplan apply

apt 和 pypi 清华源

ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

$ sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
# 这里 ubuntu 改为 ubuntu-ports
$ sudo vi /etc/apt/sources.list
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse

$ sudo apt update

pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

# 安装pip
$ sudo apt install -y python3-pip
# 升级pip
$ python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
# pypi 设清华源为默认
$ python3 -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

小版本系统升级

# r34.0 => r34.1
# $ sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list 
# deb https://repo.download.nvidia.com/jetson/common r34.1 main
# deb https://repo.download.nvidia.com/jetson/t234 r34.1 main

$ sudo apt -y dist-upgrade

CPU CoreMark – Orin vs Xavier vs TX2 vs RP4

人们对CPU的性能渴望可能更甚于GPU, 很多自动驾驶公司拿两块Xavier跑都欲求不满, 那Orin的CPU又能好多少呢?
电源足够, nvpmodel设置不限制功耗, 上 CoreMark 1.0 跑分对比

OrinXavierTX2Raspberry Pi 4
Model B Rev 1.4(2.0GHz)
CPU onlineCortex-A78AE * 12Carmel * 8Coretex-A57 * 4
(还有Denver 2, D15 * 2 挂名不出力)
Cortex-A72 * 4
单核CoreMark19990195009900
多核CoreMark2241731500003851544074
CoreMark/MHz9.088.64.97

Orin单核的主频降了一点, 但是还是和Xavier单核打平, 由于多了4个CPU核, CPU性能比Xavier算涨了50%吧.

过程:

# 原装 90W TypeC 电源适配器
# 不限制功耗
$ sudo nvpmodel -m 0

$ git clone https://github.com/eembc/coremark.git
$ cd coremark

$ mkdir orin && cp linux/* orin
$ vi orin/core_portme.mak
include posix/core_portme.mak
CC = aarch64-linux-gnu-gcc
XCFLAGS="other flags"
LFLAGS_END += -lpthread

# 单核跑分 19990
$ make PORT_DIR=orin XCFLAGS="-DMULTITHREAD=1 -DUSE_PTHREAD"
$ cat run1.log 
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 15007
Total time (secs): 15.007000
Iterations/Sec   : 19990.671020
Iterations       : 300000
Compiler version : GCC9.4.0
Compiler flags   : -O2 -DMULTITHREAD=1 -DUSE_PTHREAD -DPERFORMANCE_RUN=1  -lrt -lpthread
Memory location  : Please put data memory location here
                        (e.g. code in flash, data on heap etc)
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0xcc42
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 19990.671020 / GCC9.4.0 -O2 -DMULTITHREAD=1 -DUSE_PTHREAD -DPERFORMANCE_RUN=1  -lrt -lpthread / Heap

# 多核跑分 224173
$ make clean
$ make PORT_DIR=orin XCFLAGS="-DMULTITHREAD=12 -DUSE_PTHREAD"
$ cat run1.log 
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 16059
Total time (secs): 16.059000
Iterations/Sec   : 224173.360732
Iterations       : 3600000
Compiler version : GCC9.4.0
Compiler flags   : -O2 -DMULTITHREAD=12 -DUSE_PTHREAD -DPERFORMANCE_RUN=1  -lrt -lpthread
Parallel PThreads : 12
Memory location  : Please put data memory location here
                        (e.g. code in flash, data on heap etc)
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[1]crclist       : 0xe714
[2]crclist       : 0xe714
[3]crclist       : 0xe714
[4]crclist       : 0xe714
[5]crclist       : 0xe714
[6]crclist       : 0xe714
[7]crclist       : 0xe714
[8]crclist       : 0xe714
[9]crclist       : 0xe714
[10]crclist       : 0xe714
[11]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[1]crcmatrix     : 0x1fd7
[2]crcmatrix     : 0x1fd7
[3]crcmatrix     : 0x1fd7
[4]crcmatrix     : 0x1fd7
[5]crcmatrix     : 0x1fd7
[6]crcmatrix     : 0x1fd7
[7]crcmatrix     : 0x1fd7
[8]crcmatrix     : 0x1fd7
[9]crcmatrix     : 0x1fd7
[10]crcmatrix     : 0x1fd7
[11]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[1]crcstate      : 0x8e3a
[2]crcstate      : 0x8e3a
[3]crcstate      : 0x8e3a
[4]crcstate      : 0x8e3a
[5]crcstate      : 0x8e3a
[6]crcstate      : 0x8e3a
[7]crcstate      : 0x8e3a
[8]crcstate      : 0x8e3a
[9]crcstate      : 0x8e3a
[10]crcstate      : 0x8e3a
[11]crcstate      : 0x8e3a
[0]crcfinal      : 0xcc42
[1]crcfinal      : 0xcc42
[2]crcfinal      : 0xcc42
[3]crcfinal      : 0xcc42
[4]crcfinal      : 0xcc42
[5]crcfinal      : 0xcc42
[6]crcfinal      : 0xcc42
[7]crcfinal      : 0xcc42
[8]crcfinal      : 0xcc42
[9]crcfinal      : 0xcc42
[10]crcfinal      : 0xcc42
[11]crcfinal      : 0xcc42
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 224173.360732 / GCC9.4.0 -O2 -DMULTITHREAD=12 -DUSE_PTHREAD -DPERFORMANCE_RUN=1  -lrt -lpthread / Heap / 12:PThreads

# 有一次是 225946

EMMC 测速 – Xavier EMMC/UFS vs Orin

对比如下

测试项目Xavier EMMC (32GB)Xavier EMMC1 (128GB)Xavier UFS HS G3 (1 lane, 256GB)Orin
EMMC (64GB)
1.5GB 写入1.3 GB/s1.3 GB/s1.1GB/s856 MB/s
7.6GB 写入329 MB/s203 MB/s860 MB/s399 MB/s
46GB 写入76 MB/s538 MB/s21.3 MB/s
46GB 读取88 MB/s523 MB/s108 MB/s
46GB 读取 + 46GB 写入41.5 MB/s157 MB/s

说明:

  • 小容量(2GB以下)的速度其实算是和内存缓存交互的速度, 算不得磁盘的真实性能, 很多较老的 SSD 2G缓存写爆后瞬间变身 SD 卡读写速度
  • 数据量是随便选的
  • Orin 测试46GB写入后, 只有2GB空间了, 大概触犯了 Swap, 让CPU很为难才导致性能暴跌吧
  • 经常碰到有意思的问题, 比如想看看哪里出了问题, 就录个包, 动辄几个G甚至几十G, 结果越录效果越差, 系统甚至都罢工了
  • 其实还是建议录包的时候直接搞一条商业级的 980 NVME SSD 或者 PCIe 4.0 的 980 pro, 2~7TB/s的读写速度不香么

简单粗暴的测试过程:

#############################################################
$ time dd if=/dev/zero of=./ssd_speed_test bs=8k count=200000
200000+0 records in
200000+0 records out
1638400000 bytes (1.6 GB, 1.5 GiB) copied, 1.9134 s, 856 MB/s

real    0m1.932s
user    0m0.032s
sys     0m1.880s
$ rm -f ssd_speed_test

#############################################################
$ time dd if=/dev/zero of=./ssd_speed_test bs=8k count=1000000
1000000+0 records in
1000000+0 records out
8192000000 bytes (8.2 GB, 7.6 GiB) copied, 20.5165 s, 399 MB/s

real    0m20.520s
user    0m0.185s
sys     0m12.876s
$ rm -f ssd_speed_test

#############################################################
$ time dd if=/dev/zero of=./ssd_speed_test bs=8k count=6000000
6000000+0 records in
6000000+0 records out
49152000000 bytes (49 GB, 46 GiB) copied, 2310.54 s, 21.3 MB/s

real    38m30.540s
user    0m2.705s
sys     2m39.373s

$ time dd if=./ssd_speed_test of=/dev/null bs=8k count=6000000
6000000+0 records in
6000000+0 records out
49152000000 bytes (49 GB, 46 GiB) copied, 454.229 s, 108 MB/s

real    7m34.881s
user    0m2.445s
sys     0m58.888s

$ df -HT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/mmcblk0p1 ext4       61G   56G  2.7G  96% /
none           devtmpfs   16G     0   16G   0% /dev
tmpfs          tmpfs      17G   54k   17G   1% /dev/shm
tmpfs          tmpfs     3.3G   28M  3.2G   1% /run
tmpfs          tmpfs     5.3M  4.1k  5.3M   1% /run/lock
tmpfs          tmpfs      17G     0   17G   0% /sys/fs/cgroup
tmpfs          tmpfs     3.3G  8.2k  3.3G   1% /run/user/1000
tmpfs          tmpfs     3.3G   17k  3.3G   1% /run/user/124

$ rm -f ssd_speed_test

grabserial 开机时间测试

连上Orin的MicroUSB

Windows上显示四个串口虚拟出来四个调试串口, COM19可以登录, 并且是调试串口(40Pin排针左边的TypeC虚拟出的COM4也可以登录, 但是开机不打印调试信息)

在这里插入图片描述
Linux上显示

$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1  /dev/ttyACM2  /dev/ttyACM3

其中, /dev/ttyACM0 为调试串口, 可以用minicom查看

$ sudo apt install minicom
$ sudo minicom -D /dev/ttyACM0
# Ctrl+ A, Z, 按Q退出

可以命令行对Orin进行 Recovery, PowerOff, PowerOn, Reset 等, 限于评估板(有FTDI芯片)

Board Automation — Jetson LinuxDeveloper Guide 34.1 documentation (nvidia.com)

众所周知, dmesg那个并不是开机时间. 接下来用 grabserial 测试真实的开机时间

tbird20d/grabserial: Grabserial - python-based serial dump and timing program - good for embedded Linux development (github.com)

# 从松开reset到jetson login 共34.4s
$ sudo grabserial -d /dev/ttyACM0 -b 115200 -t
[0.000000 0.000000] 
[0.000124 0.000124] [0000.068] I> MB1 (version: 0.11.0.0-t234-54845784-7fb1fa27)
[0.005015 0.004891] [0000.073] I> t234-A01-0-Silicon (0x12347) Prod
[0.006414 0.001399] [0000.077] I> Boot-mode : Coldboot
[0.011361 0.004947] [0000.080] I> Emulation: 
[0.011916 0.000555] [0000.083] I> Entry timestamp: 0x00000000
...
[25.248113 0.057498] [   11.467200] using random self ethernet address
[25.248853 0.000740] [   11.467344] using random host ethernet address
[34.435111 9.186258] 
[34.435163 0.000052] Ubuntu 20.04.4 LTS jetson ttyTCU0
[34.435660 0.000498] 
[34.435700 0.000039] jetson login: 

UEFI

Jetpack 5.0 从之前的CBoot改成了UEFI, 机翻自官网的描述:

  • 支持的启动设备和默认启动顺序:
    操作系统启动支持从 eMMC/SD/UFS/NvME/USB(仅限 T194)。在默认启动顺序中,可移动设备 (SD/USB) 优先于不可移动设备 (eMMC/NvME/UFS) 设备。
  • 如何在UEFI中选择启动设备?
    当提示“按 ESC 获取启动选项”时,用户可以转到 UEFI 菜单。从UEFI菜单的登录页面中,导航到“启动管理器”,其中列出了所有支持的启动选项。用户可以从此列表中选择一个选项。
  • 如何自定义默认启动顺序?
    当提示“按 ESC 获取启动选项”时,用户可以转到 UEFI 菜单。从UEFI菜单的登录页面中,导航到“启动维护管理器”->“启动选项”->“更改启动顺序”。可以在此位置更改启动顺序。

在串口终端里直接测试的, 串口反应较慢, 不知道有没有接显示器的:

在这里插入图片描述
出现上图这个, 按ESC进入boot配置(每步操作顿一顿, 不要慌, 115200bps毕竟特别慢)
在这里插入图片描述
先进入上图的Device Manager
在这里插入图片描述
Boot Manager
在这里插入图片描述
Boot Maintenance Manager
在这里插入图片描述
可以改 Time-out, Boot Options 里面可以改启动顺序
在这里插入图片描述

系统探索

Ubuntu20, 5.10, 这很Nice

# 64GB Flash + 32GB RAM

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.4 LTS
Release:        20.04
Codename:       focal

$ uname -a
Linux jetson 5.10.65-tegra #1 SMP PREEMPT Tue Mar 15 00:53:43 PDT 2022 aarch64 aarch64 aarch64 GNU/Linux

$ lscpu
Architecture:                    aarch64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
CPU(s):                          12
On-line CPU(s) list:             0-11
Thread(s) per core:              1
Core(s) per socket:              4
Socket(s):                       3
Vendor ID:                       ARM
Model:                           1
Model name:                      ARMv8 Processor rev 1 (v8l)
Stepping:                        r0p1
CPU max MHz:                     2201.6001
CPU min MHz:                     115.2000
BogoMIPS:                        62.50
L1d cache:                       768 KiB
L1i cache:                       768 KiB
L2 cache:                        3 MiB
L3 cache:                        6 MiB
Vulnerability Itlb multihit:     Not affected
Vulnerability L1tf:              Not affected
Vulnerability Mds:               Not affected
Vulnerability Meltdown:          Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:        Mitigation; __user pointer sanitization
Vulnerability Spectre v2:        Not affected
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected
Flags:                           fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp uscat 
                                 ilrcpc flagm

# 内存
$ free -m
              total        used        free      shared  buff/cache   available
Mem:          30654         885       29048          12         720       29408
Swap:         15327           0       15327

$ df -HT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/mmcblk0p1 ext4       61G  5.8G   53G  10% /
none           devtmpfs   16G     0   16G   0% /dev
tmpfs          tmpfs      17G     0   17G   0% /dev/shm
tmpfs          tmpfs     3.3G   12M  3.3G   1% /run
tmpfs          tmpfs     5.3M  4.1k  5.3M   1% /run/lock
tmpfs          tmpfs      17G     0   17G   0% /sys/fs/cgroup
tmpfs          tmpfs     3.3G   17k  3.3G   1% /run/user/124
tmpfs          tmpfs     3.3G  8.2k  3.3G   1% /run/user/1000

# 分区
$ lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0          7:0    0   16M  1 loop 
mmcblk0      179:0    0 59.3G  0 disk 
├─mmcblk0p1  179:1    0   58G  0 part /
├─mmcblk0p2  179:2    0   64M  0 part 
├─mmcblk0p3  179:3    0  384K  0 part 
├─mmcblk0p4  179:4    0   32M  0 part 
├─mmcblk0p5  179:5    0   64M  0 part 
├─mmcblk0p6  179:6    0  384K  0 part 
├─mmcblk0p7  179:7    0   32M  0 part 
├─mmcblk0p8  179:8    0   80M  0 part 
├─mmcblk0p9  179:9    0  512K  0 part 
├─mmcblk0p10 179:10   0   64M  0 part 
└─mmcblk0p11 179:11   0    1G  0 part 
zram0        251:0    0  1.3G  0 disk [SWAP]
zram1        251:1    0  1.3G  0 disk [SWAP]
zram2        251:2    0  1.3G  0 disk [SWAP]
zram3        251:3    0  1.3G  0 disk [SWAP]
zram4        251:4    0  1.3G  0 disk [SWAP]
zram5        251:5    0  1.3G  0 disk [SWAP]
zram6        251:6    0  1.3G  0 disk [SWAP]
zram7        251:7    0  1.3G  0 disk [SWAP]
zram8        251:8    0  1.3G  0 disk [SWAP]
zram9        251:9    0  1.3G  0 disk [SWAP]
zram10       251:10   0  1.3G  0 disk [SWAP]
zram11       251:11   0  1.3G  0 disk [SWAP]

$ lspci
0001:00:00.0 PCI bridge: NVIDIA Corporation Device 229e (rev a1)
0001:01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8822CE 802.11ac PCIe Wireless Network Adapter

$ cat /etc/network/devnames 
wlan0:Realtek Semiconductor Co.\, Ltd. RTL8822CE 802.11ac PCIe Wireless Network Adapter

# 默认是 9.3.0, dist-upgrade后变为 9.4.0
$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0

$ python
Python 3.8.10 (default, Mar 15 2022, 12:22:08) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$ tegrastats 
04-25-2022 17:34:32 RAM 996/30655MB (lfb 7234x4MB) SWAP 0/15327MB (cached 0MB) CPU [11%@2201,2%@2201,0%@2201,2%@2201,3%@2201,8%@2201,2%@2201,4%@2201,0%@2201,2%@2201,1%@2201,0%@2201] EMC_FREQ 0% GR3D_FREQ 0% CV0@-256C CPU@51.031C Tdiode@40C SOC2@49.812C SOC0@51.312C CV1@-256C GPU@49.781C SOC1@49.812C CV2@-256C

# 我这里连的是千兆
$ ethtool eth0
Settings for eth0:
        Supported ports: [ ]
        Supported link modes:   100baseT/Half 100baseT/Full 
                                1000baseT/Full 
                                1000baseKX/Full 
                                10000baseT/Full 
                                10000baseKX4/Full 
                                10000baseKR/Full 
                                2500baseT/Full 
                                5000baseT/Full 
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  100baseT/Half 100baseT/Full 
                                1000baseT/Full 
                                1000baseKX/Full 
                                10000baseT/Full 
                                10000baseKX4/Full 
                                10000baseKR/Full 
                                2500baseT/Full 
                                5000baseT/Full 
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  10baseT/Half 10baseT/Full 
                                             100baseT/Half 100baseT/Full 
                                             1000baseT/Half 1000baseT/Full 
        Link partner advertised pause frame use: Symmetric Receive-only
        Link partner advertised auto-negotiation: Yes
        Link partner advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown
Cannot get wake-on-lan settings: Operation not permitted
        Link detected: yes

小问题

首先是 jtop 我这里没跑成, 作者还在适配吧:

$ sudo -H python3 -m pip install -U jetson-stats
# logout 或 reboot
$ sudo reboot

# 但是运行jtop会提示, 应该是现在还没适配?
$ jtop
Error connection

接着是 jetson-io, 也没跑成, 一闪而过啥都没有

 sudo /opt/nvidia/jetson-io/jetson-io.py

设备树文件

TX2的T186, Xavier的T194, Orin的T234:

• tegra234-p3701-0000-p3737-0000.dts

• kernel_tegra234-p3701-0000-p3737-0000.dtb

交叉编译工具链

下了下面这个, 能用

Cross-compilation toolchains for Linux - aarch64 toolchains (bootlin.com)

在这里插入图片描述

Orin vs Xavier

外设的区别(红色独有, 紫色差异)

在这里插入图片描述

特性比较(红色独有, 紫色差异)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

UPHY的映射分配

在这里插入图片描述

模块大小/固定孔位置一样, 但是散热需要提升

在这里插入图片描述

64GB LPDDR5 版Orin 带来 ~8倍 AI性能提升

在这里插入图片描述

Orin 64GB版和32GB版 AI性能和CPU核数都不一样, 下面的对比图中, Memory指RAM,Storage才是指Flash, 左边两个价格应该不是标反:

  • $1999, 指的是 开发者套件 Developer Kit , 是 32GB LPDDR5 + 64GB EMMC 5.1 的满血版Orin模组 + 载板, 这个模组是为了既能跑出高分又能减低成本的特供版, 开发者套件工作温度 0~50℃, 不同于下面模组的 -25~80℃
  • $1599, 指的是单买 64GB LPDDR5 + 64GB EMMC 5.1 的满血版Orin模组(60W), 缩写 JAO 64GB
  • $899, 指的是单买 32GB LPDDR5 + 64GB EMMC 5.1 的残血版Orin模组(40W), 缩写 JAO 32GB

在这里插入图片描述

参考

就先写到这吧, 欢迎扫描二维码关注微信公众号, 及时获取最新文章:
在这里插入图片描述

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值