Jetson Nano apply Ebtables in intel AX200

Hi everyone,

I want to apply ebtables module in Jetson Nano but the official image doesn’t set it. So I try to download the Jetson Nano source code and rebuild it with Tegra_defconfig modification. I add the configurations below and replace the boot Image, dtb and /lib/modules directory.

CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
CONFIG_BRIDGE_EBT_T_NAT=m
CONFIG_BRIDGE_EBT_802_3=m
CONFIG_BRIDGE_EBT_AMONG=m
CONFIG_BRIDGE_EBT_ARP=m
CONFIG_BRIDGE_EBT_IP=m
CONFIG_BRIDGE_EBT_IP6=m
CONFIG_BRIDGE_EBT_LIMIT=m
CONFIG_BRIDGE_EBT_MARK=m
CONFIG_BRIDGE_EBT_PKTTYPE=m
CONFIG_BRIDGE_EBT_STP=m
CONFIG_BRIDGE_EBT_VLAN=m
CONFIG_BRIDGE_EBT_ARPREPLY=m
CONFIG_BRIDGE_EBT_DNAT=m
CONFIG_BRIDGE_EBT_MARK_T=m
CONFIG_BRIDGE_EBT_REDIRECT=m
CONFIG_BRIDGE_EBT_SNAT=m
CONFIG_BRIDGE_EBT_LOG=m
CONFIG_BRIDGE_EBT_NFLOG=m

After replacing them and reboot, the wifi modules is failed to load.

[    3.977546] compat: loading out-of-tree module taints kernel.
[    3.989995] compat: disagrees about version of symbol __nlmsg_put
[    3.997066] compat: Unknown symbol __nlmsg_put (err -22)
[    4.003007] compat: disagrees about version of symbol kfree_skb
[    4.009306] compat: Unknown symbol kfree_skb (err -22)
[    4.014989] compat: disagrees about version of symbol netlink_broadcast
[    4.022102] compat: Unknown symbol netlink_broadcast (err -22)
[    4.028458] compat: disagrees about version of symbol __alloc_skb
[    4.035047] compat: Unknown symbol __alloc_skb (err -22)
[    4.040883] compat: disagrees about version of symbol init_net
[    4.047301] compat: Unknown symbol init_net (err -22)
[    4.052893] compat: disagrees about version of symbol netlink_unicast
[    4.059730] compat: Unknown symbol netlink_unicast (err -22)
[    4.065729] compat: disagrees about version of symbol nlmsg_notify
[    4.072310] compat: Unknown symbol nlmsg_notify (err -22)
[    4.078530] compat: disagrees about version of symbol __genl_register_family
[    4.085931] compat: Unknown symbol __genl_register_family (err -22)
[    4.095910] compat: disagrees about version of symbol skb_clone
[    4.102025] compat: Unknown symbol skb_clone (err -22)
[    4.107535] compat: disagrees about version of symbol genl_unregister_family
[    4.114814] compat: Unknown symbol genl_unregister_family (err -22)

How can I solve this problem?
Or if there are some correct method to add configurations?

If you were to add EBT, then you would not need to change the device tree, and this could result in boot failure or some part of the Nano not working. If you only added modules, then additionally you would want to avoid installing a new Image. For a case where this can be added as a module, then I will suggest flashing your unit back to default, building modules, and then copying the modules to the correct “/lib/modules/$(uname -r)/kernel/” location without ever touching Image or device tree.

FYI, if you directly edited the config and did not use an editor intended for this (e.g., “make menuconfig” or “make nconfig”), then dependencies would fail. The config editor knows about dependencies and will add or remove other features when you enable one. I recommend “make nconfig” because it can search for symbols.

Also, not all features can be modules, and in that case, then you would also build and install the Image. The config editors know this and will only offer “m” or “y” choices based on if those formats are available/valid.

Note that although you should not be installing a new Image for just a module addition, that you would still want to build the Image target just for adding configuration and sanity checking. Technically you could just “make modules_prepare” instead of “make Image”, but I consider the base kernel build to be a sanity check (plus it completes “modules_prepare” anyway).

If you want to know more about adding modules or kernel building just ask, but I recommend start with a clean flash, and substitute that default running system’s “/proc/config.gz” (copied as gunzip and then name to “.config” to the build location) for config instead of using “tegra_defconfig”. The reason is that a running system’s “/proc/config.gz” is always an exact match to what you are currently booted (other than needing CONFIG_LOCALVERSION set correctly). “tegra_defconfig” probably is a match on an unmodified system, but you won’t know for sure.

Hi

Thanks for your reply. I try to download the kernel sources code and rebuild it. After I replace the image and make modules_install, I reinstall the AX200 wifi modules. And it work fine.

By the way, when I only do the make modules_install, it doesn’t work. So I replace the image, too.

Thank you a lot~

So far as building modules goes, there is an extra config step, “modules_prepare”. Building the Image performs this step (even if you don’t install a new Image there is some software config related to module builds). You might find this of interest (search for “modules_prepare”, but understand in some places it is talking about "out of tree content…content which is from third party source code):
https://www.kernel.org/doc/Documentation/kbuild/modules.txt

In other cases there may be new features integrated into the Image, and the module could depend on this, so adding just a module for that situation would fail. The acid test is that “it works”.