为什么有了 Device Tree,Jetson 还需要 BCT?从 `.dts`、`.bct` 到 UEFI 讲清 Jetson 启动配置

系统开机设备寻址全流程:从 UEFI 伪代码到内核映射 在系统开机过程中,设备寻址是一个关键环节,它涉及到 UEFI 固件对硬件设备的初步探测和资源分配,以及 Linux 内核在此基础上进行的二次加工和冲突化解。 本文以 AMD 集成 GPU(ACPI 描述)和 NVIDIA 独立显卡(PCIe 设备)为例,详细介绍这一过程。 阅读详情

📺 B站 嵌入式孙老师:博主个人介绍

📘 博主书籍-京东购买链接*:Yocto项目实战教程

📘 加博主微信,进技术交流群: jerrydev


为什么有了 Device Tree,Jetson 还需要 BCT?从 .dts、.bct 到 UEFI 讲清 Jetson 启动配置

在 Jetson BSP 中,经常能同时看到这些文件:

tegra264-br-bct-common-l4t.dts
tegra264-mb1-bct-pinmux-*.dts
tegra264-mb1-bct-pmic-*.dts
tegra264-p3834-0008-sdram-bct-l4t.dts

br_bct_BR.bct
applet_t264_sigheader.bin.encrypt

kernel-*.dtb
*.dtbo

在这里插入图片描述

这里很容易产生三个疑问:

  1. BCT 为什么也使用 .dts/.dtsi?
  2. 已经有 Device Tree,为什么还需要这么多 BCT?
  3. 前面用了 BCT,为什么到了 UEFI 又开始使用 Device Tree?

问题的关键在于:

DTS 是配置的源文件语言,BCT 是早期启动固件使用的配置产物,DTB 是 UEFI 或 Linux 使用的设备树产物。

它们并不是同一层面的概念。
在这里插入图片描述


一、先看 Jetson 启动配置的完整分层

Jetson 并不是从上电开始就运行 UEFI 和 Linux,而是由多个启动阶段逐步建立运行环境。

上电
 │
 ▼
Boot ROM阶段
 │  读取BR-BCT
 │  定位、认证并加载后续启动组件
 ▼
MB1
 │  读取Mem-BCT和MB1-BCT
 │  初始化DRAM、Pinmux、电源、UPHY和安全环境
 ▼
MB2
 │  读取MB2-BCT
 │  完成后续平台初始化
 ▼
UEFI
 │  使用UEFI阶段的Device Tree配置
 │  选择Kernel、Kernel DTB和启动设备
 ▼
Linux Kernel
 │  解析Kernel Device Tree
 │  匹配驱动并管理设备
 ▼
用户空间

在 T264 的官方启动架构中,最早期 ROM 阶段还可进一步划分为 PSCROM、HPSEROM、SBROM 等组件。为了便于理解,本文将这些不能由用户替换、位于启动链最前端的 ROM 组件统称为 Boot ROM 阶段。(NVIDIA Docs)

这条流程说明了一件事:

Jetson 不是在 BCT 和 Device Tree 之间二选一,而是在不同启动阶段使用不同的配置机制。


二、为什么不能从上电开始就使用 Kernel Device Tree?

Linux Device Tree 描述的是:

系统中有哪些设备
设备占用哪些寄存器和中断
依赖哪些Clock、Reset和Regulator
应该匹配哪个Linux驱动

但要加载 Linux 和 Kernel DTB,系统首先必须具备:

可访问的启动存储
可工作的外部DRAM
基本电源和时钟
正确的Pinmux
已建立的内存安全区域
可运行的后续Bootloader

这就产生了一个典型的启动依赖问题:

想加载Kernel DTB
        ↓
需要先初始化内存和启动存储
        ↓
初始化内存和启动存储又需要配置数据

如果把所有配置都放在 Kernel DTB 中,就会陷入循环:

硬件没有初始化
    ↓
无法正常加载和使用Kernel DTB

没有配置数据
    ↓
又不知道如何初始化硬件

BCT 的作用,就是在 UEFI 和 Linux 尚未运行时,为早期启动组件提供能够直接使用的平台配置。

