Line 1: |
Line 1: |
| [[VEYE CS Camera source for Jetson/zh|查看中文]] | | [[VEYE CS Camera source for Jetson/zh|查看中文]] |
| | | |
− | '''Nvidia Jetson platform VEYE and CS series camera driver source code compilation guide''' | + | '''Nvidia Jetson platform VEYE camera driver source code compilation guide''' |
| | | |
| === Overview === | | === Overview === |
| + | NVIDIA has released Linux developer guide for each Jetpack version. For example, L4T [https://docs.nvidia.com/jetson/archives/r35.1/DeveloperGuide/index.html 35.1] and [https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-325/#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/kernel_custom.html# 32.5]. |
| + | |
| + | This section is based on the official Kernel Customization section, so please refer to the official documentation for any lack of detail. |
| + | |
| + | We use a host pc with Ubuntu installed and a Jetson board as our development environment. |
| + | |
| + | * Jetpack 4.x |
| + | |
| + | driver is compiled together with the linux kernel on the host pc. dtb is also compiled on the host pc. |
| + | |
| + | * Jetpack5.x |
| + | |
| + | The driver is compiled to modules, on the Jetson board. dtb compilation is done on the host pc. |
| | | |
| ==== Jetpack version VS. L4T version ==== | | ==== Jetpack version VS. L4T version ==== |
Line 13: |
Line 26: |
| *Jetpack4.5,L4T r32.5 | | *Jetpack4.5,L4T r32.5 |
| *Jetpack4.5.1,L4T r32.5.1 | | *Jetpack4.5.1,L4T r32.5.1 |
− | *Jetpack4.6,L4T r32.6.1 | + | *Jetpack4.6, L4T r32.6.1 |
| + | *Jetpack4.6.1, L4T r32.7.1 |
| + | *Jetpack4.6.2, L4T r32.7.2 |
| + | *Jetpack4.6.3, L4T r32.7.3 |
| + | *Jetpack5.0.1DP,L4T r34.1.1 |
| + | *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 |
| | | |
| ====Check the current L4T version==== | | ====Check the current L4T version==== |
Line 29: |
Line 50: |
| The following operations are done in HOST PC. | | The following operations are done in HOST PC. |
| | | |
− | *Cross-compiling Toolchain
| + | ==== Cross-compiling Toolchain ==== |
| + | |
| + | * Jetpack4.xPlease refer to this [https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fxavier_toolchain.html%23wwpID0ESHA link] to install toolchain on your Host PC. |
| | | |
− | Please refer to this [https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fxavier_toolchain.html%23wwpID0ESHA link] to install toolchain on your Host PC.
| + | * Jetpack5.x |
| | | |
− | *L4T source code and Rootfs
| + | Please refer to this [https://docs.nvidia.com/jetson/archives/r35.1/DeveloperGuide/text/AT/JetsonLinuxToolchain.html link] to install toolchain on your Host PC. |
| | | |
| + | ==== L4T source code and Rootfs ==== |
| Please download the Linux_for_Tegra SDK via SDK Manager first. | | Please download the Linux_for_Tegra SDK via SDK Manager first. |
| | | |
− | You could use SDK Manager or [https://developer.nvidia.com/embedded/downloads directly download] to get source code. | + | You could use SDK Manager or [https://developer.nvidia.com/embedded/downloads directly download] to get source code. I recommend the direct download method. |
| | | |
| Sync code as this if you use SDK Manager: | | Sync code as this if you use SDK Manager: |
Line 73: |
Line 97: |
| <code>./source_sync.sh -t tegra-l4t-r32.6.1</code> | | <code>./source_sync.sh -t tegra-l4t-r32.6.1</code> |
| | | |
− | *Setting Up the Environment
| + | ''- Jetpack4.6.1'' |
| + | |
| + | <code>./source_sync.sh -t tegra-l4t-r32.7.1</code> |
| + | |
| + | ''- Jetpack4.6.2'' |
| + | |
| + | [https://forums.developer.nvidia.com/t/source-sync-sh-fails-with-tegra-l4t-r32-7-2-tag/212787/5 Nvidia did not push sources to nv-tegra for this 32.7.2 release because there have been no changes in the kernel and DTS compared to 32.7.1 release.] |
| + | |
| + | ''- Jetpack5.0.1 DP'' |
| + | |
| + | <code>./source_sync.sh -t jetson_34.1.1</code> |
| + | |
| + | ''- Jetpack5.0.2'' |
| + | |
| + | <code>./source_sync.sh -t jetson_35.1</code> |
| + | |
| + | ''- Jetpack5.1'' |
| + | |
| + | <code>./source_sync.sh -t jetson_35.2.1</code> |
| + | |
| + | ''- Jetpack5.1.1'' |
| + | |
| + | <code>./source_sync.sh -t jetson_35.3.1</code> |
| + | |
| + | ''- Jetpack5.1.2'' |
| | | |
| + | <code>./source_sync.sh -t jetson_35.4.1</code> |
| + | ==== Setting Up the Environment ==== |
| Assume SDK install directory is <TOPDIR>,source code is in $L4T_DIR/sources directory. | | Assume SDK install directory is <TOPDIR>,source code is in $L4T_DIR/sources directory. |
| | | |
Line 86: |
Line 136: |
| | | |
| <code>export ARCH=arm64</code> | | <code>export ARCH=arm64</code> |
− |
| |
− | <code>export CROSS_COMPILE=aarch64-linux-gnu-</code>
| |
− |
| |
− | <code>export CROSS32CC=arm-linux-gnueabihf-gcc</code>
| |
| | | |
| <code>export TEGRA_KERNEL_OUT=$L4T_DIR/sources/kernel/out_kernel</code> | | <code>export TEGRA_KERNEL_OUT=$L4T_DIR/sources/kernel/out_kernel</code> |
Line 102: |
Line 148: |
| | | |
| <code>export XAVIER_DTS_PATH=$L4T_DIR/sources/hardware/nvidia/platform/t19x</code> | | <code>export XAVIER_DTS_PATH=$L4T_DIR/sources/hardware/nvidia/platform/t19x</code> |
| + | |
| + | <code>export COMMON_DTS_PATH=$TEGRA_KERNEL_OUT/arch/arm64/boot/dts/</code> |
| + | |
| + | * Jetpack 4.x only |
| + | |
| + | <code>export CROSS_COMPILE=aarch64-linux-gnu-</code> |
| + | |
| + | <code>export CROSS32CC=arm-linux-gnueabihf-gcc</code> |
| + | |
| + | * Jetpack 5.x only |
| + | |
| + | <code>export CROSS_COMPILE_AARCH64_PATH=$HOME/l4t-gcc</code> |
| + | |
| + | <code>export CROSS_COMPILE_AARCH64=$HOME/l4t-gcc/bin/aarch64-buildroot-linux-gnu-</code> |
| + | |
| + | <code>export CROSS_COMPILE=$CROSS_COMPILE_AARCH64</code> |
| + | |
| + | <code>export COMMON_DTS_PATH=$TEGRA_KERNEL_OUT/arch/arm64/boot/dts/nvidia</code> |
| + | |
| ===Download our bsp package for Jetson=== | | ===Download our bsp package for Jetson=== |
| <code>cd $L4T_DIR</code> | | <code>cd $L4T_DIR</code> |
Line 109: |
Line 174: |
| <code>export RELEASE_PACK_DIR=$L4T_DIR/nvidia_jetson_veye_bsp</code> | | <code>export RELEASE_PACK_DIR=$L4T_DIR/nvidia_jetson_veye_bsp</code> |
| ===Build kernel=== | | ===Build kernel=== |
| + | For Jetpack version 4.x and for using MV series cameras under Jetpack version 5.x, the kernel needs to be compiled. |
| | | |
| ==== kernel patch for MV series ==== | | ==== kernel patch for MV series ==== |
Line 124: |
Line 190: |
| <code>patch -p1 < [path to]veye_mv_l4t_[version].patch</code> | | <code>patch -p1 < [path to]veye_mv_l4t_[version].patch</code> |
| | | |
− | ==== patch code ==== | + | ==== For Jetpack 4.x, the camera driver is compiled into the Image ==== |
| + | |
| + | ===== patch code ===== |
| <code>cp $RELEASE_PACK_DIR/drivers_source/cam_drv_src/* $NVIDIA_PATH/drivers/media/i2c/</code> | | <code>cp $RELEASE_PACK_DIR/drivers_source/cam_drv_src/* $NVIDIA_PATH/drivers/media/i2c/</code> |
| | | |
Line 130: |
Line 198: |
| | | |
| ===== Modify Kconfig and Makefile ===== | | ===== Modify Kconfig and Makefile ===== |
− | <code>cp $RELEASE_PACK_DIR/drivers_source/cam_drv_src/Kconfig_<ver> $NVIDIA_PATH/drivers/media/i2c/</code> | + | Modify the Kconfig and Makefile files under the <code>$NVIDIA_PATH/drivers/media/i2c/</code> directory to add the corresponding camera driver compilation options. |
− | | |
− | <code>cp $RELEASE_PACK_DIR/drivers_source/cam_drv_src/Makefile_<ver> $NVIDIA_PATH/drivers/media/i2c/</code>
| |
| | | |
− | ==== build ==== | + | ===== build ===== |
| <code>cd $L4T_DIR/sources/kernel/kernel-4.9/</code> | | <code>cd $L4T_DIR/sources/kernel/kernel-4.9/</code> |
| | | |
Line 141: |
Line 207: |
| <code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT Image -j4</code> | | <code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT Image -j4</code> |
| | | |
| + | ==== For Jetpack 5.x, there is no need to compile the camera driver into the Image ==== |
| + | |
| + | ===== build ===== |
| + | <code>cd $L4T_DIR/sources/</code> |
| + | |
| + | <code>./nvbuild.sh -o $TEGRA_KERNEL_OUT</code> |
| + | |
| + | <code>nvbuild.sh</code> is only included in the <code>kernel_src.tbz2</code> tar file that is part of <code>public_sources.tbz2</code>. If the kernel sources were synced from the Git server, you need to manually copy <code>nvbuild.sh</code> from the tar file. |
| + | |
| + | ==== Build completed ==== |
| Completed Image file is $TEGRA_KERNEL_OUT/arch/arm64/boot/Image,could be used for Flashing or Upgrading. | | Completed Image file is $TEGRA_KERNEL_OUT/arch/arm64/boot/Image,could be used for Flashing or Upgrading. |
| | | |
Line 147: |
Line 223: |
| <code>sudo cp $TEGRA_KERNEL_OUT/arch/arm64/boot/Image $L4T_DIR/kernel/ -f</code> | | <code>sudo cp $TEGRA_KERNEL_OUT/arch/arm64/boot/Image $L4T_DIR/kernel/ -f</code> |
| | | |
− | *For xavier,need sign the file | + | *For Xavier and Orin,need sign the file |
| | | |
| <code>cd $L4T_DIR</code> | | <code>cd $L4T_DIR</code> |
| | | |
| <code>./l4t_sign_image.sh --file kernel/Image --chip 0x19</code> | | <code>./l4t_sign_image.sh --file kernel/Image --chip 0x19</code> |
| + | ===Build modules(Jetpack5.x)=== |
| + | For version later than Jetpack 5.x, can compile the driver directly as modules to get the ko file. It is recommended to compile the driver directly on Jetson Board. |
| + | |
| + | <code>cd $RELEASE_PACK_DIR/drivers_source/cam_drv_src/</code> |
| + | |
| + | <code>make -f Makefile</code> |
| ===Build DTS=== | | ===Build DTS=== |
| Patch code first. | | Patch code first. |
Line 184: |
Line 266: |
| | | |
| <code>cp $RELEASE_PACK_DIR/Xavier-NX/JetPack_<ver>_Linux_JETSON_XAVIER_NX_DEVKIT/dts\ dtb/<camera model>/tegra194-p3509-0000-a00.dtsi $XAVIER_DTS_PATH/jakku/kernel-dts/common/</code> | | <code>cp $RELEASE_PACK_DIR/Xavier-NX/JetPack_<ver>_Linux_JETSON_XAVIER_NX_DEVKIT/dts\ dtb/<camera model>/tegra194-p3509-0000-a00.dtsi $XAVIER_DTS_PATH/jakku/kernel-dts/common/</code> |
| + | |
| + | ==== Orin ==== |
| + | <code>cp $RELEASE_PACK_DIR/Orin/JetPack_<ver>_Linux_JETSON_ORIN_TARGETS/dts\ dtb/common/t23x/* -r $ORIN_DTS_PATH/</code> |
| + | |
| + | For <camera model> |
| + | |
| + | <code>cp $RELEASE_PACK_DIR/Orin/JetPack_<ver>_Linux_JETSON_ORIN_TARGETS/dts\ dtb/<camera model>/tegra234-p3737-camera-modules.dtsi $ORIN_DTS_PATH/concord/kernel-dts/cvb/</code> |
| + | |
| + | <code>cp $RELEASE_PACK_DIR/Orin/JetPack_<ver>_Linux_JETSON_ORIN_TARGETS/dts\ dtb/<camera model>/tegra234-p3768-0000-a0.dtsi $ORIN_DTS_PATH/p3768/kernel-dts/cvb</code> |
| | | |
| ==== build ==== | | ==== build ==== |
| + | |
| + | * For Jetpack4.X |
| + | |
| + | <code>export COMMON_DTS_PATH=$TEGRA_KERNEL_OUT/arch/arm64/boot/dts</code> |
| + | |
| <code>cd $L4T_DIR/sources/kernel/kernel-4.9/</code> | | <code>cd $L4T_DIR/sources/kernel/kernel-4.9/</code> |
| + | |
| + | * For Jetpack5.X |
| + | |
| + | <code>export COMMON_DTS_PATH=$TEGRA_KERNEL_OUT/arch/arm64/boot/dts/nvidia</code> |
| + | |
| + | <code>cd $L4T_DIR/sources/kernel/kernel-5.10/</code> |
| | | |
| <code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT dtbs</code> | | <code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT dtbs</code> |
| + | |
| + | You can get the compiled DTB file in the following path. |
| | | |
| ===== Nano ===== | | ===== Nano ===== |
− | <code>cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/</code> | + | <code>$COMMON_DTS_PATH/tegra210-p3448-0000-p3449-0000-a02.dtb</code> |
| | | |
− | <code>cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/</code> | + | <code>$COMMON_DTS_PATH/tegra210-p3448-0000-p3449-0000-b00.dtb</code> |
| | | |
− | <code>cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra210-p3448-0003-p3542-0000.dtb $L4T_DIR/kernel/dtb/</code> | + | <code>$COMMON_DTS_PATH/tegra210-p3448-0003-p3542-0000.dtb</code> |
| | | |
| ===== TX2 ===== | | ===== TX2 ===== |
− | <code>cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra186-quill-p3310-1000-c03-00-base.dtb $L4T_DIR/kernel/dtb/</code> | + | <code>$COMMON_DTS_PATH/tegra186-quill-p3310-1000-c03-00-base.dtb</code> |
| =====TX2 NX(p3509-0000 carrier board)===== | | =====TX2 NX(p3509-0000 carrier board)===== |
− | <code>cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra186-p3636-0001-p3509-0000-a01.dtb $L4T_DIR/kernel/dtb/</code> | + | <code>$COMMON_DTS_PATH/tegra186-p3636-0001-p3509-0000-a01.dtb</code> |
| ===== AGX XAVIER ===== | | ===== AGX XAVIER ===== |
− | <code>cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra194-p2888-0001-p2822-0000.dtb</code> | + | <code>$COMMON_DTS_PATH/tegra194-p2888-0001-p2822-0000.dtb</code> |
| | | |
| ===== XAVIER NX ===== | | ===== XAVIER NX ===== |
− | <code>cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra194-p3668-all-p3509-0000.dtb $L4T_DIR/kernel/dtb/</code> | + | <code>$COMMON_DTS_PATH/tegra194-p3668-all-p3509-0000.dtb</code> |
| + | |
| + | ===== AGX Orin ===== |
| + | <code>$COMMON_DTS_PATH/tegra234-p3701-0000-p3737-0000.dtb</code> |
| + | |
| + | ===== Orin Nano ===== |
| + | <code>$COMMON_DTS_PATH/tegra234-p3767-0003-p3768-0000-a0.dtb</code> |
| + | |
| + | <code>$COMMON_DTS_PATH/tegra234-p3767-0004-p3768-0000-a0.dtb</code> |
| + | |
| + | ===== Orin NX ===== |
| + | <code>$COMMON_DTS_PATH/tegra234-p3767-0000-p3768-0000-a0.dtb</code> |
| | | |
− | <br /> | + | <code>$COMMON_DTS_PATH/tegra234-p3767-0001-p3768-0000-a0.dtb</code><br /> |