Hi,
We are trying to load a dummy V4L2 sensor driver (no I2C controls, externally configured) on the AGX Orin to capture CSI2 data.
We are trying to follow similar process as threads referenced below:
- CSI-2 Driver without I2C on the Orin Platform (AGX Orin)
- Jetson AGX Xavier MIPI CSI-2 without I2C from FPGA (Xavier)
- Xavier - using raw CSI without i2c (Xavier)
We found the original OV5693 driver in source/nvidia-oot/driver/media-i2c/nv_ov5693.c to modify. However, we are not sure how to properly build and load the nv_ov5693.c driver in nvidia-oot/.
We tried to build on both host PC and on the AGX Orin, following the steps here: Failed to build the NVIDIA Out-of-Tree Modules - #7 by tanzelur , and got errors:
On Host PC:
jin@jin-ThinkPad-T14-Gen-4:~/nvidia/public_sources/Linux_for_Tegra/source$ export CROSS_COMPILE=/home/jin/l4t-gcc/aarch64–glibc–stable-2022.08-1/bin/aarch64-buildroot-linux-gnu-
jin@jin-ThinkPad-T14-Gen-4:~/nvidia/public_sources/Linux_for_Tegra/source$ export KERNEL_HEADERS=$PWD/kernel/kernel-jammy-srcjin@jin-ThinkPad-T14-Gen-4:~/nvidia/public_sources/Linux_for_Tegra/source$ sudo make modules
make modules - conftest …
mkdir -p /home/jin/nvidia/public_sources/Linux_for_Tegra/source/out/nvidia-conftest/nvidia;
cp -av /home/jin/nvidia/public_sources/Linux_for_Tegra/source/nvidia-oot/scripts/conftest/* /home/jin/nvidia/public_sources/Linux_for_Tegra/source/out/nvidia-conftest/nvidia/;
‘/home/jin/nvidia/public_sources/Linux_for_Tegra/source/nvidia-oot/scripts/conftest/Makefile’ → ‘/home/jin/nvidia/public_sources/Linux_for_Tegra/source/out/nvidia-conftest/nvidia/Makefile’
‘/home/jin/nvidia/public_sources/Linux_for_Tegra/source/nvidia-oot/scripts/conftest/conftest.h’ → ‘/home/jin/nvidia/public_sources/Linux_for_Tegra/source/out/nvidia-conftest/nvidia/conftest.h’
‘/home/jin/nvidia/public_sources/Linux_for_Tegra/source/nvidia-oot/scripts/conftest/conftest.sh’ → ‘/home/jin/nvidia/public_sources/Linux_for_Tegra/source/out/nvidia-conftest/nvidia/conftest.sh’
make -j 12 ARCH=arm64
src=/home/jin/nvidia/public_sources/Linux_for_Tegra/source/out/nvidia-conftest/nvidia obj=/home/jin/nvidia/public_sources/Linux_for_Tegra/source/out/nvidia-conftest/nvidia
CC=gcc LD=ld
NV_KERNEL_SOURCES=/lib/modules/6.8.0-65-generic/build
NV_KERNEL_OUTPUT=/lib/modules/6.8.0-65-generic/build
-f /home/jin/nvidia/public_sources/Linux_for_Tegra/source/out/nvidia-conftest/nvidia/Makefile
make[1]: Entering directory ‘/home/jin/nvidia/public_sources/Linux_for_Tegra/source’Warning: Compiler version check failed:
The major and minor number of the compiler used to
compile the kernel:x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0, GNU ld (GNU Binutils for Ubuntu) 2.38
does not match the compiler used here:
gcc (Ubuntu 11.4.0-1ubuntu1~22.04.2) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.It is recommended to set the CC environment variable
to the compiler that was used to compile the kernel.To skip the test and silence this warning message, set
the IGNORE_CC_MISMATCH environment variable to “1”.
However, mixing compiler versions between the kernel
and kernel modules can result in subtle bugs that are
difficult to diagnose.*** Failed CC version check. ***
make[1]: Leaving directory ‘/home/jin/nvidia/public_sources/Linux_for_Tegra/source’
make modules - hwpm …
make -j 12 ARCH=arm64
-C /lib/modules/6.8.0-65-generic/build
M=/home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm
CONFIG_TEGRA_OOT_MODULE=m
srctree.hwpm=/home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm
srctree.nvconftest=/home/jin/nvidia/public_sources/Linux_for_Tegra/source/out/nvidia-conftest
modules
make[1]: Entering directory ‘/usr/src/linux-headers-6.8.0-65-generic’
warning: the compiler differs from the one used to build the kernel
The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
You are using: gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04.2) 12.3.0
CC [M] /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/common/allowlist.o
CC [M] /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/common/aperture.o
CC [M] /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/common/ip.o
CC [M] /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/common/resource.o
CC [M] /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/common/init.o
CC [M] /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/os/linux/aperture_utils.o
CC [M] /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/os/linux/clk_rst_utils.o
CC [M] /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/os/linux/driver.o
gcc-12: error: unrecognized command-line option ‘-mlittle-endian’
CC [M] /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/os/linux/io_utils.o
gcc-12: error: unrecognized command-line option ‘-mlittle-endian’
gcc-12: error: unrecognized command-line option ‘-mlittle-endian’
make[3]: *** [scripts/Makefile.build:243: /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/common/ip.o] Error 1
make[3]: *** Waiting for unfinished jobs…
CC [M] /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/os/linux/ip_utils.o
make[3]: *** [scripts/Makefile.build:243: /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/common/allowlist.o] Error 1
make[3]: *** [scripts/Makefile.build:243: /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/common/aperture.o] Error 1
gcc-12: error: unrecognized command-line option ‘-mlittle-endian’
gcc-12: error: unrecognized command-line option ‘-mlittle-endian’
make[3]: *** [scripts/Makefile.build:243: /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/common/init.o] Error 1
make[3]: *** [scripts/Makefile.build:243: /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/common/resource.o] Error 1
gcc-12: error: unrecognized command-line option ‘-mlittle-endian’
make[3]: *** [scripts/Makefile.build:243: /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/os/linux/aperture_utils.o] Error 1
gcc-12: error: unrecognized command-line option ‘-mlittle-endian’
gcc-12: error: unrecognized command-line option ‘-mlittle-endian’
make[3]: *** [scripts/Makefile.build:243: /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/os/linux/driver.o] Error 1
make[3]: *** [scripts/Makefile.build:243: /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/os/linux/clk_rst_utils.o] Error 1
gcc-12: error: unrecognized command-line option ‘-mlittle-endian’
make[3]: *** [scripts/Makefile.build:243: /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/os/linux/io_utils.o] Error 1
gcc-12: error: unrecognized command-line option ‘-mlittle-endian’
make[3]: *** [scripts/Makefile.build:243: /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm/os/linux/ip_utils.o] Error 1
make[2]: *** [/usr/src/linux-headers-6.8.0-65-generic/Makefile:1925: /home/jin/nvidia/public_sources/Linux_for_Tegra/source/hwpm/drivers/tegra/hwpm] Error 2
make[1]: *** [Makefile:240: __sub-make] Error 2
make[1]: Leaving directory ‘/usr/src/linux-headers-6.8.0-65-generic’
make: *** [Makefile:59: hwpm] Error 2
On Jetson AGX Orin:
Using process suggested in thread:
jin@ubuntu:/usr/src$ echo $CROSS_COMPILE
/usr/include/aarch64–glibc–stable-2022.08-1/bin/aarch64-buildroot-linux-gnu-
jin@ubuntu:/usr/src$ echo $KERNEL_HEADERS
/usr/src/kernel/kernel-jammy-src
jin@ubuntu:/usr/src$ sudo make modulesmake modules - conftest …
mkdir -p /usr/src/out/nvidia-conftest/nvidia;
cp -av /usr/src/nvidia-oot/scripts/conftest/* /usr/src/out/nvidia-conftest/nvidia/;
‘/usr/src/nvidia-oot/scripts/conftest/Makefile’ → ‘/usr/src/out/nvidia-conftest/nvidia/Makefile’
‘/usr/src/nvidia-oot/scripts/conftest/conftest.h’ → ‘/usr/src/out/nvidia-conftest/nvidia/conftest.h’
‘/usr/src/nvidia-oot/scripts/conftest/conftest.sh’ → ‘/usr/src/out/nvidia-conftest/nvidia/conftest.sh’
make -j 8 ARCH=arm64
src=/usr/src/out/nvidia-conftest/nvidia obj=/usr/src/out/nvidia-conftest/nvidia
CC=gcc LD=ld
NV_KERNEL_SOURCES=/lib/modules/5.15.148-tegra/build
NV_KERNEL_OUTPUT=/lib/modules/5.15.148-tegra/build
-f /usr/src/out/nvidia-conftest/nvidia/Makefile
make[1]: Entering directory ‘/usr/src’Warning: Compiler version check failed:
The major and minor number of the compiler used to
compile the kernel:aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2022.08) 11.3.0, GNU ld (GNU Binutils) 2.38
does not match the compiler used here:
gcc (Ubuntu 11.4.0-1ubuntu1~22.04.2) 11.4.0
…
CC [M] /usr/src/nvgpu/drivers/gpu/nvgpu/hal/regops/regops_ga100.o
CC [M] /usr/src/nvgpu/drivers/gpu/nvgpu/hal/regops/allowlist_ga100.o
CC [M] /usr/src/nvgpu/drivers/gpu/nvgpu/hal/grmgr/grmgr_ga100.o
CC [M] /usr/src/nvgpu/drivers/gpu/nvgpu/os/linux/platform_ga10b_tegra.o
CC [M] /usr/src/nvgpu/drivers/gpu/nvgpu/os/linux/ioctl_nvs.o
CC [M] /usr/src/nvgpu/drivers/gpu/nvgpu/common/nvs/nvs_sched.o
CC [M] /usr/src/nvgpu/drivers/gpu/nvgpu/common/nvs/nvs_sched_ctrl.o
CC [M] /usr/src/nvgpu/drivers/gpu/nvgpu/common/nvs/nvs-control-interface-parser.o
LD [M] /usr/src/nvgpu/drivers/gpu/nvgpu/nvgpu.o
MODPOST /usr/src/nvgpu/drivers/gpu/nvgpu/Module.symvers
ERROR: modpost: “emc_freq_to_bw” [/usr/src/nvgpu/drivers/gpu/nvgpu/nvgpu.ko] undefined!
ERROR: modpost: “host1x_fence_extract” [/usr/src/nvgpu/drivers/gpu/nvgpu/nvgpu.ko] undefined!
ERROR: modpost: “tegra_vpr_dev” [/usr/src/nvgpu/drivers/gpu/nvgpu/nvgpu.ko] undefined!
ERROR: modpost: “nvmap_dma_alloc_attrs” [/usr/src/nvgpu/drivers/gpu/nvgpu/nvgpu.ko] undefined!
ERROR: modpost: “nvmap_dma_free_attrs” [/usr/src/nvgpu/drivers/gpu/nvgpu/nvgpu.ko] undefined!
make[2]: *** [scripts/Makefile.modpost:133: /usr/src/nvgpu/drivers/gpu/nvgpu/Module.symvers] Error 1
make[2]: *** Deleting file ‘/usr/src/nvgpu/drivers/gpu/nvgpu/Module.symvers’
make[1]: *** [Makefile:1830: modules] Error 2
make[1]: Leaving directory ‘/usr/src/linux-headers-5.15.148-tegra-ubuntu22.04_aarch64/3rdparty/canonical/linux-jammy/kernel-source’
make: *** [Makefile:93: nvgpu] Error 2
Using ./nvbuild.sh:
jin@ubuntu:/usr/src$ sudo ./nvbuild.sh -m
[sudo] password for jin:
The output directory “/usr/src/kernel_out”
Syncing nvethernetrm
Syncing nvgpu
Syncing nvidia-oot
Syncing hwpm
Syncing hardware
Syncing nvdisplay
Syncing kernel-devicetree
Building NVIDIA OOT modules sources in /usr/src/kernel_out
Using KERNEL_HEADERS from directory :
make: Entering directory ‘/usr/src/kernel_out’make modules - conftest …
mkdir -p /usr/src/kernel_out/out/nvidia-conftest/nvidia;
cp -av /usr/src/kernel_out/nvidia-oot/scripts/conftest/* /usr/src/kernel_out/out/nvidia-conftest/nvidia/;
‘/usr/src/kernel_out/nvidia-oot/scripts/conftest/Makefile’ → ‘/usr/src/kernel_out/out/nvidia-conftest/nvidia/Makefile’
‘/usr/src/kernel_out/nvidia-oot/scripts/conftest/conftest.h’ → ‘/usr/src/kernel_out/out/nvidia-conftest/nvidia/conftest.h’
‘/usr/src/kernel_out/nvidia-oot/scripts/conftest/conftest.sh’ → ‘/usr/src/kernel_out/out/nvidia-conftest/nvidia/conftest.sh’
make -j 8 ARCH=arm64
src=/usr/src/kernel_out/out/nvidia-conftest/nvidia obj=/usr/src/kernel_out/out/nvidia-conftest/nvidia
CC=gcc LD=ld
NV_KERNEL_SOURCES=/lib/modules/5.15.148-tegra/build
NV_KERNEL_OUTPUT=/lib/modules/5.15.148-tegra/build
-f /usr/src/kernel_out/out/nvidia-conftest/nvidia/Makefile
make[1]: Entering directory ‘/usr/src/kernel_out’Warning: Compiler version check failed:
The major and minor number of the compiler used to
compile the kernel:aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2022.08) 11.3.0, GNU ld (GNU Binutils) 2.38
does not match the compiler used here:
…
CC [M] /usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/common/nvs/nvs_sched.o
CC [M] /usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/common/nvs/nvs_sched_ctrl.o
CC [M] /usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/common/nvs/nvs-control-interface-parser.o
LD [M] /usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/nvgpu.o
MODPOST /usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/Module.symvers
ERROR: modpost: “emc_freq_to_bw” [/usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/nvgpu.ko] undefined!
ERROR: modpost: “host1x_fence_extract” [/usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/nvgpu.ko] undefined!
ERROR: modpost: “tegra_vpr_dev” [/usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/nvgpu.ko] undefined!
ERROR: modpost: “nvmap_dma_alloc_attrs” [/usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/nvgpu.ko] undefined!
ERROR: modpost: “nvmap_dma_free_attrs” [/usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/nvgpu.ko] undefined!
make[2]: *** [scripts/Makefile.modpost:133: /usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/Module.symvers] Error 1
make[2]: *** Deleting file ‘/usr/src/kernel_out/nvgpu/drivers/gpu/nvgpu/Module.symvers’
make[1]: *** [Makefile:1830: modules] Error 2
make[1]: Leaving directory ‘/usr/src/linux-headers-5.15.148-tegra-ubuntu22.04_aarch64/3rdparty/canonical/linux-jammy/kernel-source’
make: *** [Makefile:93: nvgpu] Error 2
make: Leaving directory ‘/usr/src/kernel_out’
How can I correctly build the .ko files for out-of-tree drivers?
Once the .ko module is built, can I install it on the Jetson the same way as a driver in /kernel-jammy-src?
Any guidance on how to navigate this build process is appreciated.
Thanks,
Jin