Jetson 为什么既有 QSPI 又有 NVMe?从 SoM 与载板看懂存储结构

华为OD机试真题 2026.11.4. 新系统 【河流水系流量评估】 华为OD机试真题 新系统【河流水系流量评估】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【河流水系流量评估】多语言题解。 阅读详情

📺 B站 嵌入式孙老师:博主个人介绍
📘 博主书籍-京东购买链接:Yocto项目实战教程
📘 加博主微信,进技术交流群:jerrydev


Jetson 为什么既有 QSPI 又有 NVMe?从 SoM 与载板看懂存储结构

最近在排查 Jetson Thor 烧录问题时遇到:

Error: Error flashing qspi
Error: Flash failure.

这让我重新想了一个很基础的问题:

Linux 明明装在 NVMe,Jetson 为什么还必须有 QSPI?

顺着这个问题回到硬件,会发现 Jetson 的存储结构其实并不复杂。关键不是背 MB1、MB2、BCT、UEFI 这些名字,而是先理解:

SoM 和载板分别负责什么,又是怎样一起把 Linux 启动起来的。


在这里插入图片描述


1. 先看硬件:QSPI 在 SoM,NVMe 在载板

Jetson 并不是“一块 SoM 就等于一台完整电脑”。

SoM 提供核心计算和启动能力,真正的 SSD、USB、Ethernet、Display 等接口则通过 Carrier Board 扩展。

整体关系可以先压缩成:

                 Jetson SoM
┌────────────────────────────────┐
│                                │
│          Tegra SoC             │
│              │                 │
│          QSPI NOR              │
│              │                 │
│       Boot Firmware            │
│                                │
│          LPDDR RAM             │
│                                │
└──────────────┬─────────────────┘
               │ SoM Connector
               │
               │ PCIe
               ↓
             Carrier
┌────────────────────────────────┐
│                                │
│          M.2 M-Key             │
│              │                 │
│           NVMe SSD             │
│              │                 │
│      Linux / RootFS / Data     │
│                                │
└────────────────────────────────┘

在实际自定义载板中,NVMe 也是这种关系:SoM 提供 PCIe,Carrier 提供 M.2 M-Key Socket 和 SSD。

这就形成了 Jetson 最重要的两个持久化存储角色:

存储在哪里主要职责
QSPI NORSoMBoot Firmware / 启动
NVMe SSDCarrierLinux / RootFS / 数据

一句话:

SoM 负责把平台启动起来,Carrier 上的 NVMe 负责提供真正的操作系统。

QSPI 为什么必须放在 SoM?

因为启动不能依赖 Carrier 上一定存在某一块 SSD。

QSPI 是 SoM 自己带着的 Boot Flash。

里面主要面对的是:

Boot Firmware
BCT
UEFI
Platform Firmware

实际 Thor BSP 镜像目录里也能看到:

mb1_t264_prod.bin
mb2_t264.bin
mb1_bct_*.bct
mb2_bct_*.bct
uefi_t26x_general.bin
bpmp_*.bin
xusb_*.bin
...

这些东西的共同特点是:

它们不是 Linux RootFS,而是 Linux 启动之前的平台软件。

所以我更习惯把 QSPI 理解成 Jetson SoM 上的 Boot Storage。

NVMe 为什么放在 Carrier?

因为 NVMe 是大容量系统存储,而且不同产品对容量、尺寸甚至存储方案的要求都可能不同。

SoM 只需要把 PCIe 引出来:

Tegra
  │
PCIe
  │
  ↓
Carrier
  │
M.2 M-Key
  │
  ↓
NVMe

这样产品可以自由选择:

256 GB
512 GB
1 TB
2 TB
...

Linux 的 RootFS、应用、模型和数据都可以放在这里。

这也是 SoM + Carrier 架构很典型的分工:

通用的启动能力留在 SoM,产品相关的大容量存储留给 Carrier。


2. 两块存储并不是独立工作的

