CONFIG_IP_MULTICAST is a kernel feature. When you compile a kernel such features can be integrated within the kernel (grep would show “=y” for yes), or as a module (grep would show “=m” for module). Not all features can be made as a module, but if they can, then you only need to build the module. Many features are drivers, though not all features are drivers.
So the first thing you have to realize is that whatever you compile or build either the kernel Image file must be copied to the Jetson, or else a module file (some “name.ko”). If you changed a feature with “=y” you need to copy the Image. If you changed a feature with “=m”, then you need to copy the module. Other details are important, but that’s the basics.
First thing you need to do is understand how to build a kernel…it isn’t actually too bad if you follow some guides like this:
The step which you will need to pay attention to is that you start with a config matching the config.gz, and then use a tool such as “make nconfig” or “make menuconfig” to find the feature listed for CONFIG_IP_MULTICAST and enable it. If possible, just use a module format so the Image file doesn’t need copy.
Caution 1: Don’t overwrite an existing Image or file, just rename it slightly different and edit “/boot/extlinux/extlinux.conf” to point at the new Image if a full image is created; or copy the module into the correct location of “/lib/modules/$(uname -r)/kernel/”.
Caution 2: You need to set CONFIG_LOCALVERSION correctly, or modules will belong in the wrong place. On any system “uname -r” responds with a base kernel version number, .e.g., “4.4.15”, and then appends CONFIG_LOCALVERSION for the suffix, e.g., a typical TX1 responds to “uname -r” as “4.4.15-tegra” because the base source is version 4.4.15 and CONFIG_LOCALVERSION is “-tegra”. Modules are searched for based on this from when the kernel was built. Setting it incorrectly means modules will fail due to being searched for in the wrong place.
Also, when a module is in the right place you would typically run “sudo depmod -a” to get the system scan for the new module. Reboot or use “sudo insmod <module_name”>" to insert the module.
Trivia: zImage is a compressed version of Image. Making zImage also makes Image. I think Image is used instead of zImage due to lack of 64-bit compression in U-Boot. When supported, the two names would be interchangeable.
Tip: An original config Image should probably be renamed “Image-4.4.15-tegra” because of the default original “uname -r”. Modifying a module does not require any change. Should you modify the base kernel, then you probably need to change “uname -r” and reinstall both the kernel and the modules. An example would be to change “CONFIG_LOCALVERSION” to “-tegra_test”…in which case I’d suggest naming Image as “Image-4.4.15-tegra_test”.
Tip: “make menuconfig” or other config tools may require adding the ncurses-dev package (name of package differs slightly depending on Linux distribution). “make nconfig” adds an option to search for tags like “LOCALVERSION” or “IP_MULTICAST”.