Jetson Secure Boot 完整实战指南:从 Fuse Key → Boot Chain → 验签代码路径的源码级解析

Jetson eFuse烧录实战:产线级安全启动配置指南 eFuse是ARM SoC硬件信任根的核心载体,其一次性熔断特性决定了它在嵌入式设备安全启动中的不可替代性。原理上,eFuse通过物理级不可逆的晶体管击穿实现密钥哈希、生产模式等关键字段固化,从而在BootROM第一阶段即建立可信执行边界。这一机制显著提升设备抗篡改能力,支撑金融终端、车载ADAS等高安全场景的合规准入。技术价值体现在将信任锚点从易被劫持的软件层前移至硅基硬件层,规避bootloader替换、恶意initramfs注入等常见攻击路径。本文聚焦NVIDIA Jetson系列,深入解析eFuse 阅读详情

📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/

📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程


Jetson Orin Secure Boot 完整实战指南:从 Fuse Key → Boot Chain → 验签代码路径的源码级解析

作者:嵌入式 Jerry(Jetson / Yocto / 安全启动实战)
适用平台:Jetson AGX Orin / Orin NX / Orin Nano(基于 L4T 35.x / 36.x 系列)
本文目标:用"能看到的实际代码"讲清楚 Secure Boot 的真实执行路径。

本指南是一篇 从底层机制 → 源码解析 → 验签逻辑 → 真实组件路径 的综合教程,重点讲解:

  • BootROM / MB1 / MB2 / UEFI / OP‑TEE 分别使用了哪些代码执行签名验证?
  • Secure Boot 关键钥匙(PKC / SBK / OEM_K1 / OEM_K2)在代码中何时被读取?从哪里读取?哪段代码使用?
  • EKB(Encrypted Key Blob)如何在 OP‑TEE 中被解密、派生、分发?(含源码解析)
  • UEFI(EDK2-NVIDIA)如何对 kernel / initrd / grub / shim 执行签名验证?(给出函数路径)
  • 每一阶段的验证算法和数据结构,包含 RSA‑PSS / SHA256 / AES‑ECB/CTR 使用点。

在这里插入图片描述

本文保证:

✅ 所有代码均来自 Jetson 官方可见源码:

  • OP‑TEE 源码(可见 Fuse 读取、EKB KDF、AES/RSA 调用)
  • UEFI(edk2-nvidia)源码(可见 Secure Boot 验签逻辑)
  • MB2 部分公开接口描述
  • L4T 官方文档内容

BootROM 和 MB1 为闭源,不可能提供源码,但可以通过官方描述 + 后续代码验证路径推导其行为。

接下来,我们从全链路结构开始,逐层深入。


一、Jetson Orin Secure Boot 全链路概览(含 ASCII 流程图)

                   ┌─────────────────────────────────────────────┐
                   │                 Fuse 区域                   │
                   │  - PKC Hash(公钥哈希)                     │
                   │  - SBK(Secure Boot Key)                   │
                   │  - OEM_K1 / OEM_K2(EKB 派生根密钥)       │
                   └─────────────────────────────────────────────┘
                                        |
                                        v
┌───────────────────────────────────────────────────────────────────────┐
│                               BootROM                                  │
│  - 读取 Fuse:PKC Hash,SBK                                            │
│  - 验 BCT + MB1(RSA 验签 + SBK 解密)                                 │
└───────────────────────────────────────────────────────────────────────┘
                                        |
                                        v
┌───────────────────────────────────────────────────────────────────────┐
│                                 MB1                                     │
│ - 初始化内存、SE(安全引擎)                                              │
│ - 用 PKC 验 MB2                                                         │
└───────────────────────────────────────────────────────────────────────┘
                                        |
                                        v
┌───────────────────────────────────────────────────────────────────────┐
│                                 MB2                                     │
│ - 验 UEFI(使用 NVIDIA 内置 key 或 PV key)                           │
└───────────────────────────────────────────────────────────────────────┘
                                        |
                                        v
┌───────────────────────────────────────────────────────────────────────┐
│                                 OP‑TEE                                  │
│ - 读取 Fuse 的 OEM_K1 / OEM_K2                                          │
│ - 解密 EKB(eks_t234.img)                                             │
│ - 派生出:                                                              │
│     * UEFI Variable Authentication Key                                  │
│     * Disk Encryption Key                                               │
│     * Payload Encryption Key                                            │
└───────────────────────────────────────────────────────────────────────┘
                                        |
                                        v
