大家好,我是孙杰。
最近我和 与非网、贸泽电子 合作,做了一套 Jetson 边缘嵌入式实战课程。
前三讲,我们从 Jetson 硬件平台讲到 JetPack,再进入 L4T,逐渐把 Jetson 的硬件能力、开发环境和底层 BSP 串了起来。
到了第四讲,要继续往产品方向走一步:
JetPack 很适合开发,但真正做产品,系统怎么裁剪、怎么冻结版本、怎么长期维护?
这就是这一讲的主题:用 Yocto 定制 Jetson 系统。

B站视频-配套博文视频:
Jetson Edge AI实战04|Yocto是什么?Jetson系统定制与产品化开发详解
一、为什么 Jetson 产品需要 Yocto?
1. JetPack 很适合开发,但产品阶段需求变了
JetPack 使用 Ubuntu 作为根文件系统,对开发者非常友好。
软件安装方便、生态成熟、Demo 跑得快,非常适合开发和验证。
但设备进入量产阶段以后,我们关心的问题会变成:
- Kernel、Bootloader、Driver 版本能不能固定?
- RootFS 里到底有哪些软件?
- 不需要的软件和服务能不能裁掉?
- 每次构建出来的系统能不能保持一致?
- 一个版本能不能稳定维护几年?
- OTA、安全、应用能不能进入统一构建体系?
Ubuntu 组件多、依赖关系复杂,软件包更新也可能带来版本变化。对于需要长期维护的产品,系统的可控性会变得越来越重要。

可以简单理解:
text
JetPack / Ubuntu
更适合:开发、调试、快速验证
Yocto
更适合:裁剪、定制、版本冻结、长期维护
并不是 JetPack 不好,而是开发阶段和产品阶段解决的问题不同。
二、Yocto 到底是什么?
1. Yocto 不是一个 Linux 发行版
这是第一次接触 Yocto 最容易混淆的地方。
Yocto 不是 Ubuntu、Debian 这样的现成 Linux 发行版,而是一套 用来构建 Linux 系统的框架和工具链。
它允许我们从构建阶段决定:
text
Bootloader 用什么版本
↓
Kernel 用什么配置
↓
加入哪些 Driver
↓
RootFS 安装哪些 Package
↓
启动哪些 Service
↓
最终生成什么 Image
所以 Yocto 最核心的几个特点就是:
可控、可裁剪、可重现。
课程中也重点介绍了 Yocto 对产品级 Linux 系统的意义:从源码和元数据层面控制内核、驱动、RootFS 和系统组件,并支持长期维护。

2. 学 Yocto,真正应该学什么?
初学 Yocto 很容易把注意力放到:
bash
bitbake
devtool
bitbake-layers
但命令只是表面。
更重要的是理解:
text
Layer
Recipe
Machine
Distro
Package
Image
也就是:
一个 Linux 系统究竟是怎样被描述、组织和构建出来的。
我之前也专门写过一本 《Yocto 项目实战教程》,重点就是从实际项目出发,把 Layer、Recipe、Image、SDK 和产品系统构建这套逻辑串起来。
京东链接:
三、为什么 Yocto 很适合 Jetson 产品?
Jetson 并不是一个简单的 ARM Linux 单板。
除了 CPU,还包含:
text
GPU
DLA
ISP / CSI / VI
NVENC / NVDEC
VIC
Camera
NVIDIA 多媒体与 AI 组件
实际做工业相机、机器人、AI Box 等产品时,经常还要修改 Camera、I2C、PCIe、Device Tree、Kernel Driver、图形系统以及上层应用。
这时系统是否可控就非常关键。

课程里总结了一些比较典型的需求:
| Jetson 产品需求 | Yocto 的价值 |
|---|---|
| Camera / ISP / I2C / PCIe 定制 | Kernel、DTS、Driver 统一管理 |
| GPU / ISP / 编解码能力 | NVIDIA BSP 组件统一进入构建体系 |
| Weston / Wayland | 图形系统可以按产品需求选择 |
| Qt / Chromium | 通过 Layer 统一集成 |
| 系统裁剪 | 精确控制 RootFS |
| OTA | 可以构建 A/B 等升级机制 |
| 长周期维护 | 版本冻结、构建可重现 |
| 多型号产品 | BSP 与产品 Layer 可以复用 |
本质上,是开发思维发生了变化:
text
开发阶段:
先把功能跑起来
↓
产品阶段:
系统、版本、升级、维护全部要可控
这正是 Yocto 最有价值的地方。
四、Jetson Yocto 的关键:BSP 与 meta-tegra
1. 先理解什么是 BSP Layer
在 Yocto 中,BSP Layer 解决的是:
这个 Linux 系统怎样在指定硬件上启动并正常工作?
通常包括:
text
Bootloader
Kernel
Device Tree
Driver
Firmware
Board Patch
这和第三讲介绍的 L4T BSP 已经开始对应起来。
2. meta-tegra 把 Jetson 能力带进 Yocto
Jetson 上使用 Yocto,一个非常关键的 BSP Layer 就是 meta-tegra。
它以 L4T 为基础,将 Jetson 平台需要的 Kernel、设备树、GPU、DLA、Camera、NVENC/NVDEC、多媒体以及相关底层组件组织进 Yocto 构建体系。