MB1 会根据 Memory BCT 初始化 SDRAM,并根据 MB1-BCT 完成 Pinmux、GPIO、Pad Voltage、安全配置、内存 carveout 等工作。此时 Linux 尚未启动。(NVIDIA Docs)

可以用一句话概括:

BCT 负责建立 UEFI 和 Linux 能够运行的基础环境;Kernel Device Tree 负责描述 Linux 接管之后的硬件。


三、为什么 Jetson 需要多个 BCT?

因为 Jetson 启动不是一个程序完成的。

不同阶段运行环境不同、权限不同、任务也不同。每一个启动组件只应该读取自己需要的数据。

配置类型主要消费者解决的问题
BR-BCTBoot ROM阶段后续组件在哪里、如何加载和验证
Mem-BCTMB1DRAM、MC、EMC如何初始化
MB1-BCTMB1及相关早期流程Pinmux、GPIO、电源、UPHY、安全等如何配置
MB2-BCTMB2MB2阶段的平台与安全配置
UEFI DTUEFIUEFI如何认识平台并选择启动资源
Kernel DTLinux KernelLinux如何识别和驱动设备

1. BR-BCT:告诉 Boot ROM 从哪里继续启动

BR-BCT 主要保存 Boot ROM 所需的启动信息,例如:

启动介质配置
启动组件的位置
组件大小
加载地址
入口地址
Hash和认证相关信息
启动链相关状态

它解决的是:

芯片刚上电时,如何找到、验证并加载下一级启动程序?

这类数据并不是 Linux 设备拓扑,因此不适合放进 Kernel Device Tree。


2. Mem-BCT:先让 DRAM 工作

MB1 要加载体积更大的固件、UEFI 和 Linux,首先必须初始化外部内存。

Mem-BCT 中主要包含:

SDRAM配置
Memory Controller配置
External Memory Controller配置
内存训练参数
不同RAM Code对应的配置
Warmboot和频率切换相关参数

在实际 T264 BSP 配置目录中,可以看到类似文件:

tegra264-p3834-0008-sdram-bct-l4t.dts
tegra264-p3834-0008-sdram-bct-warmboot-l4t.dts
tegra264-p3834-0008-sdram.dtsi
tegra264-p3834-0008-sdram-dfs.dts

tegra264-p3834-0005-rc00.dtsi
...
tegra264-p3834-0005-rc15.dtsi

这些文件反映了不同模组、内存配置和 RAM Code 对应的参数组合。


3. MB1-BCT:完成早期平台初始化

这是 BSP Bring-up 中最常接触的一类 BCT。

从实际 T264 BSP 文件名可以看出,MB1-BCT 配置被拆分成多个功能模块:

tegra264-mb1-bct-pinmux-*.dts
tegra264-mb1-bct-gpio-*.dts
tegra264-mb1-bct-padvoltage-*.dts
tegra264-mb1-bct-pmic-*.dts
tegra264-mb1-bct-uphy-lanes-*.dts
tegra264-mb1-bct-prod-*.dts
tegra264-mb1-bct-cprod-*.dts
tegra264-mb1-bct-carveout-*.dtsi
tegra264-mb1-bct-ratchet-*.dts
tegra264-mb1-bct-misc-*.dts

对应的功能大致包括:

MB1-BCT
├── Pinmux和GPIO初始状态
├── Pad Voltage
├── PMIC与电源配置
├── UPHY Lane分配
├── Controller Prod参数
├── 启动存储配置
├── 内存Carveout
├── 安全与防回滚配置
└── 其他平台静态参数

它解决的是:

Linux 启动以前,SoC 和板级硬件应该处于什么状态?

NVIDIA 将 BCT 定义为供特定启动组件使用的平台配置数据;MB1 和相关启动阶段通过 MB1-BCT 获取平台静态配置。(NVIDIA Docs)


4. MB2-BCT:服务于后续启动阶段

实际 BSP 中还可以看到:

tegra264-mb2-bct-common.dtsi
tegra264-mb2-bct-misc-*.dts
tegra264-mb2-bct-firewall-*.dts

这些配置主要服务于 MB2 阶段的平台、安全和其他启动参数。

需要注意的是:

不能只凭文件名判断一份配置最终属于哪个 BCT。

正确的判断方法是继续查看:

它被哪个Board Config变量引用
由哪个工具处理
最终生成哪个二进制文件
由哪个启动组件读取

