I know nothing about this, but did see a google search which mentioned having storage on the device for holding Windows drivers…so that might not be an average driver install. Not sure.
Building a kernel module for a Jetson isn’t much different than for a desktop PC…so much (not all) of the common documents you find on the internet will apply. Many of those documents do assume you are building on a PC for a PC, and think you have kernel headers installed. However, you can download the kernel source (full, not just headers) and point there for headers.
A second difference is that if you build on a PC instead of on the Nano itself, then you must use cross compile procedures instead of just building. That means things like installing a cross-toolchain. In the case of an Ubuntu host (which you’d need anyway if you flash) then this isn’t so hard. The official documents explain this (and other than naming a nano instead of an xavier or tx2 the instructions for building a kernel are the same). You can go here (you might need to log in and hit the link a second time if it doesn’t redirect):
https://developer.nvidia.com/embedded/downloads
…select the Jetson Nano in hardware, and then search for “l4t documentation”. There will be section on customizing, and you are interested in building kernel modules.
Outside Linux documents will give good information on how to alter this for kernel modules not in the kernel source tree (known as “out of tree” builds…but instead of pointing to the location of the headers you point to the location where you have the full kernel source…which has the headers and even more). You can ask here if you end up with more questions.
I don’t know about this release of Nano, but you can find the kernel you are running via “uname -r”. It will show something like “4.9.108-tegra”. If you see a reference in kernel documents or configuration about “CONFIG_LOCALVERSION”, then that version would mean CONFIG_LOCALVERSION was set to “-tegra”, the suffix of “4.9.108-tegra” (you’ll know when you see the configure step what this is about).
Any computer you use to build the kernel on you will want to add package “libncurses5-dev”, and so on Ubuntu this command would add that package (this is for command line config editors):
sudo apt-get install libncurses5-dev
Before you start look at your running Nano, and save a copy somewhere of “/proc/config.gz”. Keep that safe. Make a note of the “uname -r” which applies to that config.gz. In any step you see for a “make …_defconfig” don’t do the defconfig…instead “zcat config.gz > .config” from the root of your build location, then update the CONFIG_LOCALVERSION (it is in the “.config” produced), e.g.:
CONFIG_LOCALVERSION="-tegra"
…this will give you an exact match to the existing kernel and any module you add by using this with new modules should work (and the “…_defconfig” won’t guarantee that).
After you’ve installed everything and done it one time it becomes much easier. It isn’t actually as hard as it would seem, but it does take time.