理解 QSPI 和 NVMe 时,最容易产生另一个误区:

QSPI 是一套东西
NVMe 是另一套东西

实际上正常启动时,两边必须接力。

QSPI 先把机器带起来

可以先不纠结 Thor 内部每一级 Boot Firmware 的名字,把正常启动压缩成:

Power On
   ↓
SoC Early Boot
   ↓
QSPI
   ↓
Boot Firmware / BCT
   ↓
UEFI

QSPI 这一阶段负责解决:

平台怎么初始化
        ↓
Bootloader 怎么运行
        ↓
最终去哪里寻找 OS

到这里,机器还没有真正进入我们熟悉的 Linux。

然后才轮到 Carrier 上的 NVMe

UEFI 继续通过 SoM 的 PCIe Controller 找到载板上的 NVMe:

QSPI
  ↓
UEFI
  │
  │ PCIe
  ↓
NVMe
  ↓
Kernel
  ↓
RootFS
  ↓
Linux

于是 SoM 和 Carrier 真正合作起来:

               SoM
        ┌───────────────┐
        │ QSPI          │
        │ Boot Firmware │
        │ UEFI          │
        └───────┬───────┘
                │
             PCIe
                │
                ↓
              Carrier
        ┌───────────────┐
        │ NVMe          │
        │ Kernel        │
        │ RootFS        │
        └───────────────┘

所以更加准确的理解不是:

QSPI 和 NVMe 谁更重要?

而是:

QSPI 负责把启动流程送到 NVMe,NVMe 再接过来完成 Linux 启动。

这就是两者最核心的关系。


3. 再反过来看 Flash,很多东西就清楚了

硬件关系理解以后,再看 Jetson 烧录目录就不会那么乱。

实际生成的 Thor 镜像目录里同时存在:

internal-flash.idx
external-flash.idx

以及:

MB1 / MB2
BCT
UEFI

和:

boot.img
kernel_*.dtb
*.ext4.simg

这实际上就是硬件结构在软件上的映射:

硬件                          镜像

SoM QSPI                 Boot Firmware
   │                     BCT
   │                     UEFI
   │
   │
Carrier NVMe             Kernel
                         RootFS
                         OS Data

为什么一次完整烧录不只是写 NVMe?

因为只有 NVMe 上有 Linux,还不够。

假设:

NVMe
├── Kernel    ✓
└── RootFS    ✓

QSPI
└── Boot Firmware   ✗

机器仍然可能走不到加载 NVMe 的阶段。

反过来:

QSPI
└── Boot Firmware   ✓

NVMe
└── RootFS          ✗

则可能能够进入前面的 Boot/UEFI 阶段,但最终没有正常 Linux 可以启动。

所以完整 Flash 本质上是在准备:

           Jetson 完整系统

     SoM                   Carrier
      │                       │
    QSPI                    NVMe
      │                       │
Boot Environment          Linux OS

这也是为什么 Error flashing qspi 不能简单理解成:

“Ubuntu 没刷进去。”

它明确指向的是启动存储这一侧。


BCT 和 QSPI 又是什么关系?

看到:

tegra264-mb1-bct-qspi-common.dts

很容易误以为:

这是在定义 QSPI 里面存什么。

其实不是。

类似:

qspiflash@0 {
    interface-frequency = <...>;
    maximum-bus-width = <...>;
    fifo-access-mode = <...>;
};

描述的是:

Boot Firmware 怎么正确访问 QSPI 这个硬件。

所以我现在会把 Jetson BSP 中这两类东西明确分开:

BCT
│
└── Hardware Configuration
    QSPI 怎么访问?
    Pin 怎么配置?
    电源怎么初始化?

而:

Flash XML / Partition Layout
│
└── Storage Layout
    有哪些 Partition?
    哪个 Image 写到哪里?

简单说:

BCT 管“硬件怎么工作”,Flash Layout 管“镜像怎么放”。