例如,某些文件名中虽然带有 mb1-bct,但最终可能通过特定配置变量进入 MB2 阶段的生成流程。


四、BCT 的 .dts/.dtsi 与 .bct 到底有什么区别?

这是最容易混淆的地方。

.dts/.dtsi 是源文件

例如:

tegra264-br-bct-common-l4t.dts
tegra264-mb1-bct-pinmux-*.dts
tegra264-mb1-bct-pmic-*.dts

它们是便于工程师阅读、组合和维护的文本配置。

其中:

.dts  :通常作为一个完整配置的入口
.dtsi :通常作为可复用或可覆盖的配置片段

.bct 是生成后的二进制配置

例如:

br_bct_BR.bct

它是经过 NVIDIA BCT 工具链处理后生成的二进制 Boot Configuration Table,供早期启动组件读取。

完整关系是:

BCT .dts/.dtsi
       │
       │  include、合并和覆盖
       ▼
 tegrabct_v2 / TegraFlash工具链
       │
       ▼
     二进制.bct
       │
       ▼
 Boot ROM / MB1 / MB2读取

从 T23x 开始,NVIDIA 将 BCT 的源配置格式改为 DTS。Boot ROM 和 MB1 实际消费的仍是由 tegrabct_v2 生成的二进制 BCT,而不是 Linux 使用的普通 DTB。(NVIDIA Docs)

因此:

.dts/.dtsi = 工程师维护的BCT源码

.bct       = 启动固件读取的二进制产物

br_bct_BR.bct 并不是改了后缀的 DTB,也不能使用 Linux Device Tree 的方式理解或直接修改。


五、既然不是 Linux Device Tree,为什么 BCT 也使用 DTS?

因为 DTS 在这里首先是一种结构化配置语言。

它具备几个明显优势:

支持树状组织
支持#include
支持公共配置复用
支持板级差异覆盖
适合不同模组、载板和SKU组合
已有成熟的解析和检查工具

例如,同一份公共配置可以被不同板级入口文件包含:

#include "tegra264-mb1-bct-defaults.dtsi"
#include "tegra264-mb1-bct-pmic-common.dtsi"
#include "tegra264-board-specific.dtsi"

这比大量平铺的:

parameter_a = value_a;
parameter_b = value_b;
parameter_c = value_c;

更容易维护复杂 SoC 的平台配置。

但必须注意:

使用 DTS 语法,不代表它就是 Linux Device Tree。

决定一份 DTS 性质的,不是文件后缀,而是:

谁读取它
什么时候读取
遵循什么Binding
由什么工具处理
最终生成什么

可以类比为:

JSON 既可以保存应用程序设置,也可以描述网络协议。格式相同,不代表内容、消费者和生命周期相同。


六、applet_t264_sigheader.bin.encrypt 又是什么?

它与 BCT 不是同一类文件。

br_bct_BR.bct

是配置数据。

而:

applet_t264_sigheader.bin.encrypt

是经过启动安全工具链处理的可执行固件镜像。

文件名可以分成三部分理解:

applet_t264
    └── Applet可执行程序

sigheader
    └── 添加了启动认证相关头部

encrypt
    └── 经过签名/加密处理流程生成的产物

Applet 通常参与 RCM 刷机阶段:

Host上的TegraFlash
        │
        │ USB Recovery/RCM
        ▼
发送Applet到目标SoC
        │
        ▼
Applet在早期环境中运行
        │
        ├── 读取芯片信息
        ├── 读取Fuse和RAM Code
        ├── 获取板级信息
        └── 协助后续刷机流程

因此:

文件本质
br_bct_BR.bctBoot ROM使用的配置数据
applet_t264_sigheader.bin.encrypt经过安全封装的可执行程序
mb1_t264_prod.binMB1可执行固件
mb2_t264.binMB2可执行固件
kernel-*.dtbLinux使用的设备树
*.dtboDevice Tree Overlay

TegraSign 工具负责生成签名、Hash以及特定模式下的加密数据。不过,仅凭文件名中的 .encrypt,不能直接判断设备是否已经烧写 OEM Key 或启用了特定量产安全状态,最终状态还取决于使用的密钥、Fuse和刷机参数。(NVIDIA Docs)