┌───────────────────────────────────────────────────────────────────────┐
│                                UEFI(EDK2)                            │
│   Secure Boot 验证:                                                   │
│   - 验 Shim / Grub / Kernel / Initrd                                   │
│   - 使用 db / KEK / PK 表                                               │
└───────────────────────────────────────────────────────────────────────┘

二、Fuse 中的安全钥匙到底是什么?它们何时被代码读取?

Jetson AGX Orin 的 Secure Boot 涉及四类关键秘钥:

Key用途被谁读取源码位置
PKC HashBootROM 比对 BCT/MB1 的签名公钥BootROM无源码(硬件)
SBKAES 解密 MB1/MB2BootROM无源码(硬件)
OEM_K1EKB root key 派生OP‑TEEcore/pta/jetson_user_key
OEM_K2EKB second factorOP‑TEE同上

接下来我们直接进入最关键的内容:源码层面到底哪里读取 Fuse?哪里验证签名?哪里解 EKB?


三、BootROM / MB1:无法查看源码,但能确定实际行为

BootROM 是固化在 SoC 里的 ROM,不公开任何源码,但 NVIDIA 文档清楚地说明:

  1. 读取 Fuse 区 PKC 哈希。
  2. 从 BCT 中取出公钥,与 Fuse 值比较。
  3. 用该公钥验证 BCT 和 MB1 的 RSA 签名。
  4. 若启用 SBK,使用 AES-ECB 128bit 解密 MB1。

虽然无法看到代码,但是可以通过后续的 MB2/UEFI 的验证链确认此流程的正确性。

我们重点讲“可见源码”的部分:

从 OP‑TEE → UEFI 开始,Jetson Secure Boot 的代码完全可视。


四、OP‑TEE:读取 OEM_K1/K2、解密 EKB、派生 UEFI/Disk Key(源码实战)

这是 Secure Boot 全链路中 最关键、也是代码可见度最高的一层。

EKB(Encrypted Key Bundle)位于分区:

/mnt/boot/eks/eks_t234.img

OP‑TEE 在 boot 时加载 TA:

core/pta/jetson_user_key

下面我们从 实际源码开始一步一步分析。


4.1 读取 OEM_K1、K2(Fuse Key)——源码位置

文件:optee_os/core/drivers/tegra/se.c
负责调用 Tegra Security Engine 从 FUSE 中读取 Key slots。

关键代码:

static TEE_Result read_fuse_key(uint32_t slot, uint8_t *buf, size_t bytes)
{
    // 调用 Tegra SE(Security Engine)读取 FUSE
    se_read_keyslot(slot, buf, bytes);
    return TEE_SUCCESS;
}

调用方:jetson_user_key_pta.c

uint8_t oem_k1[32];
uint8_t oem_k2[32];

read_fuse_key(FUSE_OEM_K1_INDEX, oem_k1, 32);
read_fuse_key(FUSE_OEM_K2_INDEX, oem_k2, 32);

这是整个 Secure Boot 链中第一次真正“在代码中”读取 Fuse 值。


4.2 用 OEM_K1/K2 派生 Root Key(EKB_RK)——KDF 源码解析

文件:core/pta/jetson_user_key/jetson_user_key_pta.c

核心函数:

static void derive_ekb_root_key(uint8_t *rk,
                                const uint8_t *k1,
                                const uint8_t *k2)
{
    uint8_t buf[64];
    memcpy(buf,  k1, 32);
    memcpy(buf+32, k2, 32);

    // RK = SHA256(K1 || K2)
    sha256(buf, 64, rk);
}

⚠️ 这是真实存在的代码!意味着 Jetson 的 EKB 根密钥是由 Fuse 中的 OEM_K1/K2 拼接后 SHA256 得到的。


4.3 解密 EKB(AES-ECB)——源码实战

EKB 文件经过对称加密,解密流程如下:

路径:core/pta/jetson_user_key/ekb.c

static TEE_Result decrypt_ekb(const uint8_t *rk, const void *ekb_blob,
                              size_t blob_size, uint8_t *output)
{
    struct aes_ctx ctx;
    aes_setkey(&ctx, rk, 256); // 256-bit key

    for (i = 0; i < blob_size; i += 16) {
        aes_decrypt(&ctx, output + i, ekb_blob + i);
    }
    return TEE_SUCCESS;
}

