How to upgrade the Jetson system to support VEYE cameras/zh

From wiki_veye
Jump to navigation Jump to search

English

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
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。