可以简单理解:
text
L4T
提供 Jetson 底层 BSP
↓
meta-tegra
把 Jetson 能力组织进 Yocto
↓
Product Layer
加入自己的驱动、配置和应用
↓
最终产品镜像
这样前三讲和第四讲就真正串起来了:
text
JetPack
快速把 Jetson 跑起来
↓
L4T
理解 Jetson 系统底座
↓
Yocto + meta-tegra
构建自己的产品系统
五、Yocto SDK:应用开发也和系统保持一致
Yocto 不只是生成一个 RootFS。
它还可以针对当前系统生成配套的 SDK / Toolchain。

例如产品系统里使用:
text
特定版本 GLIBC
特定版本 Qt
特定版本 GStreamer
特定版本 CUDA
特定版本 TensorRT
对应的 Header、Library 和 Toolchain 可以一起进入 SDK。
这样可以减少嵌入式开发中一个很常见的问题:
text
开发环境编译成功
↓
程序拷到目标板
↓
缺少动态库
ABI 不一致
GLIBC 版本不匹配
课程里把 Yocto SDK 的价值归纳为三个方面:
- SDK 与目标系统保持 ABI 一致;
- 系统启用的组件可以进入配套 SDK;
- 工具链和软件版本可以统一冻结。:chatgpt-content-reference{index="4"}
对于工业相机、机器人、边缘 AI Box 这种需要维护多年的产品,这一点非常实用。
六、Yocto 怎么扩展应用?以 Chromium 为例
Yocto 并不只是用来做一个很小的命令行 Linux。
它有丰富的 Layer 生态,可以继续扩展:
text
Qt
Chromium
GStreamer
Docker
Wayland / Weston
各种应用和系统服务
课程中以 Chromium 为例,演示了一次比较直观的软件扩展过程。

整体思路是:
text
找到对应 Layer
↓
加入 BBLAYERS
↓
把 Chromium 加入 Image
↓
BitBake
↓
生成新的系统镜像
例如先加入对应 Layer:
bash
git clone https://github.com/OSSystems/meta-browser.git
然后把 Chromium 加入镜像:
bash
IMAGE_INSTALL += "chromium"
重新构建:
bash
bitbake core-image-weston
这里真正需要理解的不是这几条命令,而是两种思路的区别。
Ubuntu 上通常是:
bash
apt install chromium
Yocto 的思路则是:
text
在系统构建阶段就定义:
这个产品应该包含 Chromium
然后由构建系统生成完整镜像。
这就是 Yocto 所强调的 系统可重复构建和配置可追踪。
七、这一讲真正需要掌握什么?
1. JetPack 和 Yocto 并不是二选一
text
JetPack:
快速开发、验证功能
Yocto:
系统定制、产品交付、长期维护
不同阶段解决不同问题。
2. Yocto 的核心不是 BitBake
比记命令更重要的是理解:
text
Layer → Recipe → Package → Image
以及这些元数据如何共同定义一个 Linux 系统。
3. 学 Jetson Yocto,要先理解 BSP
如果:
text
Bootloader
Kernel
Device Tree
Driver
RootFS
之间的关系还没有理顺,直接进入 Yocto 会很容易迷失。
所以课程按照:
text
JetPack → L4T → Yocto
这个顺序来讲。
4. 产品阶段才真正体现 Yocto 的价值
当项目开始出现:
text
BSP 深度定制
系统裁剪
版本冻结
CI 自动构建
SDK 统一
OTA
Secure Boot
长期维护
Yocto 的优势就会越来越明显。
八、第四讲小结

第四讲是整个系列从"开发"走向"产品"的一个转折点。
前三讲解决的是:
text
第1讲:Jetson 是什么?
↓
第2讲:JetPack 怎么开发?
↓
第3讲:L4T 和 BSP 是什么?
第四讲开始讨论:
text
第4讲:
Jetson 真正做成产品以后,
Linux 系统应该怎么构建和维护?
整个路线就变得很清楚:
text
认识硬件
↓
JetPack 快速开发
↓
L4T 理解系统
↓
Yocto 构建产品
这一讲最值得记住的,其实就一句话:
JetPack 解决"快速开发",Yocto 解决"系统长期可控"。
对于刚学习 Jetson 的同学,不一定马上就要搭一套复杂的 Yocto 工程。
但建议尽早理解这种系统构建思路。
因为一个项目真正从 Demo 走向产品以后,我们最终关心的不再只是:
这个程序现在能不能运行?
而是:
text
这个系统能不能重复构建?
版本能不能冻结?
几年以后还能不能维护?
出了问题能不能追溯?
升级能不能安全完成?
这才是嵌入式 Linux 产品化真正要解决的问题。
All in AI,不如走向边缘🌞