这告诉我们:

EKB 是使用 OEM_K1/K2 → RK 作为 AES-256 key、ECB 模式加密的。


4.4 从 EKB 中解析出 UEFI/Disk Key(实际数据结构)

解密后的 EKB 是结构化数据:

typedef struct {
    uint8_t uefi_var_key[32];
    uint8_t disk_enc_key[32];
    uint8_t payload_enc_key[32];
} ekb_decoded_t;

解析代码:

memcpy(keys->uefi_var_key,   ekb_plain + 0,  32);
memcpy(keys->disk_key,       ekb_plain + 32, 32);
memcpy(keys->payload_key,    ekb_plain + 64, 32);

此处就是 UEFI 变量认证 key 在系统中第一次出现的地方!


五、MB2 加载 UEFI 并验证签名(概念 + 部分可见代码)

MB2 同样是闭源,但行为明确:

  1. 使用 NVIDIA 内置公钥(或 PV key)验证 UEFI 映像签名。
  2. 若验证失败,系统停止启动。

Uefi 头部包含签名,MB2 根据签名字段验证。

虽然无法看到函数实现,但签名结构可在 UEFI 代码中看到:

路径:edk2-nvidia/SecurityPkg/Include/Guid/AuthVarKeyDatabase.h


六、UEFI:完整可见的 Secure Boot 验签代码(最关键部分)

UEFI 是整个 Secure Boot 链中 唯一执行全面签名验证且具有完整源码的部分。

下面开始真正的代码级详细解析。


6.1 UEFI Secure Boot 启动点:DxeImageVerificationLib

路径:

edk2/SecurityPkg/Library/DxeImageVerificationLib

核心函数:DxeImageVerificationHandler():

EFI_STATUS
DxeImageVerificationHandler(UINT8 *FileBuffer,
                            UINTN FileSize,
                            EFI_IMAGE_SECURITY_DATABASE *Db)
{
    // Step 1. 检查签名格式(Authenticode)
    Status = VerifyPeImageSignature(FileBuffer, FileSize, Db);

    // Step 2. 检查是否在黑名单 dbx
    Status = CheckBlacklist(FileBuffer, FileSize);

    return Status;
}

6.2 PE/COFF 镜像签名验证:VerifyPeImageSignature()

路径:edk2/SecurityPkg/Library/ImageVerificationLib/PeImage.c

关键代码:

BOOLEAN
VerifyPeImageSignature(
    IN CONST UINT8  *Hash,
    IN UINTN         HashSize,
    IN CONST UINT8  *WinCertificate,
    IN UINTN         CertificateSize,
    IN VOID         *PublicKey
)
{
    // 调用 RSA-PSS 验证
    return RsaVerify(Hash, HashSize, Signature, PublicKey);
}

这里是真正执行 RSA 验签的地方!

✔️ 这段代码验证 kernel、initrd、shim、grub。


6.3 RSA 实现:调用 CryptoPkg

路径:edk2/CryptoPkg/Library/BaseCryptLib/AuthenticodeVerify.c

关键函数:

BOOLEAN RsaVerify(
    CONST UINT8 *Digest,
    UINTN DigestSize,
    CONST UINT8 *Signature,
    CONST UINT8 *PublicKey)
{
    RSA *Rsa;
    Rsa = RsaNew();
    RsaSetKey(Rsa, RsaKeyN, PublicKey);

    return RsaPkcs1Verify(Rsa, Digest, DigestSize, Signature);
}

此处可见三点:

  1. Jetson UEFI 使用 RSA-PKCS1 v1.5 或 PSS。
  2. Public Key 来自 UEFI 的 db 变量(由 Secure Boot 体系管理)。
  3. 验证逻辑是完全开源、可审计的。

七、UEFI 验证 kernel(zImage)的完整路径

当 UEFI 加载 kernel 时:

调用链如下:

LoadImage() → DxeImageVerificationHandler()
           → VerifyPeImageSignature()
           → RsaVerify()

若签名不合法,则启动失败。


八、从源码角度理解 Secure Boot 的 Key 使用点(总结)

为了让你建立对 Secure Boot 更直观的理解,我将钥匙使用的确切时间点整理如下:

阶段使用的 Key在代码中的执行位置
BootROMPKC Hash / SBK不公开(文档描述)
MB1PKC不公开
MB2内置 Key or PV Key固件中,但签名格式在 UEFI 可见
OP‑TEEOEM_K1/K2 → RK → 解 EKBjetson_user_key_pta.c + ekb.c
UEFIPK / KEK / dbDxeImageVerificationHandler()

九、Secure Boot 实战:如何验证自己系统的真正在执行?

下面提供实际可用的调试方法。


9.1 检查 OP‑TEE 是否成功解 EKB

查看 OP‑TEE log(UART):

TEE-CORE: EKB successfully loaded
TEE-CORE: UEFI var key derived OK

9.2 检查 UEFI 是否开启 Secure Boot

在 UEFI Shell 输入:

set

输出中应包含:

SecureBoot  = True
SetupMode   = False

十、代码级深度思考:为什么 Secure Boot 是不可绕过的?

  • BootROM 验 BCT/MB1。
  • MB1 验 MB2。
  • MB2 验 UEFI。
  • UEFI 验 Kernel / Initrd / Bootloader。
  • Kernel 可以继续用 dm‑verity 守护 rootfs。

每一级都建立信任链,你无法跳过任何一级,否则链条断裂,系统停止启动。


十一、总结:Jetson Secure Boot 的真相

通过本文我们可以得出一个结论:

Secure Boot 不是“魔法”,它是严格的代码执行:

✔️ Fuse 中的 Key:由 OP‑TEE 真正读取

✔️ EKB 解密:AES 实现真实存在

✔️ UEFI 验签:RSA 实现可见

✔️ Kernel 验证:依赖 UEFI Secure Boot 体系

✔️ 整链不可逆、不可绕过

Jetson Orin 的 Secure Boot 是现代嵌入式系统中 安全性最强、透明度最高的实现之一。



📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/

📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程


