TC358743 on Jetson Nano

Based on the files and descriptions you provided in the following link in GitHub Gist, I was trying to do a procedure to install the TC358743 HDMI to CSI-2 Bridge hardware driver in Jetson Nano. And I proceeded according to the procedure that I will explain below. But in the end the driver is still not recognizable by Jetson Nano! (There is no video0 in the dev list)

GitHub Gist Link: https://gist.github.com/nyacg/becd94a029355825a05f633f38a25b46

The routine I did:

  1. Download Linux L4T Kernel (for jetson nano) source code from https://developer.download.nvidia.com/embedded/L4T/r32-3-1_Release_v1.0/Sources/T210/public_sources.tbz2
    (Which is mentioned in the How to build NVIDIA Jetson Nano kernel - RidgeRun Developer Connection(

  2. Replace all the files mentioned in the https://gist.github.com/nyacg/becd94a029355825a05f633f38a25b46 with the files in the kernel source (in kernel source)

  3. The following lines were uncommented in tegra210-porg-p3448-common.dtsi (in kernel source)
    #include “porg-platforms/tegra210-porg-camera-rbpcv2-imx219.dtsi”
    #include “porg-platforms/tegra210-porg-camera-rbpcv2-dual-imx219.dtsi”
    #include “porg-plugin-manager/tegra210-porg-plugin-manager.dtsi”

  4. Insert following line to tegra210-p3448-0000-p3449-0000-a02.dts (in kernel source)
    #include “tegra210-tc358743.dtsi”

  5. Build and Compile the kernel source based on routine mentioned in GitHub - Kashu7100/buildJetsonNanoKernel: Build the NVIDIA Jetson Nano Kernel on the device and GitHub - JetsonHacksNano/buildKernelAndModules: Build the Linux Kernel and Modules on board the NVIDIA Jetson Nano Developer Kit

  6. After the above steps, copy and replace the generated image from step 5 to current linux boot directory.

  7. Reboot jetson nano

Hardware & Software Details:
Kernel: L4T 32.4.2 [ JetPack 4.4 DP ]
OS: Ubuntu 18.04.4 LTS
Kernel Version: 4.9.140
Developer Kit Model: P3450
Embedded System model: Jetson Nano

Can you help me?

Have a confirm if the kernel Image and dtb was update correctly.

uname -a
check the build time to confirm.

dmesg | grep -i kernel
check the dtb file was build by your device.

The output you mentioned is as follows

jetson@jetson-desktop:~$ uname -a
Linux jetson-desktop 4.9.140 #4 SMP PREEMPT Sun Aug 16 04:13:26 EDT 2020 aarch64 aarch64 aarch64 GNU/Linux
jetson@jetson-desktop:~$ dmesg | grep -i kernel
[ 0.000000] Kernel command line: tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 console=ttyS0,115200n8 debug_uartport=lsport,2 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1125 core_edp_ma=4000 tegra_fbmem=0x800000@0x92cb4000 is_hdmi_initialised=1 root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 quiet
[ 0.000000] Memory: 3562036K/4159488K available (15294K kernel code, 2916K rwdata, 6804K rodata, 8512K init, 611K bss, 122316K reserved, 475136K cma-reserved)
[ 0.000000] Virtual kernel memory layout:
[ 0.001845] kmemleak: Kernel memory leak detector disabled
[ 0.212136] DTS File Name: /dvs/git/dirty/git-master_linux/kernel/kernel-4.9/arch/arm64/boot/dts/…/…/…/…/…/…/hardware/nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-b00.dts
[ 0.325280] alternatives: patching kernel code
[ 0.420542] DTS File Name: /dvs/git/dirty/git-master_linux/kernel/kernel-4.9/arch/arm64/boot/dts/…/…/…/…/…/…/hardware/nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-b00.dts
[ 0.559286] eventlib_kernel: keventlib is initialized, test id: 0
[ 1.331906] KERNEL: PMC reset status reg: 0x0
[ 1.402327] Freeing unused kernel memory: 8512K
[ 2.460518] systemd[1]: Listening on udev Kernel Socket.


The point is that I added the #include “tegra210-tc358743.dtsi” to the tegra210-p3448-0000-p3449-0000-a02.dts file, but there is another file (tegra210-p3448-0000-p3449-0000-b00.dts) in the output of dmesg. Do I have to add it to the tegra210-p3448-0000-p3449-0000-b00.dts and recompile?

How to update device tree ?

For the dtb you need to replace the tegra210-p3448-0000-p3449-0000-a02.dtb file at Linux_for_Tegra/kernel/dtb/ the issue below command to update the dtb file.

sudo ./flash -k DTB jetson-nano-xxxx mmcblk0p1

And just replace the Image at /boot/Image to update the customize kernel Image.

Where is the dtb file generated after editing tegra210-p3448-0000-p3449-0000-a02.dts?

what direction should this command (sudo ./flash -k DTB jetson-nano-xxxx mmcblk0p1) be executed?
I do not have access to Flash script. Where is it?

I am new to jetson nano & linux kernel compiling
If possible, describe the case in full detail, or if you have a tested and complete procedure, let me know.

Have a check the document for building the customize kernel.

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fkernel_custom.html%23

the flash.sh was download by the sdkmanager

In step 4 in Building the NVIDIA Kernel in https://docs.nvidia.com/jetson/l4t/#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fkernel_custom.html%23wwpID0E0RD0HA

when execute make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j8 in Terminal (in non-jetson system for cross compiling with linaro toolchain), it asks me a lot of questions about taking advantage of the various possibilities for compilation process.

example:
Link-Time Optimization (LTO) (EXPERIMENTAL)
Allwinner sunxi 64-bit SoC Family (ARCH_SUNXI) [N/y/?] (NEW) y
Annapurna Labs Alpine platform (ARCH_ALPINE) [N/y/?] (NEW) y
Broadcom BCM2835 family (ARCH_BCM2835) [N/y/?] (NEW) y
Broadcom iProc SoC Family (ARCH_BCM_IPROC) [N/y/?] (NEW) y
Marvell Berlin SoC Family (ARCH_BERLIN) [N/y/?] (NEW)

You know what I have to do?

Have below command make the configure first.
make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fkernel_custom.html%23wwpID0E0FD0HA

By the way you need to build the kernel in x86 host.

Which of the following should I choose to execute the sudo ./flash -k DTB jetson-nano-xxxx mmcblk0p1 command?

jetson-nano-xxxx :
jetson-nano-devkit.conf jetson-nano-qspi.conf
jetson-nano-devkit-emmc.conf jetson-nano-qspi-sd.conf
jetson-nano-emmc.conf

It could be jetson-nano-devkit or jetson-nano-qspi