这个区别理顺后,看 L4T BSP 会容易很多。


initrd flash 只是把两边“刷起来”

再看:

l4t_initrd_flash.sh

名字里虽然有 initrd,但它并不代表第三块存储。

脚本本身就说明它是使用 initrd 来完成目标设备 Flash 的工具。

原因也很直接:

一块正在生产或者恢复的设备,QSPI 和 NVMe 可能都还没有完整系统,那么必须先通过 Recovery/RCM 给目标板送进去一个临时执行环境。

于是:

Host PC
   │
USB Recovery
   ↓
RCM
   ↓
临时 initrd
   ↓
Target 获得 Flash 能力
   │
   ├─────────────┐
   ↓             ↓
 QSPI           NVMe

所以这三个东西最好一直分清:

initrd / RCM
→ 怎么刷

QSPI
→ 怎么启动

NVMe
→ Linux 在哪里

最后:先看物理位置,再看那些 .bin 和 .xml

以前看 Jetson BSP,目录里几百个:

*.bin
*.bct
*.dtb
*.img
*.xml

很容易一头扎进文件名。

现在我觉得更有效的方法反而是先回到硬件:

                SoM
                 │
              QSPI
                 │
         Boot Firmware
                 │
               UEFI
                 │
                 │ PCIe
                 ↓
              Carrier
                 │
               NVMe
                 │
          Kernel + RootFS

然后看到一个镜像时,只问三个问题:

它属于 SoM 还是 Carrier?

它最终进入 QSPI 还是 NVMe?

它负责 Boot,还是负责 Linux?

很多 Jetson 烧录和启动问题都能迅速归位。

对我来说,这次重新整理之后,Jetson 的存储结构最终可以压缩成一句话:

SoM 用 QSPI 保存启动能力,再通过 PCIe 把启动流程交给 Carrier 上的 NVMe;两者一起,才组成一套真正可以启动 Linux 的 Jetson 系统。

这比单独记“QSPI 是 Boot Flash、NVMe 是 SSD”更重要,因为真正做自定义载板时,我们面对的从来都不是单独的 SoM,而是 SoM 和 Carrier 共同组成的完整系统。

Altium Designer应用技巧13: 四层板的拼版方法 本文介绍在Altium Designer中,进行4层板的拼版方法。Altium Designer有多种拼版方法,本文选择最直观的复制、删帖方法来完成,步骤如下: 1、看一下原始文件,如下图所示,我们要对该板进行拼版操作。 2、通过菜单“报告”-“板子信息”得到板子大小,在这里一般切换为mm比较好操作,我们可以使用快捷键"q"。 3、如果是水平拼版,我们需要关心水平长度;如果是垂直拼版... 阅读详情

相关推荐

STM32F103C8T6全桥逆变电路PWM波生成(基于HAL库)

全桥逆变电路需要两组开关管相互协同工作,故需要两路PWM控制信号,为了防止电源短路,需要保证同一桥臂的上下两个开关管不会同时导通,故两路PWM在相位上需要相差180°;为了保证高频变压器不会磁饱和,使正负半周PWM占空比相同。但是传统的互补输出达不到调节占空比调节输出电压的效果。......

weixin_45042735的博客 6021

Orin NX完整系统迁移空板实战:从dd克隆到引导适配全记录

在嵌入式AI与边缘计算场景中,经常需要将一台已经稳定运行的设备完整复刻到另一台空板上,尤其是NVIDIA Jetson Orin NX这类模块化平台。系统迁移并非简单的文件拷贝,而是涉及存储介质、引导链路、分区元数据(如PARTUUID)、设备树(DTB)乃至内核依赖的整机状态复制。JetPack与L4T环境对CUDA库、内核版本和驱动链高度敏感,重装环境容易引入隐性兼容风险。整盘克隆(如dd)配合引导适配与UUID重置,能够在保持系统高度一致性的同时,解决设备更换或批量产线部署中的快速复刻需求,广泛应用于