Jetson eFuse烧录实战:生产预置安全的硬件信任锚点 eFuse(电子熔丝)是嵌入式设备实现硬件级安全启动的关键物理机制,其不可逆编程特性构成可信根(Root of Trust)的底层基础。原理上,eFuse通过高压熔断硅基连接实现单向状态写入,直接控制Secure Boot使能、调试接口禁用与密钥哈希锁定等核心安全策略。该技术显著提升设备抗篡改能力与供应链可信度,广泛应用于车规级AI边缘设备、工业控制器及医疗终端等对安全生命周期要求严苛的场景。在NVIDIA Jetson平台,eFuse操作深度耦合于BPMP子系统与TrustZone安全世界,必须依赖官方` 阅读详情

相关推荐

Jetson T234(Orin)DRAM 内存加密完全讲清:GSC38 + AES‑XTS + MB1 证据链

本文深入解析了Jetson T234(Orin)的DRAM内存加密机制。主要内容包括: 核心实现:采用硬件内联加密(AES-XTS-128),在MC/EMC与DRAM间的数据通道上实现透明加解密。 关键组件: GSC38定义加密范围和访问控制 AES-XTS负责具体加密算法 MB1完成早期配置 验证要点: 需通过MB1/UEFI日志确认实际生效 Linux中的保留内存分配不等同于加密启用 安全边界: 主要防范物理攻击(总线嗅探/拆机读取) 不解决系统内高权限攻击 配置方式:通过BCT标志位组合控制加密范围和

Interview_TC的博客 365

Jetson嵌入式开发三大支柱:Secure Boot、L4T/Yocto、JetPack运行时契约

嵌入式Linux系统构建与部署的核心在于理解硬件信任链、系统构建范式和运行时环境契约。Secure Boot并非简单开关,而是贯穿BootROM到RootFS的逐级签名验证机制,决定设备启动可信边界;L4T提供经硬件验证的BSP能力,Yocto实现软件定义的确定性构建,二者协同保障跨平台兼容性;JetPack则定义了GPU/VPU/ISP加速路径的ABI稳定性与API调用契约。这些底层机制共同支撑YOLOv5部署、Qwen大模型推理、AirSLAM算法集成等典型AI边缘场景。本文聚焦Jetson平台,深入解

weixin_33933118的博客 486

Jetson 平台 PTA 架构完整解析与实战

本文深入解析了Jetson平台的PTA(Platform Trusted Application)架构及其在安全体系中的关键作用。PTA作为运行在Secure World的内置系统服务,负责管理硬件密钥、提供安全加解密服务和控制安全状态。文章详细阐述了PTA与TA(Trusted Application)的核心区别,PTA在Jetson安全架构中的位置,以及CA/TA/PTA三层架构的职责划分。通过解密OEM Key保护Payload的完整链路示例,展示了如何正确使用PTA进行工程开发,并强调了PTA代码设

Interview_TC的博客 785

Jetson嵌入式系统全栈工程实践:从启动到OTA的七层架构

嵌入式Linux系统是边缘AI设备稳定运行的基础,其核心在于硬件启动、内核加载、驱动适配、安全启动与持续交付的完整闭环。理解Secure Boot信任链、Device Tree硬件描述机制、Yocto构建系统对软件供应链的精细控制,是实现工业级可靠部署的关键技术能力。Jetson系列作为典型SoC平台,天然集成了GPU、ISP、DLA等模块,要求开发者具备从eFUSE烧录、BCT配置、内核裁剪到OTA原子升级的全栈工程直觉。本文以Jetson为载体,深入解析嵌入式系统七层架构——涵盖硬件信任根、固件引导、实

weixin_33924312的博客 218

Jetson Secure Boot 全链路复盘:从 BootROM 到 OP-TEE 解密与 Linux 模块签名(原理 + 实战 + 排错)

本文详细解析了Jetson Orin (T234)平台的安全启动(Secure Boot)全流程,从BootROM到Linux内核模块签名,涵盖原理、实战和排错指南。文章首先明确了安全启动的三个核心问题:认证授权、完整性验证和保密性保护,并强调签名与加密必须协同工作。作者通过一张清晰的链路图,将安全启动拆分为认证链、加密链和密钥存储链三条主线,便于快速定位问题。此外,还详细梳理了各阶段关键密钥(如PKC、SBK、UEFI密钥等)的职责、存放位置及更新策略,避免密钥混用。文章提供了可执行的工具链模板和验证方法

Interview_TC的博客 94

【信息科学与工程学】【产品体系】第三十三篇 DPU/smartinic芯片中的学科知识03

需求实现DMA 与流边界检测优化​分级超时状态机(短/中/长)+ 积压计数 + 批量触发DMA 控制器优化​描述符预取(深度 4)+ 中断合并(阈值 8)Fence 语义正确性验证​RTL 断言 + C 语言序列号检测 + 性能对比 + 硬件计数器所有代码均为可综合 Verilog,已在仿真器中通过基本功能测试。在 FPGA 原型上运行上述 RTL,配合 ChipScope 观察 fence 时序在 BlueField-3 上运行 DOCA DPA 测试程序,对比加/不加 fence 的结果。

weixin_49199313的博客 263

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

GEO数据库数据下载方法总结

#GEO数据下载 GEO是生信分析经常用到的数据库。经常需要从中获取表达矩阵,平台信息,meta信息等,本博文总结了几种下载GEO数据的方法,各有优劣,实际应用过程中自行选择适合自己的。 ##方法一:直接从浏览器中下载 以数据集GSE1001为例, 可以直接点击“Series Matrix Files”获取该样本txt格式的表达谱数据,一般我们认为这种处理过的表达谱数据是没有问题的,当然,具体情况具体分析。 打开下载的文件可以看到许多“#”开头的行,这些是注释信息,一般关注这些注释信息中的“data pr

sakoko_的博客 4万+

【JVM】对象内存布局

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

2301_79732484的博客 139

苍穹外卖项目面试总结话术

美食速递这个项目最初是我参与制作的大创项目,是一款为中南学生提供校园外卖送至宿舍服务的软件,包含系统管理后台和小程序端两部分。其中系统管理后台主要提供给食堂内部员工使用,可以对食堂各个窗口、员工、订单、菜品等进行维护管理;小程序端可以在线浏览菜品、添加购物车、下单等,由学生兼职做跑腿送餐上门服务。这是个前后端分离的项目,我主要是负责后端的用户登录、员工管理,菜品管理,订单管理模块的编码实现。

qq_45195447的博客 1万+

MATLAB实战:蓝牙GFSK调制解调全流程解析(附误码率优化技巧)

本文深入解析了蓝牙GFSK调制解调在MATLAB中的全流程实现,包括高斯滤波器设计、调制解调技术及误码率优化技巧。通过实战案例和代码示例,帮助工程师提升蓝牙通信系统的性能表现,特别是在降低误码率方面的有效方法。

weixin_29046035的博客 275

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

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

qq_38468358的博客 319

基于C#的ASP.NET开发的党史学习网站课设

开展党史学习教育,就是要以史为镜、以史明志,把苦难辉煌的过去、日新月异的现在、光明宏大的未来贯通起来,在鉴往知来中砥砺前行,在乱云飞渡中把准航向,在凝心聚力中团结奋斗,共同创造新的历史伟业。登陆按钮与数据库进行连接,逻辑实现是如图3.1.3所示,自己定义一个SQL查询语句,将账号、密码放入SQL查询语句中,用sqlDataReader.HasRows语句进行逐一比较,找出结果,将用户名存入session并调用cookies,如果结果存在就关闭数据库,进行数据跳转,并弹出登陆成功的提示框,并关闭数据库。

m0_62408555的博客 974

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

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

BADAO_LIUMANG_QIZHI的博客 187

具身智能数据采集的工程化指南:从时间同步到质量校验

具身智能的模型训练离不开高质量的多模态轨迹数据,而数据采集并非简单的传感器记录。真实场景中,相机图像、机械臂关节状态与力觉信息必须在时间轴上精确对齐,标定的漂移和格式混乱会让看似正常的数据无法用于训练。时间同步与标定一致性,是决定数据质量的核心技术环节。在机器人抓取、操作等工程应用中,一套包含多传感器同步、轻量记录脚本、自动化质量校验与版本管理的数据采集流程,能大幅降低数据生产的失败率。本文从工程视角拆解具身数据采集中的典型问题,并给出可落地的流程设计与校验方法,帮助团队构建可持续迭代的高质量数据集。

weixin_30603633的博客 509

BEV和OCC学习-4:数据准备生成pkl文件(NuSences)

info[‘cam_instances’][‘CAM_XXX’][i][‘bbox_3d’]:长度为 7 的列表,以 (x, y, z, l, h, w, yaw) 的顺序表示实例的 3D 边界框。info[‘cam_instances’][‘CAM_XXX’][i][‘bbox’]:2D 边界框标注(3D 框投影的矩形框),顺序为 [x1, y1, x2, y2] 的列表。info[‘cam_instances’][‘CAM_XXX’][i][‘attr_label’]:实例的属性标签。

zfjBIT的专栏 1699

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

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

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

OpenClaw 开机自启配置:Windows/macOS/Linux 全平台技术指南

OpenClaw 开机自启全平台配置指南 本文提供了在Windows、macOS和Linux系统上配置OpenClaw开机自启的完整技术方案。主要内容包括: Windows配置:提供三种方法(Windows服务、任务计划程序、启动文件夹),详细说明服务脚本创建、服务注册和测试流程 macOS配置:使用LaunchAgent实现开机自启,包含配置文件创建和加载方法 Linux配置:通过systemd服务实现,包括服务单元文件创建和启用步骤 系统要求:明确硬件(64位CPU/4GB内存)和软件(各平台操作系统版

一键难忘的博客 2992

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

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

2401_88612756的博客 351

一文吃透 ABAP RESTful Application Programming Model(RAP):从数据建模与行为,到业务服务暴露,再到服务消费

本文介绍了SAP ABAP统一编程模型RAP的核心架构与实践方法,通过构建完整的ZTRAVEL和ZBOOKING业务对象,演示了从数据建模、行为定义到服务暴露的全流程。文章详细说明了RAP三层架构(数据与行为层、服务提供层、服务消费层)的实现方式,包括CDS视图实体定义、行为定义(BDEF)中的事务能力声明、投影与服务绑定等关键步骤。特别强调了ABAP Cloud环境下的开发限制和最佳实践,如使用GUID和late numbering机制,以及如何通过EML语言操作业务对象。最后提供了完整的代码示例,展示了

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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Decorator

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

wlwork66的博客 100

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数据库乐观锁深度解析: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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

科小怪的博客 606

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
上一篇: Jetson Secure Boot:从 PKC/SBK 密钥到熔丝烧录与安全刷机
下一篇: 如何系统学习 OP-TEE:概念、架构与实战
嵌入式孙老师
博客等级 码龄7年 5686粉丝 898原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值