The kernel itself goes in “/boot” as a file copy. The exact name and location is the “LINUX” key/value pair entry in “/boot/extlinux/extlinux.conf”. I always suggest to never destroy the original kernel and simply add new kernels with a new extlinux.conf entry or altered name.
For a kernel build you’ll always need to configure the source to the current kernel configuration…your running system can provide this via file “/proc/config.gz” (just copy it somewhere and then “gunzip config.gz”).
If you only change module features, then you don’t need to update the kernel…only the modules need to be added (just to see if things are set up correctly you probably still want to build the kernel, just don’t install it). A feature change in the base kernel which is not done in the form of a module will probably be best accomplished with an update of both kernel image and modules.
Note that when the system runs you can get a version via “uname -r”. The kernel will look for its modules in “/lib/modules/uname -r/”. The left half of the version is part of the kernel source…the right half suffix in the name (such as “-tegra”) is from a kernel config item set just prior to compile. This is the CONFIG_LOCALVERSION. If you want to match the current kernel, and if “uname -r” is “3.10.96-tegra”, then CONFIG_LOCALVERSION must be set to “-tegra”. If you are modifying the base kernel, you might change CONFIG_LOCALVERSION to instead be something like “-modified” (and save the Image as “/boot/Image-3.10.96-modified”…this would be the new LINUX key/value pair in extlinux.conf).
Hi…
I succeed in compile and install the NVIDIA kernel.
I just copy the “Image” file to /boot directory. (not copy or flash the components, zImage…)
But when I run the sample program (tegra_multimedia_api/samples/09_camera_jpeg_capture/camera_jpeg_capture), just output black screen on monitor.
so when I copy and run original kernel (install by JetPack L4T R24.2.1), it output correct screen on monitor.
How to output correct screen using compiled the NVIDIA kernel?
Error Message:
NvPclHwGetModuleData: Misc Driver v4l2_focuser_stub already exists. Avoiding duplicate drivers
Sensor_LoadModeModeType: mode 0: Failed to load pixeltype
Sensor_LoadModePixelPhase: mode 0: Failed to load pixeltype
Sensor_LoadModeModeType: mode 1: Failed to load pixeltype
Sensor_LoadModePixelPhase: mode 1: Failed to load pixeltype
Sensor_LoadModeModeType: mode 2: Failed to load pixeltype
Sensor_LoadModePixelPhase: mode 2: Failed to load pixeltype
PRODUCER: Creating output stream
PRODUCER: Launching consumer thread
CONSUMER: Waiting until producer is connected...
CONSUMER: Waiting until producer is connected...
PRODUCER: Starting repeat capture requests.
CONSUMER: Producer has connected; continuing.
CONSUMER: Producer has connected; continuing.
Sensor_GetV4LPixelType: pixel type 0x101 invalid
SCF: Error Timeout: (propagating from src/services/capture/CaptureServiceEvent.cpp, function wait(), line 59)
Error: Camera HwEvents wait, this may indicate a hardware timeout occured,abort current/incoming cc
launchCC abort cc 104
SCF: Error Timeout: (propagating from src/api/Session.cpp, function capture(), line 731)
(Argus) Error Timeout: Failed to submit first capture request (propagating from src/api/CaptureSessionImpl.cpp, function submitCaptureRequests(), line 301)
(Argus) Error Timeout: (propagating from src/api/CaptureSessionImpl.cpp, function threadFunction(), line 741)
Error: waitCsiFrameStart timeout guid 0
Error: waitCsiFrameStart timeout guid 0
Was CONFIG_LOCALVERSION set to the same as the original kernel (probably “-tegra”)?
Second, was the starting config from “/proc/config.gz”?
Last, were the changes in config which you made based on addition of modules (“m” in the config editor), or were integrated kernel features changed (a “Y” in the config editor)? If changes were to modules, then changing Image would not change anything (requires CONFIG_LOCALVERSION to match to not change anything)…if changing only modules then Image could be left alone and only modules copied (plus “sudo depmod -a”).
If the kernel is built without CONFIG_LOCALVERSION it would cause the command “uname -r” to respond only with the base version, 3.10.96. If CONFIG_LOCALVERSION is set to “-tegra”, then “uname -r” will reply “3.10.96-tegra”. The kernel itself will look for its modules in “/lib/modules/uname -r/”, so missing this on the Image file will cause all modules to go missing (the search would be in the wrong place). You may find modules being rejected if the kernel things they were built for the wrong “uname -r”. So…what does “uname -r” respond as?
I added the parameter “CONFIG_LOCALVERSION=”-tegra" in “tegra21_defconfig” file (kernel/arch/arm64/configs) and checked “3.10.96-tegra”
But it’s the same result.
Is it wrong?
With modules and kernel built to use the same “uname -r” result (CONFIG_LOCALVERSION) you will at least know the kernel and any modules can find each other and won’t reject a module+kernel combination from this.
Were any modules added, or just the Image file? If modules were added, did you run “sudo depmod -a” after installing the module?
What was the actual driver or feature CONFIG_ item which you changed or added to support this camera? E.G., what was changed in “make menuconfig” or “make nconfig”? Knowing if this was added as a module or an integrated feature matters…knowing if you edited the config file directly or used a program like “make menuconfig” also matters since features may have dependencies and those programs track dependencies (but editing a file does not).
And then I created the uncompressed image that compiled to the sequence described above and copied the image file in the “/boot” on TX1 board.
I added only the set value (CONFIG_LOCALVERSION=“-tegra”) in tegra21_defconfig.
A part of tegra21_defconfig file
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_LOCALVERSION="-tegra"
# CONFIG_SWAP is not set
CONFIG_SYSVIPC=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
...
It should be ok to use tegra21_defconfig with CONFIG_LOCALVERSION edited. So I’m assuming your above edits made it in to the final “.config” which results from the “make tegra21_defconfig”. However, if your goal was to add a driver required for other video or camera compatibility, then the kernel which matches a default system will not help. Some error messages may change depending on what compiler was used, but overall your description was for adding a kernel which matched the existing kernel. You would have to add modules or alter other features of the config for new drivers or new features.
FYI, try the utils install which is mentioned above…it may not be kernel related.
Hi…
I have some other question.
If I want to change i2c address 0x36 to 0x21, which part of file do I change?
I tried to change the address or the device name in files that are ov5693.c, board-t210ref-camera.c.
But it wasn’t changed… the address 0x36, the device name “ov5693”.
And… Do you have reference sources for coding the module ADV7282M?
Thank you…
When you build a kernel you can tell it to build the dtb file via:
make dtbs
…or if you have set up a temp directory in some location specified by environment variable “TEGRA_KERNEL_OUT”:
make O=$TEGRA_KERNEL_OUT dtbs
The dtb file itself is looked for at the location specified in “/boot/extlinux/extlinux.conf” (be careful to not lose the original if you experiment). This file copy to “/boot” is separate from other kernel build file copies. The file specified there is loaded by U-Boot just prior to loading the kernel.
I solved the problem.
I modified device address in dts file and compiled the file.
And then the file copied the “/boot” directory.
Thank you for your replying.