weixin_34178244的博客 405

深入解析EDID中Display Descriptor Block的配置技巧与实战应用

本文深入解析EDID中Display Descriptor Block的配置技巧与实战应用。通过剖析像素时钟、有效像素、消隐区与同步脉冲等核心参数,并结合1280x720@60Hz的实战配置案例,指导开发者如何正确为定制硬件或非标准显示器编写“身份证”,避免黑屏、分辨率异常等问题,确保显示设备完美点亮。

1a2s3d4f5g的博客 878

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 214

UE5.6使用ndisplay,单窗口多画面(单机部署),配置、打包流程,无需switchboard

摘要:本文介绍了在UE5.6中使用ndisplay插件的完整流程。首先需要开启ndisplay和launch插件,创建ndisplay配置文件并设置本地单窗口多画面模式。随后通过Process Explorer获取启动命令用于制作bat文件。打包项目时需删除场景中的ndisplay文件,但保留内容浏览器中的配置,并设置为开发版打包。最后将ndisplay文件导出为.ndisplay格式,与bat文件一起放置在打包目录下,通过bat启动程序。注意修改路径和窗口大小时需保持纯英文路径,且bat代码需保持单行格式

weixin_43912248的博客 976

国际项目投标那些事(三)海外项目招标文件的组成

以一个实际的项目作为例子,是我2020年初投的一个东南亚国家的水厂的竞争性投标。这个投标的招标基于FIDIC yellow book (Design and Build) 合同模板。 海外项目的招标一般是有专门的咨询公司(consulting engineer)写招标文件,有的咨询公司非常专业,对于技术、合同、业绩的要求非常细致。 我这个项目的招标文件共5册 400多页(全英文),附件26册将...

WTSolutions的博客 2002

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 319

区块链入门:用账本、乐高和三台旧电脑讲懂分布式账本

区块链是一种去中心化的分布式账本技术,其核心原理是通过密码学哈希、共识机制和链式结构实现数据不可篡改与多方共同验证。它不依赖单一中心,而是将交易记录同步复制到多个节点,依靠数学规则而非人工信任达成一致,从而在数字世界构建可验证的信用基础设施。这种‘集体见证’模式显著提升了系统抗单点故障与人为干预的能力,广泛应用于供应链溯源、数字身份、教育管理及公益透明等需强信任保障的场景。本文以账本类比、乐高拆解和Ganache实操为线索,面向零基础读者通俗解析哈希值、挖矿与智能合约等关键概念。

weixin_30517215的博客 274

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 138

在 SAP HANA XS Advanced 中用 InA 打通 Web 化分析数据访问:架构原理、部署步骤与实战指南

本文介绍了如何在SAP HANA环境中通过InA协议为XS Advanced应用和分析工具提供实时数据访问。主要内容包括:InA协议的作用是将HANA计算视图等模型通过HTTP(S)暴露为实时数据源;SAP HANA Analytics Adapter(xsahaa)是关键组件,负责协议转换和连接管理;部署包含本地和云端两种形式,均需建立XSA空间与租户数据库的映射;实施前需准备HDI容器、适配器构建和网络验证;安全方面通过XSA用户角色和HDI授权双重控制;文章还提供了与SAP Analytics Clo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 257

slew dreate,slew threshold与transition计算

​只看rise情况下,from pin取slew threshold10%-90%的区间,slew derate为1,计算得到transition为1.002e-10,to pin的slew threshold 为30%-70%,slew derate 0.5,从波形列表上取相近的值3.75e-10和8.75e-10,计算得到transition为(8.75e-10-3.75e-10)/0.5=1e-9,考虑精度和取值区间问题,基本符合工具计算的值,如下:​。如下示例,在.lib库中有定义以下内容。

m0_61544122的博客 791

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 187

网络工程师面试题汇总(二)