七、为什么到了 UEFI 又开始使用 Device Tree?

因为运行到 UEFI 时,启动环境已经完全不同了。

在前面的 BCT 和早期固件协助下,系统已经完成:

DRAM初始化
基本电源和时钟初始化
早期Pinmux配置
启动存储访问
内存安全区域建立
UEFI镜像加载和认证

此时 UEFI 已经具备:

可用的外部内存
较完整的执行环境
访问启动存储的能力
解析FDT的能力
加载文件和启动操作系统的能力

所以 UEFI 可以使用更通用的 Device Tree 机制。

Jetson UEFI 中的 Device Tree 主要有两个角色。

1. 服务于 UEFI 自身

UEFI 需要认识当前平台的部分信息,例如:

启动设备
平台配置
固件相关节点
Reserved Memory
板级识别信息
启动模式

这些信息可以通过 UEFI 阶段的 DTB 或 DTBO 提供。

2. 为 Linux 准备 Kernel DTB

Jetson 的 L4tLauncher 负责加载 Kernel 和 Kernel DTB。

UEFI
 │
 ├── 读取启动配置
 ├── 选择Kernel Image
 ├── 选择Kernel DTB
 ├── 应用相关Overlay
 ▼
将Kernel和最终DTB交给Linux

UEFI 可以根据启动模式和配置选择独立的 Kernel DTB。在部分 Jetson 启动配置中,如果没有找到指定的 Kernel DTB,还可能使用 UEFI 当前持有的 DTB作为后备。(NVIDIA Docs)

所以不能简单地说:

BCT用于Bootloader
Device Tree用于Linux

更准确的说法是:

BCT
负责最早期的平台建立

UEFI Device Tree
服务于固件阶段的平台描述和启动选择

Kernel Device Tree
服务于Linux驱动模型

八、BCT、UEFI DT 和 Kernel DT 是否存在重复配置?

会存在少量重叠,但它们承担的职责不同。

以一个 GPIO 控制的外设复位信号为例:

MB1-BCT
├── 将PAD配置为GPIO
├── 配置Pull
├── 配置Tristate
├── 设置输入输出能力
└── 设置启动早期状态

UEFI Device Tree
└── UEFI需要使用该设备时,描述固件阶段资源

Kernel Device Tree
├── 指定哪个Linux设备使用该GPIO
├── 定义高有效或低有效
└── 由Linux驱动申请并控制

Kernel DTS 中即使写了:

reset-gpios = <&gpio 10 GPIO_ACTIVE_LOW>;

也不能自动替代 MB1-BCT 中的 Pad 和 Pinmux 配置。

如果 PAD 在早期阶段仍然被配置为其他 SFIO 功能,或者处于不正确的 Tristate 状态,那么 Linux 驱动即使成功申请 GPIO,物理引脚也可能无法产生预期电平。

这不是配置重复,而是同一硬件在不同生命周期阶段分别被管理。


九、如何快速判断一个 Jetson BSP 文件属于哪一层?

不要只看 .dts 后缀,建议按照以下顺序判断。

第一步:看文件名和目录

