OE4T解决的问题
NVIDIA 官方 Jetson 开发流程一般是:
- JetPack
- SDK Manager
- L4T (Linux for Tegra)
- Ubuntu RootFS
具有上手快,GUI工具多,示例齐全,CUDA/TensorRT/DeepStream 集成成熟,但是系统可裁剪性差,可重复构建能力一般,产品化困难,OTA 管理不够优雅,长期维护成本高。
OE4T 本质上用 Yocto/OpenEmbedded 重新组织 Jetson BSP,把 NVIDIA BSP 变成 Yocto layer,变成真正的可重复构建,系统极致裁剪,OTA 升级更正规,更适合工业产品,长期维护更舒服,更适合 CI/CD 自动化的特点。
环境搭建准备
小编使用的宿主机ubuntu环境是ubuntu-2204 6.8.0-111-generic,编译工程需要使用本地代理127.0.0.1:7897,需要准备预留200G以上的存储空间。测试下位机板子使用的是Jetson Orin NX 16 GB
根据需要进行配置git代理参数执行如下:
bash
git config --global --list #获取git的配置代理参数
#配置本地代理参数
git config --global http.proxy http://127.0.0.1:7897
git config --global https.proxy http://127.0.0.1:7897
#取消本地代理
git config --global --unset http.proxy
git config --global --unset https.proxy
开始获取git工程
bash
git clone https://github.com/OE4T/tegra-demo-distro.git --depth=1 #减少下载的流量
cd tegra-demo-distro
git submodule update --init --depth=1
. ./setup-env -m p3768-0000-p3767-0000 -d tegrademo testBoardBuild
针对上面的setup-env,传参-h 查看已经支持的开发板信息,其中p3767-0000代表Jetson Orin NX / Nano 模组编号,常见如下:
| 模组 | 编号 |
|---|---|
| Orin NX 16GB | p3767-0000 |
| Orin NX 8GB | p3767-0001 |
| Orin Nano 8GB | p3767-0003 |
| Orin Nano 4GB | p3767-0004 |
p3768-0000代表NVIDIA 官方 Orin Nano Developer Kit Carrier Board的开发板底板编号
开始编译前的准备
执行完上面的指令后,根据个人主机的性能参数进行一些额外的配置如下:
bash
source ./setup-env ./testBoardBuild #启动yocto守护程序
vim ./conf/local.conf #编辑配置文件,新增如下内容
BB_NUMBER_THREADS = "3" #BitBake 同时允许执行多少个 task
PARALLEL_MAKE = "-j3" #单个 make 工程内部允许几个线程并行编译
DL_DIR = "~/yocto_downloads/downloads" #Yocto 下载源码包的统一缓存目录
SSTATE_DIR = "~/yocto_downloads/sstate-cache" #Yocto 编译结果缓存
BB_HASHSERVE_DB_DIR = "${SSTATE_DIR}" #Hash Equivalence 数据库目录
关于上面的参数,建议 BB_NUMBER_THREADS x PARALLEL_MAKE 不要超过电脑的cpu数量,也需要根据电脑的的内存进行调整,否则电脑容易卡死并编译失败
执行编译命令和烧录
根据需求选择任一编译的命令
bash
bitbake core-image-minimal #- minimally bootable image (no demo apps, no graphics)
bitbake demo-image-base #- basic image with no graphics
bitbake demo-image-egl #- basic image with DRM/EGL, no window manager
bitbake demo-image-sato #- X11 image with 'sato' UI
bitbake demo-image-weston #- Wayland with Weston compositor
bitbake demo-image-full #- X11/sato UI plus docker, openCV, VPI, TensorRT and multimedia API samples
接下来漫长的等待所有的tasks执行完毕,编译进度下图所示:

编译完成如下:
bash
$ bitbake demo-image-base
Loading cache: 100% |####################################################################################################################################################################################################| Time: 0:00:01
Loaded 5792 entries from dependency cache.
NOTE: Resolving any missing task queue dependencies
NOTE: Multiple providers are available for runtime libnss-mdns (avahi-libnss-mdns, mdns)
Consider defining a PREFERRED_RPROVIDER entry to match libnss-mdns
Build Configuration:
BB_VERSION = "2.19.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal"
TARGET_SYS = "aarch64-oe4t-linux"
MACHINE = "p3768-0000-p3767-0000"
SDKMACHINE = "x86_64"
DISTRO = "tegrademo"
DISTRO_VERSION = "6.1+snapshot-97a940bfdeaa3f9f4442a6fbb0fabe1ce5eaff69"
TUNE_FEATURES = "aarch64 armv8a crc"
meta = "HEAD:97a940bfdeaa3f9f4442a6fbb0fabe1ce5eaff69"
meta-tegra = "HEAD:f6987622d98cb4ea56c3ec880ef2016da7888888"
meta-oe
meta-python
meta-networking
meta-filesystems = "HEAD:420222862f5a6d95023b8f5f3b7e1808b2264ef9"
meta-virtualization = "HEAD:4ba5825ee16fcded87f4d555b4ed7a7615dc67ac"
meta-tegra-community = "HEAD:b47ec3876125eb8602ee4562b6c682cafe321540"
meta-tegra-support
meta-demo-ci
meta-tegrademo = "master:295210b0c43d6d7c1968879122ca134391b266af"
Sstate summary: Wanted 0 Local 0 Mirrors 0 Missed 0 Current 4290 (0% match, 100% complete)
Initialising tasks: 100% |###############################################################################################################################################################################################| Time: 0:00:06
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 7723 tasks of which 7723 didn't need to be rerun and all succeeded.
烧录成果物在如下的文件夹内:./tmp/deploy/images/p3768-0000-p3767-0000/demo-image-base-p3768-0000-p3767-0000.rootfs.tegraflash-tar.zst,解压相关的文件命令:tar --zstd -xvf ./demo-image-base-p3768-0000-p3767-0000.rootfs.tegraflash-tar.zst
将orin nx的rec管脚接地进入到烧录模式,执行如下命令进行烧录操作:
bash
sudo ./initrd-flash
默认登录名为root,没有密码,直接回车登录
未待结束。。。