How to upgrade the Jetson system to support VEYE cameras/zh
1 概述
本章节描述怎样更新Jetson系统以支持我们的摄像头模组。
1.1 支持的摄像机模组
系列 | 型号 | 状态 |
---|---|---|
VEYE系列 | VEYE-MIPI-IMX327S | 完成 |
VEYE系列 | VEYE-MIPI-IMX385 | 完成 |
VEYE系列 | VEYE-MIPI-IMX462 | 完成 |
VEYE系列 | VEYE-MIPI-IMX335 | 完成 |
CS系列 | CS-MIPI-IMX307 | 完成 |
CS系列 | CS-MIPI-SC132 | 完成 |
套装系列 | CS-TX2-XAVIER-nCAM | 完成 |
MV系列 | MV-MIPI-IMX178M | 完成 |
MV系列 | MV-MIPI-SC130M | 完成 |
MV系列 | MV-MIPI-IMX296M | 完成 |
MV系列 | MV-MIPI-IMX287M | 完成 |
MV系列 | MV-MIPI-IMX265M | 完成 |
MV系列 | MV-MIPI-IMX264M | 完成 |
RAW系列 | RAW-MIPI-SC132M | 完成 |
RAW系列 | RAW-MIPI-AR0234M | 完成 |
RAW系列 | RAW-MIPI-IMX462M | 完成 |
RAW系列 | RAW-MIPI-SC535M | 完成 |
此外,已经调通Fdplink和V-by-One HS连接模式的驱动。
1.2 支持的Jetson Board
Jetson型号 | 状态 |
---|---|
Nano A02 | 完成 |
Nano B01 | 完成 |
Nano 2GB | 完成 |
TX2 NX | 完成 |
XAVIER NX | 完成 |
TX2 Devkit | 完成 |
AGX Xavier | 完成 |
AGX Orin | 完成 |
Orin NX | 完成 |
Orin Nano | 完成 |
1.3 支持的L4T版本
- Jetpack4.6.1,L4T版本r32.7.1
- Jetpack4.6.3,L4T版本r32.7.3
- Jetpack4.6.4,L4T版本r32.7.4
- Jetpack4.6.5,L4T版本r32.7.5
- Jetpack5.0.2,L4T版本r35.1
- Jetpack5.1,L4T版本r35.2.1
- Jetpack5.1.1,L4T版本r35.3.1
- Jetpack5.1.2,L4T版本r35.4.1
- Jetpack5.1.3,L4T版本r35.5
- Jetpack6.0,L4T版本r36.3
- Jetpack6.1,L4T版本r36.4
1.4 怎样查看当前L4T版本
在jetson板子上,查看当前L4T版本,尽量使用同一版本进行替换。
cat /etc/nv_tegra_release
如显示:
# R32 (release), REVISION: 7.1......
则表示当前L4T版本为32.7.1,对应的Jetpack版本是Jetpack32.6.1。
2 Jetpack版本差异
- Jetpack4.x版本
要支持我们的摄像头模组,需要更新Jetson系统的L4T(Linux for Tegra)的两个部分,Image和dtb。
Image部分,我们增加了摄像头驱动,dtb部分则指明了使用的摄像头型号。一般情况下,只需使用我们已编译好的Image和dtb,非必要情况下,无需根据代码进行编译。
- Jetpack5.x版本
驱动不再编译进Image,而是以独立module的形式加载到系统中。dtb我们现在依然是采用整体编译到一起的方式以方便进行替换。
dtb也可以以overlay形式动态加载,详情参考nVidia官方的NVIDIA® Jetson™ Linux开发者指南。
- Jetpack6.x版本
驱动不再编译进Image,而是以独立module的形式加载到系统中。
dtb也不再采用整体编译到一起的方式,而是使用OVERLAYS机制动态加载。这样做的优势是可以更好的适应第三方板卡。
- MV系列模组
对于MV系列模组,为了支持扩展数据类型和外触发模式,除了添加摄像头驱动到系统中,还需要在原系统中增加相关功能。
对于Jetpack4.x和Jetpack5.x, 我们在Image中增加了相关功能,需要更新Image。
对于Jetpack6.x,新增功能以独立驱动形式呈现,因此需要更新驱动文件。
3 BSP包介绍:
3.1 路径
https://github.com/veyeimaging/nvidia_jetson_veye_bsp
3.2 bsp包包括以下主要内容:
- 预编译好的不同平台下的dtb
- driver源码
- dts源码
- i2c通信工具集
在项目release包中还包括:
- 预编译好的linux kernel:Image
- 预编译好的摄像机驱动
4 DTB文件名称与板卡对应关系
4.1 Nano A02
tegra210-p3448-0000-p3449-0000-a02.dtb
4.2 Nano B01 Devkit
tegra210-p3448-0000-p3449-0000-b00.dtb
4.3 Nano B01 4G emmc
tegra210-p3448-0002-p3449-0000-b00.dtb
4.4 Nano 2GB
tegra210-p3448-0003-p3542-0000.dtb
4.5 TX2 Devkit
tegra186-quill-p3310-1000-c03-00-base.dtb
4.6 TX2 NX(p3509-0000 carrier board)
use the same carrier board with XAVIER NX Devkit
tegra186-p3636-0001-p3509-0000-a01.dtb
4.7 AGX XAVIER
tegra194-p2888-0001-p2822-0000.dtb
4.8 XAVIER NX Devkit
tegra194-p3668-all-p3509-0000.dtb
特别的,对于Jetpack5.x:
- Jetson Xavier NX (P3668-0000) For developer kit only:
tegra194-p3668-0000-p3509-0000.dtb
- Jetson Xavier NX (P3668-0001) Commercial module:
tegra194-p3668-0001-p3509-0000.dtb
4.9 AGX Orin
tegra234-p3701-0000-p3737-0000.dtb
4.10 Orin NX
- Jetson Orin NX 16G(P3767-0000):
tegra234-p3767-0000-p3768-0000-a0.dtb
- Jetson Orin NX 8G (P3767-0001):
tegra234-p3767-0001-p3768-0000-a0.dtb
4.11 Orin Nano
- Jetson Orin Nano 8G(P3767-0003) and Jetson Orin Nano Devkit(P3767-0005):
tegra234-p3767-0003-p3768-0000-a0.dtb
- Jetson Orin Nano 4G (P3767-0004):
tegra234-p3767-0004-p3768-0000-a0.dtb
5 DTB文件名称与摄像头对应关系
每个主板的dtb目录下,存放了对应摄像头型号的目录,一般可以直接通过目录名称知道对应的摄像头型号。
特别的:
1、VEYE-MIPI-CAM2M 是新版本的VEYE系列dtb,支持所有VEYE 200W系列产品,包括VEYE-MIPI-327E、VEYE-MIPI-IMX327S、VEYE-MIPI-IMX462、VEYE-MIPI-IMX385。
2、以fpdlink为后缀的,对应fpdlink同轴型号模组。
3、MV-MIPI-MVCAM是所有MV系列和RAW系列摄像机通用的dtb(RAW-MIPI-AR0234M和RAW-MIPI-IMX462M除外)。
6 Jetson板上直接升级的方法
适用型号:Jetson Nano、Xavier和Orin。
注:AGX Xavier在Jetpack4.4以后的版本,建议可以使用此方法。以前版本我们未作验证,不建议使用。
6.1 查看当前L4T版本
首先查看当前L4T版本,尽量使用同一版本进行替换。
cat /etc/nv_tegra_release
如显示:
# R32 (release), REVISION: 4.3......
则表示当前L4T版本为32.4.3。
6.2 关于L4T 32.7.2的说明
L4T32.7.2版本的Image和dts与L4T32.7.1版本完全一致,所以直接使用L4T32.7.1相关目录下内容即可。
此外,升级需要更新cboot,请参考常见问题章节。
6.3 下载bsp包到Jetson板子
在Jetson 板子上面,执行:
wget https://github.com/veyeimaging/nvidia_jetson_veye_bsp/releases/latest/download/nvidia_jetson_veye_bsp.tar.gz
或者在浏览器地址栏中输入https://github.com/veyeimaging/nvidia_jetson_veye_bsp/releases/latest/
下载发布版本。
tar -xzvf nvidia_jetson_veye_bsp.tar.gz
6.4 升级驱动
6.4.1 对于Jetpack4.x 版本
只需要升级Image即可,无需安装独立驱动。
备份原来的Image
cp /boot/Image /boot/Image.backup
cp /boot/Image.sig /boot/Image.sig.backup
在bsp包目录下,找到对应版本的Image压缩包,解压,然后执行:
sudo cp <path to your Image dir>/Image /boot/Image -f
特别的,对于xavier和Orin需要使用签名后的文件(比如Image_l4t_r32.*.*_veyecam_signed_4_xavier目录下),把新的Image和Image.sig拷贝到/boot/目录下。
sudo cp <path to your Image dir>/Image* /boot/-f
重启后生效。
6.4.2 对于Jetpack5.x版本
如果使用MV或者RAW系列相机,请首先参考上面的Jetpack4.x版本的章节,升级Image。然后,再按照下面的步骤,安装modules。
查看系统linux版本
uname -r
在nvidia_jetson_veye_bsp/ko
目录下找到对应的驱动版本目录,
sudo cp nvidia_jetson_veye_bsp/ko/$(uname -r)/* /lib/modules/$(uname -r)/kernel/drivers/media/i2c/ -f
- 特别的,对于Jetpack5.1版本:
sudo cp nvidia_jetson_veye_bsp/ko/5.10.104-tegra-l4t35.2.1/* /lib/modules/$(uname -r)/kernel/drivers/media/i2c/ -f
- 特别的,对于Jetpack5.1.1版本:
sudo cp nvidia_jetson_veye_bsp/ko/5.10.104-tegra-l4t35.3.1/* /lib/modules/$(uname -r)/kernel/drivers/media/i2c/ -f
拷贝完成后,执行如下命令,将modules注册到系统:
sudo depmod
6.4.3 对于Jetpack6.x版本
查看系统linux版本
uname -r
在nvidia_jetson_veye_bsp/ko
目录下找到对应的驱动版本目录。sudo cp nvidia_jetson_veye_bsp/ko/$(uname -r)/downstream/i2c/* /lib/modules/$(uname -r)/updates/drivers/media/i2c/ -f
如果使用MV或者RAW系列相机,则需要额外安装如下驱动:
sudo cp nvidia_jetson_veye_bsp/ko/$(uname -r)/downstream/terga-camera/tegra-camera.ko /lib/modules/$(uname -r)/updates/drivers/media/platform/tegra/camera -f
sudo cp nvidia_jetson_veye_bsp/ko/$(uname -r)/upstream/*.ko /lib/modules/$(uname -r)/kernel/drivers/media/v4l2-core/ -f
拷贝完成后,执行如下命令,将modules注册到系统:
sudo depmod
6.4.4 对于Fpdlink接口相机的特殊处理(JP5.x and JP6.x)
如果使用fpdlink接口的摄像机模组。必须手动控制加载顺序,保证ds90ub954.ko的加载早于摄像头驱动的加载。
系统启动后,手动按照顺序插入驱动,如:
sudo insmod ds90ub954.ko
sudo insmod cs_imx307.ko
可将驱动加载的命令添加到启动脚本中。
6.5 升级dtb
6.5.1 准备工作
在bsp包目录下,找到您对应的摄像头模组型号和L4T版本号的dtb文件。
将新的dtb拷贝的系统目录
sudo mkdir /boot/veyecam/
sudo cp <path to your dtb dir>/<DTB file name> /boot/veyecam -f
备份extlinux.conf文件:
cp /boot/extlinux/extlinux.conf /boot/extlinux/extlinux.conf.back
6.5.2 对于Jetpack4.x和Jetpack5.x
编辑 /boot/extlinux/extlinux.conf文件,在最下面增加如下一行。
FDT /boot/veyecam/<DTB file name>
注意:<DTB file name>应当替换为主板对应的dtb名称,确保FDT一行所指明的文件确实正确存在。
重启后生效。
6.5.3 对于Jetpack6.x
Jetpack6.x系统下,支持保留现有dtb,并以overlay的形式增加我们相机的dtbo。这样将非常有利于适配第三方版本的主板。
首先,确定当前有效的dtb文件:
ls /boot/dtb
编辑 /boot/extlinux/extlinux.conf文件,在最下面增加两行,分别指明当前主dtb和我们要增加的overlay。
比如,对于Orin NX Devkit,使用VEYE-MIPI-IMX462的情况:
FDT /boot/dtb/kernel_tegra234-p3768-0000+p3767-0001-nv.dtb
OVERLAYS /boot/veyecam/tegra234-p3767-camera-p3768-veyeimx335-dual.dtbo
再比如,对于AGX Orin,使用RAW-MIPI-AR0234M的情况:
FDT /boot/dtb/kernel_tegra234-p3737-0000+p3701-0000-nv.dtb
OVERLAYS /boot/veyecam/tegra234-p3737-camera-raw_ar0234m-overlay.dtbo
再比如,对于Orin Nano Devkit,使用MV系列相机的情况:
FDT /boot/dtb/kernel_tegra234-p3768-0000+p3767-0005-nv.dtb
OVERLAYS /boot/veyecam/tegra234-p3767-camera-p3768-veye_mvcam-dual.dtbo
7 通过HOST PC烧写Jetson主板进行升级的方法
本节提供第二种升级系统的方法。这个方法与上一节的方法的目标相同,二选一即可。本方法比较复杂,对于Nano,Xavier,Orin不建议使用。
特别的,对于TX2系统,只能采取本节的方法升级。
7.1 烧写标准版本镜像
注意:如您的Jetson板子已经正确烧写了标准版本的镜像,此步骤可以跳过。
可以使用SDK Manager直接烧写标准镜像,也可以按照如下步骤手动烧写。
- 配置环境变量
以下步骤假设SDK安装目录为<TOPDIR>。
export TOP_DIR=<absolute path to top dir accroding to your jetpack version and board name;for example /home/xumm/nvidia/nvidia_sdk/JetPack_4.5_Linux_JETSON_XAVIER_NX_DEVKIT/>
- 通用部分
export L4T_DIR=$TOP_DIR/Linux_for_Tegra
- 生成默认版本烧写镜像,烧写默认镜像到板子,准备好L4T环境
cd $L4T_DIR
sudo ./apply_binaries.sh
进入recovery mode并烧写标准版本镜像。
- Nano
sudo ./flash.sh jetson-nano-devkit mmcblk0p1
sudo ./flash.sh jetson-nano-2gb-devkit mmcblk0p1
- TX2
sudo ./flash.sh jetson-tx2 mmcblk0p1
- TX2 NX(p3509-0000 carrier board)
sudo ./flash.sh jetson-xavier-nx-devkit-tx2-nx mmcblk0p1
- AGX Xavier
sudo ./flash.sh jetson-xavier mmcblk0p1
- Xavier NX Devkit
sudo ./flash.sh jetson-xavier-nx-devkit mmcblk0p1
7.2 下载我们的bsp包
cd $L4T_DIR
wget https://github.com/veyeimaging/nvidia_jetson_veye_bsp/releases/latest/download/nvidia_jetson_veye_bsp.tar.gz
tar -xzvf nvidia_jetson_veye_bsp.tar.gz
export RELEASE_PACK_DIR=$L4T_DIR/nvidia_jetson_veye_bsp
7.3 升级Image和DTB
解压开下载到的nvidia_jetson_veye_bsp.tar.gz,找到对应版本的Image。
- 升级Image文件
无论是使用预编译好的程序还是使用自行编译出的Image:
- Nano 和 TX2
把新的Image拷贝的Nano和TX2的/boot/目录下。
在Jetson TX2板子上执行
sudo cp <path to your Image dir>/Image /boot/Image -f
- Xavier 和Orin
需要使用签名后的文件(比如Image_l4t_r32.*.*_veyecam_signed_4_xavier目录下),把新的Image和Image.sig拷贝的XAVIER的/boot/目录下。
sudo cp <path to your Image dir>/Image /boot/Image -f
sudo cp <path to your Image dir>/Image.sig /boot/Image.sig -f
在Host PC执行
cd $L4T_DIR
sudo ./flash.sh -k kernel jetson-xavier mmcblk0p1
- Xavier NX
在Host PC执行
cd $L4T_DIR
sudo ./flash.sh -k kernel jetson-xavier-nx-devkit mmcblk0p1
- 烧写DTS分区,进入烧写模式,在Host PC执行
cp <path to your dtb dir>/dtbfilename $L4T_DIR/kernel/dtb/ -f
cd $L4T_DIR
- Nano
sudo ./flash.sh -r -k DTB jetson-nano-qspi-sd mmcblk0p1
sudo ./flash.sh -r -k DTB jetson-nano-devkit mmcblk0p1
sudo ./flash.sh -r -k DTB jetson-nano-2gb-devkit mmcblk0p1
- TX2
sudo ./flash.sh -r -k kernel-dtb jetson-tx2 mmcblk0p1
- TX2 NX(p3509-0000 carrier board)
sudo ./flash.sh -r -k kernel-dtb jetson-xavier-nx-devkit-tx2-nx mmcblk0p1
- AGX Xavier
sudo ./flash.sh -r -k kernel-dtb jetson-xavier mmcblk0p1
- Xavier NX
sudo ./flash.sh -r -k kernel-dtb jetson-xavier-nx-devkit mmcblk0p1
烧写完成后,断电重启。
8 Image和DTB更新成功了吗?
完成Image和DTB的更新后,可以使用以下步骤检查操作是否成功。
8.1 对于DTB
8.1.1 Jetpack4.x和Jetpack5.x
DTB在不同的平台和不同的摄像头模组都会有所不同。
- Nano A02/ Nano 2G
ls /proc/device-tree/host1x/i2c@546c0000/
- Nano B01
ls /proc/device-tree/cam_i2cmux/i2c@*
- TX2 Devkit
ls /proc/device-tree/i2c@3180000/tca9548@70/i2c@*
or
ls /proc/device-tree/i2c@3180000/tca9548@77/i2c@*
- AGX Xavier和AGX Orin
ls /proc/device-tree/i2c@3180000/tca9548@70/i2c@*
or
ls /proc/device-tree/i2c@3180000/tca9548@77/i2c@*
- Xavier NX and TX2 NX(p3509-0000 carrier board)
ls /proc/device-tree/cam_i2cmux/i2c@*
应当可以发现摄像头型号。
8.1.2 Jetpack6.x
- Orin NX and Orin Nano
ls /sys/firmware/devicetree/base/bus@0/cam_i2cmux/i2c@0/
- AGX Xavier and AGX Orin
ls /sys/firmware/devicetree/base/bus@0/i2c@3180000/tca9548@70/i2c@*
8.2 对于Image或者ko
ls /sys/bus/i2c/drivers/
正确安装摄像头时,摄像头的相关目录应当存在,如 veyecam csx307 cssc132 mvcam等。
9 防止被升级所覆盖
确定Image和dtb成功更新之后,请执行以下命令,防止kernel和dtb被升级覆盖。
sudo apt-mark hold nvidia-l4t-kernel nvidia-l4t-kernel-dtbs
10 常见问题和bug列表
10.1 带SSD硬盘的系统的更新系统不生效的问题
如果系统安装了SSD硬盘,并将SSD硬盘挂载到/目录,有可能导致常规更新系统(Image,ko,dtb)操作完全无效。
这个原因是,板子自带有eMMC存储器件,启动阶段生效的是eMMC中的Image,ko和dtb。启动完成之后,SSD硬盘挂载到/目录,导致emmc上的文件无法看到。
此时的处理方法是将eMMC的mmcblk0p1分区手动挂载到某个目录,并基于此目录进行更新系统的所有操作。
10.2 VEYE cameras on Jetpack5.x
Jetpack5.x在xavier和orin平台对mipi信号的要求更加严格。VEYE-MIPI-xxx系列相机需要固件版本hdver>=7才可以完美支持。
10.3 CS-MIPI-IMX307配合Orin nano以及Orin NX绿屏
当CS-MIPI-IMX307使用FFC cable的3.3V供电模式时,现在(Jetpack5.1.1)Orin nano和Orin NX的MIPI接收状态机会进入错误状态。建议参考此文章,修改CS-MIPI-IMX307的供电模式,使用5V供电模式。
10.4 Jetpack5.0.1 DP
本版本有很多bug,如不支持nvv4l2camerasrc,不建议使用。
10.5 L4T32.7.2在xavier系列上的bug
对于Xavier系列,L4T32.7.2的cboot存在一个bug,必须要先解决掉才可以升级。
[Cboot] Cboot in 32.7.2 fails to read extlinux.conf
我们编译了正确版本的cboot并放在这里。
下载后,放到Linux_for_Tegra/bootloader目录下,进入recovery模式后,在PC端执行如下命令以烧写cboot。
- AGX Xavier
sudo ./flash.sh -r -k cpu-bootloader jetson-xavier mmcblk0p1
- Xavier NX
sudo ./flash.sh -r -k cpu-bootloader jetson-xavier-nx-devkit mmcblk0p1
11 使用源码进行编译
请参考:英伟达Jetson平台上VEYE摄像头驱动源码编译指南
kernel和DTS编译完成后,可以按照上面的步骤升级Image和DTB。