When you build a kernel you will need to set the configuration to match the current system, and then edit specific changes you want. Following this there are some kernel build targets which can be used to bring up different optional menus for editing that config (versus using an editor which might miss a dependency).
FYI, some of those use text mode (and are the ones I prefer). These require adding package “libncurses5-dev” to the computer used for compiling. You may also see references to cross-compile, which implies building on a PC host, but intended for the Jetson as a target (Jetson CPU architecture is not native to a PC host, and vice versa). You can ask more about that if needed, but here is some config information.
If you are at the kernel source tree and you run “make mrproper” the source will be turned completely pristine with no configuration. It isn’t a bad idea to start with this, but do beware that if you had any config in it this config will be gone. You can run “make clean” which won’t remove the config, but will clean out previous compiled files. You can “make tegra21_defconfig”, this will do a basic setup for a TX1…however, this may not match the kernel you are currently using. A running Jetson has a file “/proc/config.gz” which is a reflection of the current running system’s configuration…this is always the best starting spot if you have this. The file in the kernel source which is used is the one named “.config”…if you copy config.gz to that spot, then “gunzip config.gz” and “cp config .config” you will have a starting place which is a nearly exact match to the current system.
I say “nearly” because you still need to set “CONFIG_LOCALVERSION”. If you run the command “uname -r” on the Jetson it will respond with something like “4.4.38-tegra”. The “4.4.38” is from the kernel source, the suffix “-tegra” is from CONFIG_LOCALVERSION. You need to still match CONFIG_LOCALVERSION, and then you have an exact perfect match to the current system.
If you then run “make menuconfig”, or “make nconfig”, or “make xconfig”, you will see some of the different editor choices. My favorite is nconfig because it has both a search for symbol option (such as “localversion” or “swap”), plus you have an option to show even the options which can’t be selected due to missing prerequisites. I think the one you saw was from “make xconfig”.
Do beware that the “O=/somewhere” option is used to avoid cluttering up the original source and to do the building in a different directory (you will see references to this in cross compile guides). This option needs to be used at every step if you use it at all. Thus, “make nconfig” would be configuring the wrong directory if you use “O=/somewhere” in the commands which follow…use “make O=/some/where nconfig” or similar.
When you do finally install the resulting “Image” file don’t overwrite your old one, keep it handy. Perhaps change the file to something like “Image-4.4.38-tegra_custom”, and then add a duplicate boot entry in “/boot/extlinux/extlinx.conf”. You can use a serial console to select the alternate entry, or else set this entry to be the default. I hate setting to default without first testing, but this requires serial console to interact with U-Boot menu selection. See: