I am reading and answering as I go; for an actual answer you could skip to the end.
When you change a feature to be “=y
”, or when you change CONFIG_LOCALVERSION
, then you have invalidated all loaded modules. Sometimes they will work, but if you change an “=y
”, and install a new kernle Image
, you must also build and install 100% of the modules in the new location.
The command “uname -r
” comes from the kernel telling you the base software version in the prefix, and the CONFIG_LOCALVERSION
in the suffix. Your “uname -r
” of “5.15.148-custom
” says this is where that particular kernel Image
is looking for modules:
/lib/modules/5.15.148-custom/kernel/
Had this still been “-tegra
”, then the location would have been:
/lib/modules/5.15.148-tegra/kernel/
It is good that you used a different location because the original kernel can still use the 5.15.148-tegra
content as a backup. Had you changed an “=y
” feature, and not changed CONFIG_LOCALVERSION
, the chances are that the new kernel would have errors and refuse to load modules from the original kernel. You would have had to have destroyed the original kernel’s modules, and you never want to do that until you are certain you don’t need the original (and often it is desirable to keep the original handy anyway in case of something like an OTA update problem).
Did you build and install all modules with the new kernel Image-custom
?
Note that on some kernels there is out of tree content available. That content is only accessed if particular kernel configurations are used, so it doesn’t always matter. However, some of the NVIDIA-specific content might need this. When unpacking the source code you will typically see these tarball packages inside of the master public sources package (I’m showing the command to extract just those packages; the kernel_src.tbz2
is the public kernel source, the others might be present for out of tree content):
tar xvfj public_sources.tbz2 Linux_for_Tegra/source/kernel_src.tbz2
tar xvfj public_sources.tbz2 Linux_for_Tegra/source/kernel_oot_modules_src.tbz2
tar xvfj public_sources.tbz2 Linux_for_Tegra/source/nvidia_kernel_display_driver_source.tbz2
For example, it is likely the nvgpu.ko
, is configured in kernel build, would require the `nvidia_kernel_display_driver_source.tbz2`` to be unpacked (you’d unpack each of those three packages after extracting them from the main public sources tarball).
It is also possible that the nvgpu.ko
from the old build has been built such that it can load into the new -custom
build without rebuild. Copy it over, monitor “dmesg --follow
”, and see if it shows up as an error from “sudo depmod -a
”. If no error, reboot. If an error exists, then remove that module from the -custom
tree (building that module against the -custom
configuration would then be required).
From an earlier post, I’m adding this comment (plus you are asking about wifi now; I think this applies to solving wifi):
No particular driver is allowed simultaneously as both =y
(integrated) and =m
(modular). This would be an error. If you check the output of “zcat /proc/config.gz
”, and you see the driver as “=y
”, then you should delete or remove the driver in the -custom
area which is a module format. When you have the “=y
” you cannot use “module procedures” to change anything related to that driver.
You would have to ask someone else about adding the kernel and modules via flash. The base documentation does have that in it though. You’d go here for the documentation specific to L4T R36.4:
https://developer.nvidia.com/embedded/jetson-linux-r3640
This would be under kernel customization, but you could skip the part about building the kernel with cross compile (you’ve already done this with native compile, but the procedure for putting this in the flash software is the same).