Jetson Edge AI 实战03:L4T 到底是什么?Bootloader、Kernel、RootFS 一次讲清【视频讲解】

> 🎬 本文配套完整视频已发布:

👉 Jetson Edge AI 实战03:L4T 与 Jetson 系统架构|点击进入 B站观看

前两讲,我们先认识了 Jetson 的硬件,又把 JetPack 和 SDK Manager 的关系理了一遍。

到了第三讲,我想开始真正往 Jetson 系统底层走。

只要后面准备做 Jetson 驱动、摄像头、载板适配、Yocto、Secure Boot,基本都会不断碰到一个词:

L4T。

很多人知道 JetPack,却不一定真正理解 L4T。还有一些刚从 Rockchip、i.MX、U-Boot 平台转过来的工程师,会发现 Jetson 的 Bootloader、设备树、Kernel 结构明显更复杂。

所以这一讲不急着做应用,而是先把:

L4T → Bootloader → Kernel → Device Tree → RootFS

这一整条 Jetson 系统链路串起来。

本节课程的主题就是 L4T 与 Jetson 系统架构,后续的驱动、Camera、BSP 和系统定制都会建立在这里。


L4T 到底是什么?和 JetPack 有什么关系?

这是最先要搞清楚的问题。

L4T 全称是:

Linux for Tegra

对于做嵌入式 Linux 的工程师来说,我觉得完全可以先把它理解成:

NVIDIA 为 Jetson 提供的一套官方 Linux BSP。

它负责 Jetson 最底层的系统运行环境,包括 Bootloader、Linux Kernel、硬件驱动,以及基于 Ubuntu LTS 构建的 RootFS。

在这里插入图片描述

而 JetPack 是建立在 L4T 之上的完整开发软件栈。

所以可以先简单记成:

L4T 负责把 Jetson 这台机器真正跑起来。

JetPack 负责在这个基础上继续提供 CUDA、TensorRT、多媒体和 AI 开发环境。

课程里对 L4T 的定位也很明确:它是 JetPack SDK 的核心基础,CUDA、TensorRT、多媒体加速以及系统功能都依赖下面的 L4T。

这个关系一旦理清,后面很多概念就不会混了。


L4T 版本为什么总和 JetPack 一起出现?

第二讲我们已经讲过 JetPack 4、5、6 等版本。

对应到底层,同样存在不同的 L4T 版本。

在这里插入图片描述

课程里整理了一条比较清楚的演进关系:

  • L4T 32.x → JetPack 4.x
  • L4T 34.x → JetPack 5.0 DP
  • L4T 35.x → JetPack 5.1.x
  • L4T 36.x → JetPack 6.x

不同版本还会同时改变:

Linux Kernel、Ubuntu、Bootloader,以及支持的 Jetson 设备。

所以实际项目里经常会看到:

JetPack 6.x
L4T 36.x
Kernel 5.15
Ubuntu 22.04

这不是四套独立的软件。

它们其实属于同一套 Jetson 软件平台版本。

这也是为什么 Jetson 上做 Kernel、驱动、CUDA、多媒体时,版本匹配非常重要。

不是随便拿一个 .ko 模块放进去就能用,也不是换个 Kernel 就一定能正常跑 NVIDIA 的 GPU、ISP 和多媒体组件。


L4T 里面到底包含什么?

真正进入 Jetson BSP 开发以后,我们经常会看到 NVIDIA 提供的:

Drivers、Sources、Docs、Tools。

在这里插入图片描述

这四部分其实很好理解。

Drivers:让系统真正跑起来

这一部分包含已经编译好的驱动和系统组件。

里面会涉及 Kernel、Bootloader、GPU、ISP、Camera、多媒体以及刷机工具。

它的核心作用就是:

让 Jetson 能启动,并且让硬件真正工作。

Sources:允许我们继续定制

包括 Kernel、设备树以及部分软件组件的源码。

这也是我们后面做:

  • 驱动修改
  • Device Tree 定制
  • Carrier Board 适配
  • Kernel 编译

真正要接触的部分。

Jetson 本身并不是所有底层内容都完全开放,课程里把这种方式概括成“半开源”:部分内容可以查看和修改,而更底层的一些初始化仍然由 NVIDIA 控制。

Docs:非常重要,但最容易被忽略

真做 Jetson 项目以后会发现,很多问题靠网上搜索不一定靠谱。

尤其是:

Pinmux、UPHY、Carrier Board、Bootloader、Camera

很多东西还是要回 NVIDIA 官方文档。

Tools:完成构建和调试

编译 Kernel、构建镜像、调试性能,都需要对应工具。

所以 L4T 并不是简单的一份 Linux 源码。

它实际上是一整套完整的 Jetson BSP 开发环境。


把 Jetson Linux 从底到顶拆开

我觉得学习 Jetson 系统最有效的方法,就是不要一开始看一大堆文件。

先分层。

在这里插入图片描述

大致可以拆成四个部分。

1. Boot 阶段

最先解决的是:

系统怎么起来。

这里涉及 BootROM、MB1、MB2、CBoot 或 UEFI。

这一阶段要先完成最基本的硬件准备,例如电源、DDR、时钟以及启动相关配置。

2. Kernel

Bootloader 准备完成后,Linux Kernel 开始接管系统。

Kernel 负责:

  • 内存管理
  • 任务调度
  • PCIe
  • GPU
  • ISP
  • NVENC / NVDEC
  • 各种硬件驱动

Jetson 很多真正的硬件能力,都是从这一层开始建立起来。

3. Device Tree + Driver

这一层对嵌入式工程师应该非常熟悉。

设备树负责描述:

硬件在哪里、地址是什么、总线怎么连接、GPIO 怎么配。

Driver 则负责真正操作硬件。

所以以后遇到:

摄像头为什么没有 probe?

I²C 设备为什么看不到?

GPIO 为什么不工作?

很多时候都会回到:

DTB + Driver。

4. RootFS

最后才进入我们日常最熟悉的 Ubuntu 用户空间。

systemd、系统服务、CUDA、TensorRT、VPI 等内容都运行在这里。

所以整个 Jetson Linux 可以先简单理解为:

Boot → Kernel → DTB / Driver → RootFS → Application

把这条链记住,后面定位问题非常有帮助。


Jetson 开机时到底发生了什么?

换一个角度,如果按照时间顺序看,就是完整的启动流程。

在这里插入图片描述

大致可以理解成:

上电

↓

BootROM

↓

MB1

↓

MB2

↓

UEFI

↓

Kernel

↓

RootFS

↓

systemd

↓

用户应用

所以 Jetson 开机,并不是“直接启动 Linux”。

在 Kernel 之前其实已经做了很多事情。

Bootloader 阶段会负责底层硬件初始化,然后把 Kernel、DTB、initrd 等内容交给 Linux。

Kernel 启动以后继续初始化驱动和硬件。

RootFS 挂载以后,systemd 再启动用户空间服务。

理解这个顺序以后,排查问题会简单很多。

比如:

连 Kernel log 都没有。

那就不要先去检查 Ubuntu 服务,问题大概率发生在 Bootloader 或更早。

如果:

Kernel 已经启动,但是摄像头没有。

那重点就应该看:

设备树、驱动、模块、固件。

如果:

Ubuntu 已经正常启动,但 CUDA 不工作。

这时候再去看 NVIDIA 用户态组件和版本匹配。

所以真正重要的不是记启动命令,而是知道:

问题发生在哪一层。


Jetson Bootloader 为什么看起来比 U-Boot 复杂?

如果以前做过 Rockchip、i.MX 等平台,会比较习惯:

ROM → SPL / TF-A → U-Boot → Kernel

Jetson 明显不一样。

在这里插入图片描述

Jetson Orin 更接近:

BootROM → MB1 → MB2 → UEFI → Kernel

除了启动阶段更多之外,还有一个很重要的东西:

BCT,Boot Configuration Table。

BCT 里面会涉及很多非常底层的板级信息,例如:

  • 电源
  • Pinmux
  • UPHY
  • DDR
  • 电压
  • Clock
  • Carveout
  • 安全参数

这意味着有些硬件配置在进入 Kernel 之前就已经决定了。

这点对于以后做 Carrier Board 非常关键。

以前在某些 ARM 平台上,一个硬件问题可能首先想到:

改 DTS。

但 Jetson 上不一定。

有些配置发生在更早的 Bootloader / BCT 阶段。

所以只改 Kernel Device Tree,有时候根本解决不了问题。


Jetson Kernel 也不只是“一个 Linux Kernel”

继续往 Kernel 里面走,会发现 Jetson 还有几个比较明显的特点。

在这里插入图片描述

NVIDIA OOT 模块

Jetson 的 GPU、ISP、CSI、NVENC 等能力需要 NVIDIA 自己的模块配合。

这里的 OOT,就是:

Out-of-Tree Modules。

它们和 Linux Kernel 一起工作,但对版本匹配要求很高。

所以经常会遇到一个现象:

Kernel 能启动,并不代表 Jetson 的全部硬件能力都正常。

多层设备树

Jetson 的设备树通常不是单一的一份 DTS。

可以从几个层次理解:

SoC

↓

Module

↓

Carrier Board

芯片、模组、载板分别描述自己的硬件信息。

这对于 Jetson 模组化设计很合理,但第一次接触时确实比普通开发板复杂。

Kernel 并不是独立工作的

一个真正完整的 Jetson 系统需要:

Kernel + DTB + NVIDIA OOT Modules + Firmware + RootFS

一起配合。

任何一部分版本不一致,都可能出现奇怪问题。课程里也把 OOT 模块依赖、版本匹配和多层设备树列为了这一讲的重点。


为什么我觉得 L4T 是 Jetson 必须理解的一层?

如果只想跑一个 Demo,确实不用研究这么深。

SDK Manager 刷完系统,装好 JetPack,直接跑模型也可以。

但是一旦进入真实产品:

  • 自己设计 Carrier Board
  • 接 MIPI Camera
  • 改 Device Tree
  • 修改 Kernel Driver
  • 定制 RootFS
  • 做 Yocto
  • Secure Boot
  • A/B OTA
  • 产品量产

最终都会回来碰 L4T。

这也是为什么第三讲开始,我不再只是讲“怎么使用 Jetson”,而是开始往下面拆:

Jetson 为什么能够工作?

理解 L4T,就是从“会用 Jetson”走向“真正理解 Jetson BSP”的第一步。


这一讲,其实记住这几条就够了

如果第一次看,没必要一下记住所有 Boot 阶段。

先记住下面几个关系:

JetPack 建立完整开发环境,L4T 是下面的 Linux BSP 基础。

L4T 包含 Bootloader、Kernel、Driver、RootFS 等核心系统内容。

Jetson 启动主线:Bootloader → Kernel → RootFS。

硬件能否工作,不只取决于 Kernel,还取决于 BCT、DTB、Driver、NVIDIA 模块和用户态库。

把这几个关系先建立起来,后面再看到 L4T 目录、Kernel Source、Device Tree、Bootloader 文件,就不会再是一堆毫无关系的东西。


完整视频讲解

本文对应:

《Jetson Edge AI 实战》第03讲:L4T 与 Jetson 系统架构

这一讲主要围绕:

L4T 与 JetPack → L4T版本 → BSP组成 → Jetson Linux架构 → Bootloader → Kernel → Device Tree → RootFS

完整串了一遍。

文章更适合快速建立系统结构,视频则可以跟着课程图把整个启动流程和系统架构一步步理清。

B站搜索:嵌入式孙老师

第三期视频发布后,我也会继续同步到 B站和 YouTube。

需要本节对应的 PPT、代码及详细学习资料,可以联系本人获取。


前两讲,我们解决的是:

Jetson 是什么?开发环境怎么装?

第三讲开始解决的是:

Jetson 为什么能够这样运行?

从这一讲继续往后,Camera、Driver、Yocto、载板适配和设备安全,其实都会不断回到今天这套系统架构。

把底层结构看懂以后,再去解决具体问题,很多事情会简单得多。

All in AI,不如走向边缘🌞

🎬 本文配套完整视频已发布:
👉 Jetson Edge AI 实战03:L4T 与 Jetson 系统架构|点击进入 B站观看

posted @ 2026-09-24 22:07  嵌入式孙老师  阅读(3)  评论(0)    收藏  举报