*-br-bct-*       → 很可能是BR-BCT源码
*-mb1-bct-*      → 很可能是MB1-BCT源码
*-mb2-bct-*      → 很可能是MB2-BCT源码
*-sdram-*        → 很可能属于Mem-BCT
kernel/*.dts     → 很可能属于Kernel Device Tree
uefi/*.dts       → 很可能属于UEFI配置或Overlay

文件名只能作为线索,不能作为最终依据。

第二步:看 Board Config 中的引用变量

例如:

BCTFILE
PINMUX_CONFIG
PMIC_CONFIG
UPHY_CONFIG
EMC_BCT
MB2_BCT
SCR_CONFIG
OVERLAY_DTB_FILE
DTB_FILE

这些变量决定配置进入哪条生成链。

第三步:看处理工具

tegrabct_v2 / TegraFlash
    → BCT生成链

dtc / Kernel Build
    → Kernel DTB生成链

EDK2 Build
    → UEFI DTB/DTBO生成链

第四步:看最终产物

.bct
    → 启动配置二进制

.dtb/.dtbo
    → Flattened Device Tree

.bin/.bin.encrypt
    → 固件或可执行镜像

第五步:确认最终消费者

Boot ROM
MB1
MB2
UEFI
Linux Kernel

最终消费者才真正决定这个文件的性质。


十、完整生成关系

将这些文件放在一起,可以得到一条比较清晰的生成链:

板级配置文件
│
├── BR-BCT .dts/.dtsi
├── Mem-BCT .dts/.dtsi
├── MB1-BCT .dts/.dtsi
├── MB2-BCT .dts/.dtsi
│
▼
tegrabct_v2 / TegraFlash
│
├── br_bct*.bct
├── mem_bct*.bct
├── mb1_bct*.bct
└── mb2_bct*.bct
│
▼
签名、Hash和安全封装
│
▼
启动分区或刷机镜像

另一条链是:

UEFI .dts/.dtsi
        │
        ▼
UEFI DTB/DTBO
        │
        ▼
       UEFI

Linux 则使用:

Kernel .dts/.dtsi
        │
        ▼
       dtc
        │
        ▼
Kernel DTB/DTBO
        │
        ▼
 Linux Kernel

三条链都可能使用 DTS 语法,但最终产物和消费者完全不同。


总结

Jetson 使用多个 BCT,并不是因为 Device Tree 能力不足,而是因为最早期启动阶段还没有运行 UEFI 和 Linux,也没有完整的内存、存储及驱动环境。

BR-BCT、Mem-BCT、MB1-BCT 和 MB2-BCT 分别服务于不同启动阶段:

BR-BCT
解决“如何找到并验证后续启动组件”

Mem-BCT
解决“如何让DRAM工作”

MB1-BCT
解决“如何建立SoC和板级硬件的早期状态”

MB2-BCT
解决“如何完成后续平台初始化”

UEFI Device Tree
解决“固件阶段如何认识平台并加载操作系统”

Kernel Device Tree
解决“Linux如何识别和管理硬件”

BCT 之所以也使用 .dts/.dtsi,只是因为 NVIDIA 选择了 DTS 作为结构化配置语言:

DTS决定配置怎么写。

BCT决定配置给哪个启动组件使用。

DTB决定哪棵设备树交给UEFI或Linux。

最准确的理解是:

启动越早,配置越专用、固定并强调安全验证;启动越晚,平台描述越通用、动态,并逐渐交给 UEFI 和 Linux 管理。

因此,BCT 与 Device Tree 并不是相互替代的两套机制,而是 Jetson 分阶段启动架构中的上下游关系:

BCT先建立平台
    ↓
UEFI组织启动
    ↓
Kernel Device Tree完成Linux接管
daintree:ARMv8-A内核(带有UEFI引导程序) 丹特里 一个ARMv8-A操作系统以及一个UEFI引导程序,全部以Zig编写。 目前针对: QEMU(在macOS上使用HVF加速)和EDK2 ROCKPro64,带有U-Boot( ) 我希望保留一个小的。 dainboot 简要介绍Zig的UEFI支持。 像这样的靴子: 检查加载的图像选项。 您可以传递kernel 0x12345678 0x1234来为它提供已经加载到RAM中的内核的位置。 对于TFTP引导很有用,它本身对于在裸机上加快开发周期非常有用。 您还可以传递dtb 0x12345678 0x1234来提供有关内存中已经存在的DTB / FDT(设备树blob /扁平化设备树)的信息。 用空格分隔连续的选项,即kernel <addr> <len> dtb <addr> <len> 。 如果未从内存中加载内核或DTB(或两者),则扫描UEFI系统知道的文件 立即下载

相关推荐

VScode+MPLAB AI助手:Microchip MCU开发全流程实战解析

本文详细解析了如何使用VScode搭配MPLAB AI助手进行Microchip MCU开发的完整流程。从环境配置、工程创建到代码生成与调试,全面介绍了AI助手在提升开发效率、优化代码和故障排除方面的实际应用,为嵌入式开发者提供了一套高效的开发解决方案。

hh234的博客 1130

FT2000+低温情况下RTC守时问题

飞腾2000+芯片通过I2C连接一块RTC时钟芯片(BellingBL5372)来实现麒麟信安系统下后的守时功能。目前BIOS支持UEFI功能,BIOS上电后能获取RTC时间,并将时间写入相应的UEFI变量或内存区域,操作系统上电后使用UEFI的APIs来读取相应的RTC时间变量或内存区域。

无知的我 2074

用Multisim仿真石英晶体振荡电路:从等效模型到频响曲线实战

本文通过Multisim软件,从构建石英晶体等效电路模型入手,详细演示了如何仿真分析其电抗频率特性曲线,并实战搭建与调试皮尔斯振荡电路。文章深入探讨了振荡必须工作在串联与并联谐振点之间感性区的原因,为电子设计者提供了从理论到仿真的完整可视化学习路径。

ik67890123的博客 497

【UEFI学习】UEFI 开发中的设备树DTS 文件深度解析

本文深入解析了设备树(Device Tree)在UEFI/EDK II环境(特别是ARM和嵌入式平台)中的作用与实现。设备树作为描述硬件拓扑的数据结构,在非x86平台中提供了比ACPI更灵活的硬件抽象方式。文章详细介绍了设备树的格式规范(包括DTS源文件、DTB二进制布局)、核心数据结构(节点组织、Token序列)以及关键属性(如内存、中断、总线等配置)。通过对比设备树与ACPI的差异,阐明了各自适用的场景。重点分析了UEFI启动链中设备树的生命周期,从固件初始化到OS加载的全过程,并提供了动态修补(Fix

就聊这个了,window/linux 嵌入式驱动 1167

eDP/DP接口简介

目前,在视频传输协议以及接口领域,外部接口主要是DP与HDMI两分天下,当然之前出现过很多接口-VGA, DVI等等,最新平台基本以这两个为主;笔记本内部接口就基本上使用eDP((Embedded Display Port))作为标准接口来驱动液晶屏了。那么问题来了,eDP和DP,是完全兼容的么?eDP,DP,HDMI,这三种接口的显示器,可以插在同一个接口上使用么?这篇文章,就会从硬件和一部分协议的角度分析一下这三大协议。

weixin_50518899的博客 2万+

AUTOSAR—TM模块介绍及使用概要

根据所要测量的场景不同,有1us16bit、1us24bit、1us32bit、100us32bit四种类型可选;TM模块在服务层,提供一些基于时间的服务功能,如测量CPU和任务的负载,周期执行一些回调函数。2、对于需要在不同时间执行不同逻辑的周期任务中,可以搭建时间状态机:参考Tm用户手册;定时器复位、获取时间宽度、定时器转换、定时器同步、繁忙等待。偏移定时器实例的参考时间,直接将定时器数值进行偏移;以1us16bit定时器类型为例,讲几个常用函数。同步两个定时器,把源定时器时间值给到目的定时器。

qq_42479987的博客 604

飞腾平台 UEFI 与 U-Boot 启动方案对比及选型建议

在飞腾处理器平台上,系统启动方案主要包括两种技术路线:UEFI 固件方式与 U-Boot 引导方式。在飞腾平台中,UEFI可完成完整PCIe枚举及设备初始化,而U-Boot通常仅支持基础初始化,难以支持复杂拓扑(如X100桥片扩展设备)。对于存在USB安装需求、PCIe扩展(如X100桥片)及标准操作系统部署需求的项目,应优先选择UEFI方案。在飞腾平台实际工程中,U-Boot方式通常采用镜像直接写入(dd)方式完成系统部署,缺乏标准安装流程。支持(如Kickstart)一般不支持(飞腾平台常见)

无知的我 663

14、OpenClaw(龙虾助手)Skill 开发完整规范(2026最新版)

OpenClaw Skill 开发指南摘要: Skill 是 OpenClaw AI 助手的核心扩展机制,支持声明式(SKILL.md)和原生代码(JS/TS/Python)两种开发模式。声明式 Skill 通过 Markdown 定义触发条件和执行流程,适合简单业务;原生代码 Skill 提供完整编程能力,适合复杂场景。开发需遵循标准化项目结构,包含 SKILL.md(元数据)、manifest.json(权限声明)等文件,并严格处理错误和多系统适配。新版要求原生 Skill 必须声明文件、网络等权限,确

欢迎光临~知1而N的博客 1234

【linux】Linux内核DTB文件启动的几种方式

Device Tree简介 Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a fucking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大...

qq_43248127的博客 1549

ABAP 大规模数据并行处理实战,六套 Parallel Processing Framework 如何选,性能调优真正该盯住什么

如果今天真的面对那份执行 14 个小时的生产报表,我不会马上把原来的 Loop 改成 50 个aRFC。我会先用 SAT、ST12、SQL Monitor 和 HANA 侧工具确认时间到底花在哪里。如果 90% 时间其实消耗在一条低效 SQL 上,Parallel Processing 只是让 50 个 Worker 同时执行那条低效 SQL,数据库会比原来更痛苦。应该先把串行逻辑本身优化到合理水平。该做 Set-based Processing 的地方先交给 HANA。该避免SELECT。

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

运维颠覆!一文解锁AI赋能运维实战秘籍,效率飙升!

将AI应用于运维工作是一场极具价值的变革,从故障预测与诊断到自动化任务执行,再到资源管理优化,AI都展现出巨大潜力。尽管在实践过程中会面临数据质量、模型复杂性等挑战,但通过合理的技术选型和解决方案,我们能够充分挖掘AI的优势,实现运维工作的高效、智能转型。持续探索和创新AI在运维领域的应用,将为企业的数字化发展提供坚实保障。在科技飞速发展的当下,运维领域正经历着深刻变革,AI的融入成为提升运维效率与质量的关键。本文将深入实战,带你领略AI如何在运维各环节大显身手,让你的运维工作开启智能高效新模式。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 401

【UEFI学习】UEFI 与 UBOOT 的核心差异深度对比分析

UEFI与UBOOT引导技术对比分析 摘要:UEFI和UBOOT是两种主流的引导技术,在起源、架构和启动流程上存在显著差异。UEFI由UEFI论坛主导,采用模块化标准架构,适用于PC和服务器的标准化引导;UBOOT源于开源社区,采用轻量分层设计,专注嵌入式系统的灵活适配。UEFI启动流程包含6个严格阶段,强调安全验证和驱动标准化;UBOOT则简化为4个核心阶段,注重硬件直接初始化和快速引导。两者在模块封装、硬件适配方式和可扩展性方面各具特色,分别满足不同应用场景的需求。

就聊这个了,window/linux 嵌入式驱动 1310

sas协议(SAS PL-3)之Zoning功能

1 Zoning overview SAS zoning is implemented by a set of zoning expander devices with zoning enabled that define a zoned portion of a service delivery subsystem (ZPSDS)服务子系统. The zoning expander devices control whether a phy is permitted to participate in

sinat_37817094的博客 1530

Linux驱动之设备树

补充:标签是标记节点的方法,可以用唯一的名称来标识节点,在dt编译器编译过程中,dt编译器将该名称转换为唯一的32位值,之后可以使用标签引用节点,因为标签对于节点是唯一的。节点的属性和子节点(如果有)在 FDT_END_NODE 之前表示,因此这些子节点的 FDT_BEGIN_NODE 和 FDT_END_NODE 标记嵌套在父节点的标记中。应存在以将文件标识为版本 1 DTS(没有此标记的 dts 文件将被 dtc 视为处于过时的版本 0 中,除了其他小的但不兼容的更改之外,它使用不同的整数格式)。

Android系统攻城狮 971

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

UEFI简介

前言大多数人接触UEFI都是在PC的应用场景上,有在PC上安装过多操作系统的经历的同学,通常会进入UEFI界面设置操作系统引导顺序、CPU虚拟化等设置。UEFI诞生之初也确实是作为BIOS的替代者,主要应用在PC电脑上。随着手机/平板等移动设备的发展,高通从MSM8998开始使用UEFI替代LK(Little Kernel)作为手机的Bootloader,作为一个嵌入式开...

内核工匠 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

(ROC-RK3568-PC) 裸机22_rk3568 uefi 编译

项目地址:https://github.com/jaredmcneill/quartz64_uefi 环境 win10+WSL

weixin_37556843的博客 3355

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

UEFI 基础教程 (七) - HOB 简单使用

一、 编写源代码 编写UEFI PEI 驱动 代码C:\edkii\OvmfPkg\MyHelloWorldPEIMHob\MyHelloWorldPEIMHob.c, EFI_GUID gMyHelloWorldPEIGUID = { 0xbdb38129, 0x4d65, 0x39f4, { 0x72, 0x12, 0x68, 0xcf, 0x5a, 0x19, 0xa, 0xf8 }};...

xiaopangzi313的专栏 8062

bootloader启动参数传递(一)

arm平台 /* * Kernel startup entry point. * --------------------------- * * This is normally called from the decompressor code. The requirements * are: MMU = off, D-cache = off, I-cache = don...

程序猿Ricky的日常干货 1765

龙芯平台下的设备树

设备树 **设备树 (Device Tree) **,起源于Arm嵌入式设备. 是一种描述硬件的数据结构. 在最初调试多U多串的龙芯定制化工控平台时,使用过这个接口. 在linux内核中也有对应的设备树的介绍,与BIOS下的描述一一对应. [TOC] 设备树从哪里来到哪里去? #mermaid-svg-36scXJ7TsyPfTxFi .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-fami

一个有信仰的社会主义分享者~ 1476

使用dtb文件引导内核

在 QEMU 以 vexpress-a15运行 3.10.28内核的时候,刚开始 boot之后就停住了。

小猪爱拱地 7616

Linux内核笔记之KASLR

KASLR, kernel address space layout randomization,内核地址空间布局随机化,是linux内核的一个非常重要的安全机制。KASLR技术可以让kernel image映射的地址相对于链接地址有个偏移,安全性上有一定的提升。

Hober 1万+

dtb

在kernel build目录下的scripts/dtc/dtc,会生成用于build dts的tool dtc,可以通过下面的数据 将dtb 反汇编成dts ./scripts/dtc/dtc  -I dtb -O dts arch/arm64/boot/dts/soc/soc.dtb > ~a.dts 在kernel的proc 目录下会存在config.gz, zcat confi

jason的笔记 1201

UEFI HOB

HOB:Hand-off Block 在PEI的执行过程中,PEI Phase提供了一种简单的机制来为数据存储分配内存,这个数据存储区被称为HOBs。 这个数据存储区的基本内容为Hand-off Block,即HOB。 在内存中,连续存在的HOBs对PEI Phase的可执

1万+

将生成的DTB二进制文件反向解析为dts 可读文件

用到的工具 kernel/script/dtc/dtc 切换到 kernel/script/dtc 下执行      ./dtc -I dtb -O dts -o test.dts xxx.dtb 可以研究一下生成的test.dts文件 同理也可以将dts文件转换为dtb文件     ./dtc -I dts -O dtb -o xxx.dtb test.dts 另外: dts...

YuZhuQue的博客 1971

【ARM64】DTB地址从uboot传递到kernel的流程

前言        最近在移植一款蓝牙芯片的过程中用到了设备树,一开始在研究kernel是怎么解析DTB的,后来就很好奇kernel是怎么找到DTB的,所以就有了这篇文章,纯粹记录一下自己的学习过程吧。 正文        下面我就从两个阶段来讲述,第一个阶段就是uboot是怎么将DTB的地址传递给kernel;第二个阶段就是kernel怎么根据DTB的地址,并解析DTB的。 uboot阶...

lee_jimmy的博客 6932

直付通申请资质安全吗?靠谱吗?

风控规则的运行效果要定期复盘,拦截记录、误伤情况、处理时效都要看,规则持续优化,防护效果才能保持,动态调整的风控,比一成不变的规则更可靠,安全保障更到位,动态调整的风控更可靠,更有效,风控常复盘,规则常优化,防护更有效。资金记录的完整保存很重要,流水明细定期归档,账目随时可查,配合日常核对,资金安全尽在掌握,完善的记录习惯,既是风控要求,也是管理规范,长期坚持受益良多,更放心,流水留存好,随时可对账,管理更规范。方向更清晰,资质看清楚,边界问明白,判断更准确。更稳固,职责边界清,配合更默契,安全更有底。

qq_15110143的博客 343
上一篇: Jetson 启动 LOGO 无黑屏切换:从 Bootloader 到 APP 首屏的显示接力机制解析
下一篇: 视频能跑,时间却可能是错的:Chrony 打通 GStreamer、RTP 与录像时间链路
嵌入式孙老师
博客等级 码龄7年 5686粉丝 898原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值