网络把主机连接起来,而互连网(internet)是把多种不同的网络连接起来,因此互连网是网络的网络。而互联网(Internet)是全球范围的互连网。因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。地址解析协议 ARP(Address Resolution Protocol)

悦分享 184

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 108

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 350

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Decorator

TaskDecorator 是异步场景下"跨线程传递上下文"的标准方案,主要用于传递 MDC、用户信息、数据源路由等上下文数据,核心价值是让异步任务的日志链路不中断、业务上下文不丢失。TaskDecorator 是 Spring 提供的一个钩子接口,用于在异步任务执行前对 Runnable 进行包装,常用于跨线程传递上下文。如果你在项目中遇到具体的异步上下文传递问题,可以把代码贴出来,我帮你给出最合适的 Decorator 方案 👍。✅ 核心能力:在线程切换时,把"父线程的上下文"搬到"子线程"

wlwork66的博客 100

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 606

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 389

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 368

java框架大全

java框架大全

qq_39326137的博客 180

SecureRandom做随机源,这个Java随机字符串工具类有3个方法

本文分享一款JDK17环境下的Java随机字符串工具类,内置3个开箱即用的方法,全部采用SecureRandom加密安全随机源,不存在弱随机、可预测、取模偏差等问题。工具类支持默认62字符集随机串、纯数字随机串、自定义字符集随机串三种生成模式,支持Unicode码点级别的字符集处理,兼容Emoji等增补字符,边界处理严格,异常信息明确,适合验证码、邀请码、盐值、随机口令、短链码等场景,源码可直接复制使用。

Java后端 | AI智能体应用实战派 | 电脑技能行家 290

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 305

Agent 状态栏在上下文中的具体位置

Agent状态栏以user角色消息形式追加至上下文末尾,而非修改system消息,避免破坏KVCache。此举仅为API技术实现,内容由框架自动生成,非真实用户输入,通过<agent_status>标签标识,确保模型获取最新状态且不影响缓存。该设计遵循“动态信息追加、静态信息固定”原则,实现高效、低延迟的状态传递。

lj1109053360的专栏 67

ubuntu安装hadoop系统

本文详细介绍了基于VMware克隆虚拟机搭建三节点Hadoop分布式集群的全过程:使用同一Ubuntu镜像克隆出master、worker1、worker2三台虚拟机,依次配置主机名、固定IP(如192.168.82.10/11/12)、SSH服务及免密登录,确保节点间网络互通。随后安装Java,下载配置Hadoop并分发至各节点,最终初始化启动集群,验证其存储与计算功能,实现高效的大数据环境部署。

qq_43592674的博客 279

Spring事务和事务传播机制

3. 可重复读(REPEATABLE READ): 事务不会读到其他事务对已有数据的修改, 即使其他事务已提交. 也就可以确保同⼀事务多次查询的结果⼀致, 但是其他事务新插⼊的数据, 是可以感知到的. 这也就引发了幻读问题. 可重复读, 是 MySQL 的默认事务隔离级别.p1事务可以认为是⽗事务, 嵌套事务是⼦事务. ⽗事务出现异常, ⼦事务也会回滚, ⼦事务出现异常, 如果不进⾏处理, 也会导致⽗事务回滚.

txxzjmzlh的博客 201

RuoyiOffice 容器化落地:镜像分层、JVM 配额与三探针的联动配置

拆解 RuoyiOffice 上容器的三道坎:多阶段镜像分层、按 cgroup 配额切分 JVM 内存、startup/liveness/readiness 三探针分工,附可复制的 Dockerfile、JVM 参数与 K8s YAML。

2301_78967866的博客 299
上一篇: 为什么嵌入式设备里总能看到 Realtek?从网卡、PHY 到 Switch 认识(RTL) 瑞昱
下一篇: 定制板多网口怎么做?我从 Switch、NIC、PHY 到 Linux 的一次实战梳理
嵌入式孙老师
博客等级 码龄7年 5686粉丝 898原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值