Custom kmod generating empty package

I am getting "WARNING: kmod-mediatek_hnat is not available in the kernel config - generating empty package" for my custom kmod, that's make the kmod compilation is empty for the kmod package

Makefile :

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk

PKG_NAME:=mediatek_hnat
PKG_RELEASE:=3
PKG_LICENSE:=GPL-2.0

HOST_BUILD_DIR:=$(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)

define KernelPackage/mediatek_hnat
  SUBMENU:=Network Devices
  TITLE:=MediaTek MT762x HW NAT driver
  DEPENDS:=@(TARGET_mediatek_mt7622||TARGET_mediatek_mt7623) +kmod-nf-flow
  KCONFIG:= \
	CONFIG_BRIDGE_NETFILTER=y \
	CONFIG_NET_MEDIATEK_HNAT \
	CONFIG_NETFILTER_FAMILY_BRIDGE=y \
	CONFIG_NET_MEDIATEK_SOC=y \
	CONFIG_NF_CONNTRACK=y \
	CONFIG_NF_CONNTRACK_IPV4=y
	CONFIG_IP_NF_NAT=y \
	CONFIG_IP_NF_TARGET_MASQUERADE=y \
	CONFIG_NETFILTER_INGRESS=y \
	CONFIG_NF_FLOW_TABLE \
	CONFIG_NF_FLOW_TABLE_HW
  FILES:= \
	$(PKG_BUILD_DIR)/mtk_hnat/mtkhnat.ko
  AUTOLOAD:=$(call AutoLoad,55,mtkhnat)
endef

define KernelPackage/mediatek_hnat/description
MediaTek MT762x HW NAT driver
endef

define KernelPackage/mediatek_hnat/config
	source "$(SOURCE)/src/Kconfig"
endef

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

NOSTDINC_FLAGS := \
	$(KERNEL_NOSTDINC_FLAGS) \
	-I$(PKG_BUILD_DIR) \
	-I$(HOST_BUILD_DIR)/include  -DCONFIG_NF_FLOW_TABLE -DCONFIG_NF_FLOW_TABLE_HW

MAKE_OPTS:= \
	$(KERNEL_MAKE_FLAGS) \
	M="$(PKG_BUILD_DIR)"

define Build/Compile
	$(MAKE) -C "$(LINUX_DIR)" \
		$(MAKE_OPTS) \
		NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \
		modules
endef

define KernelPackage/$(PKG_NAME)/install
        $(INSTALL_DIR) $(1)/lib/modules/$(LINUX_VERSION)
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/mtk_hnat/mtkhnat.ko $(1)/lib/modules/$(LINUX_VERSION)
endef

$(eval $(call KernelPackage,mediatek_hnat))

Errors :

make[2]: Entering directory '/home/username/works/AX6S/package/mtk/mediatek_hnat'
WARNING: kmod-mediatek_hnat is not available in the kernel config - generating empty package
touch /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/.prepared_d9d7d7507b52c6e5fb73ac097a70f946_6664517399ebbbc92a37c5bb081b5c53_check
mkdir -p /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat
cp -fpR ./src/* /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/
touch /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/.prepared_d9d7d7507b52c6e5fb73ac097a70f946_6664517399ebbbc92a37c5bb081b5c53
rm -f /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/.configured_*
rm -f /home/username/works/AX6S/staging_dir/target-aarch64_cortex-a53_musl/stamp/.mediatek_hnat_installed
(cd /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/./; if [ -x ./configure ]; then find /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/ -name config.guess | xargs -r chmod u+w; find /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/ -name config.guess | xargs -r -n1 cp --remove-destination /home/username/works/AX6S/scripts/config.guess; find /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/ -name config.sub | xargs -r chmod u+w; find /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/ -name config.sub | xargs -r -n1 cp --remove-destination /home/username/works/AX6S/scripts/config.sub; AR="aarch64-openwrt-linux-musl-gcc-ar" AS="ccache_cc -c -march=armv8-a+crypto -mtune=cortex-a53 -O3 -funsafe-math-optimizations -ftree-vectorize -march=armv8-a+crypto -mtune=cortex-a53 -O3 -funsafe-math-optimizations -ftree-vectorize -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -ffile-prefix-map=/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/= -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro" LD=aarch64-openwrt-linux-musl-ld NM="aarch64-openwrt-linux-musl-gcc-nm" CC="ccache_cc" GCC="ccache_cc" CXX="ccache_cxx" RANLIB="aarch64-openwrt-linux-musl-gcc-ranlib" STRIP=aarch64-openwrt-linux-musl-strip OBJCOPY=aarch64-openwrt-linux-musl-objcopy OBJDUMP=aarch64-openwrt-linux-musl-objdump SIZE=aarch64-openwrt-linux-musl-size CFLAGS="-march=armv8-a+crypto -mtune=cortex-a53 -O3 -funsafe-math-optimizations -ftree-vectorize -march=armv8-a+crypto -mtune=cortex-a53 -O3 -funsafe-math-optimizations -ftree-vectorize -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -ffile-prefix-map=/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/= -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro " CXXFLAGS="-march=armv8-a+crypto -mtune=cortex-a53 -O3 -funsafe-math-optimizations -ftree-vectorize -march=armv8-a+crypto -mtune=cortex-a53 -O3 -funsafe-math-optimizations -ftree-vectorize -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -ffile-prefix-map=/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/= -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro " CPPFLAGS="-I/home/username/works/AX6S/staging_dir/toolchain-aarch64_cortex-a53_gcc-11.2.0_musl/usr/include -I/home/username/works/AX6S/staging_dir/toolchain-aarch64_cortex-a53_gcc-11.2.0_musl/include/fortify -I/home/username/works/AX6S/staging_dir/toolchain-aarch64_cortex-a53_gcc-11.2.0_musl/include " LDFLAGS="-L/home/username/works/AX6S/staging_dir/toolchain-aarch64_cortex-a53_gcc-11.2.0_musl/usr/lib -L/home/username/works/AX6S/staging_dir/toolchain-aarch64_cortex-a53_gcc-11.2.0_musl/lib -znow -zrelro "   ./configure --target=aarch64-openwrt-linux --host=aarch64-openwrt-linux --build=x86_64-pc-linux-gnu --program-prefix="" --program-suffix="" --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --sysconfdir=/etc --datadir=/usr/share --localstatedir=/var --mandir=/usr/man --infodir=/usr/info --disable-nls  ; fi; )
touch /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/.configured_68b329da9893e34099c7d8ad5cb9c940
rm -f /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622//.built
touch /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622//.built_check
make -C "/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/linux-5.10.156" KCFLAGS="-ffile-prefix-map=/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl=target-aarch64_cortex-a53_musl -march=armv8-a+crypto -mtune=cortex-a53 -O3 -funsafe-math-optimizations -ftree-vectorize -march=armv8-a+crypto -mtune=cortex-a53 -O3 -funsafe-math-optimizations -ftree-vectorize" HOSTCFLAGS="-O2 -I/home/username/works/AX6S/staging_dir/host/include -I/home/username/works/AX6S/staging_dir/hostpkg/include -I/home/username/works/AX6S/staging_dir/target-aarch64_cortex-a53_musl/host/include -Wall -Wmissing-prototypes -Wstrict-prototypes" CROSS_COMPILE="aarch64-openwrt-linux-musl-" ARCH="arm64" KBUILD_HAVE_NLS=no KBUILD_BUILD_USER="username" KBUILD_BUILD_HOST="siliwangi.io" KBUILD_BUILD_TIMESTAMP="Thu Dec  1 13:53:20 2022" KBUILD_BUILD_VERSION="0" HOST_LOADLIBES="-L/home/username/works/AX6S/staging_dir/host/lib" KBUILD_HOSTLDLIBS="-L/home/username/works/AX6S/staging_dir/host/lib" CONFIG_SHELL="bash" V=''  cmd_syscalls= KBUILD_EXTRA_SYMBOLS="/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/symvers/gpio-button-hotplug.symvers" KERNELRELEASE=5.10.156 M="/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat" NOSTDINC_FLAGS="-nostdinc  -isystem /home/username/works/AX6S/staging_dir/toolchain-aarch64_cortex-a53_gcc-11.2.0_musl/lib/gcc/aarch64-openwrt-linux-musl/11.2.0/include -I/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat -I/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/linux-5.10.156/include  -DCONFIG_NF_FLOW_TABLE -DCONFIG_NF_FLOW_TABLE_HW" modules
make[3]: Entering directory '/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/linux-5.10.156'
  CC [M]  /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/mtk_hnat/hnat.o
  CC [M]  /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/mtk_hnat/hnat_nf_hook.o
  CC [M]  /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/mtk_hnat/hnat_debugfs.o
  CC [M]  /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/mtk_hnat/hnat_mcast.o
  LD [M]  /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/mtk_hnat/mtkhnat.o
  MODPOST /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/Module.symvers
  CC [M]  /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/mtk_hnat/mtkhnat.mod.o
  LD [M]  /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/mtk_hnat/mtkhnat.ko
make[3]: Leaving directory '/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/linux-5.10.156'
for subdir in .; do realdir=$(readlink -f /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat); grep -F /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/$subdir/Module.symvers >> /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/Module.symvers.tmp; [ "/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat" = "$realdir" ] || grep -F $realdir /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/$subdir/Module.symvers >> /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/Module.symvers.tmp; done; sort -u /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/Module.symvers.tmp > /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/Module.symvers; mkdir -p /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/symvers; mv /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/Module.symvers /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/symvers/mediatek_hnat.symvers
touch /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622//.built
rm -rf /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/.pkgdir/kmod-mediatek_hnat.installed /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/.pkgdir/kmod-mediatek_hnat
mkdir -p /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/.pkgdir/kmod-mediatek_hnat
true
touch /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/.pkgdir/kmod-mediatek_hnat.installed
mkdir -p /home/username/works/AX6S/staging_dir/target-aarch64_cortex-a53_musl/root-mediatek/stamp
SHELL= flock /home/username/works/AX6S/tmp/.root-copy.flock -c 'cp -fpR /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/.pkgdir/kmod-mediatek_hnat/. /home/username/works/AX6S/staging_dir/target-aarch64_cortex-a53_musl/root-mediatek/'
touch /home/username/works/AX6S/staging_dir/target-aarch64_cortex-a53_musl/root-mediatek/stamp/.kmod-mediatek_hnat_installed
mkdir -p /home/username/works/AX6S/bin/targets/mediatek/mt7622/packages /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/ipkg-aarch64_cortex-a53/kmod-mediatek_hnat/CONTROL /home/username/works/AX6S/staging_dir/target-aarch64_cortex-a53_musl/pkginfo
true
find /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/ipkg-aarch64_cortex-a53/kmod-mediatek_hnat -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| xargs -r rm -rf
export CROSS="aarch64-openwrt-linux-musl-"   ; NM="aarch64-openwrt-linux-musl-nm" STRIP="aarch64-openwrt-linux-musl-strip --strip-all" STRIP_KMOD="/home/username/works/AX6S/scripts/strip-kmod.sh" PATCHELF="/home/username/works/AX6S/staging_dir/host/bin/patchelf" /home/username/works/AX6S/scripts/rstrip.sh /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/ipkg-aarch64_cortex-a53/kmod-mediatek_hnat
(cd /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/ipkg-aarch64_cortex-a53/kmod-mediatek_hnat/CONTROL; ( echo "$CONTROL"; printf "Description: "; echo "$DESCRIPTION" | sed -e 's,^[[:space:]]*, ,g'; ) > control; chmod 644 control; ( echo "#!/bin/sh"; echo "[ \"\${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; echo "[ -s "\${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; echo ". \${IPKG_INSTROOT}/lib/functions.sh"; echo "default_postinst \$0 \$@"; ) > postinst; ( echo "#!/bin/sh"; echo "[ -s "\${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; echo ". \${IPKG_INSTROOT}/lib/functions.sh"; echo "default_prerm \$0 \$@"; ) > prerm; chmod 0755 postinst prerm;  )
install -d -m0755 /home/username/works/AX6S/bin/targets/mediatek/mt7622/packages
/home/username/works/AX6S/staging_dir/host/bin/fakeroot /home/username/works/AX6S/staging_dir/host/bin/bash /home/username/works/AX6S/scripts/ipkg-build -m "" /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/ipkg-aarch64_cortex-a53/kmod-mediatek_hnat /home/username/works/AX6S/bin/targets/mediatek/mt7622/packages
Packaged contents of /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mediatek_hnat/ipkg-aarch64_cortex-a53/kmod-mediatek_hnat into /home/username/works/AX6S/bin/targets/mediatek/mt7622/packages/kmod-mediatek_hnat_5.10.156-3_aarch64_cortex-a53.ipk
echo "kmod-mediatek_hnat" >> /home/username/works/AX6S/staging_dir/target-aarch64_cortex-a53_musl/pkginfo/mediatek_hnat.default.install
make[2]: Leaving directory '/home/username/works/AX6S/package/mtk/mediatek_hnat'
time: package/mtk/mediatek_hnat/compile#2.82#1.89#4.67
make[1]: Leaving directory '/home/username/works/AX6S'

The package is normally inside ./target/linux/mediatek/files but I wanted to make a separate custom kmod for better compilation logs visibilities.

How fixes above?, I've meant generating the kmod packages normally.

Empty kmod packages aren't necessarily unexpected, if the module is already statically included in the kernel(-configuration), which case the empty packages merely act as dependency tracker.

1 Like

Hmm, tried to selecting it as "M" in menuconfig, but it doesn't get packaged, it got build (mtk_hnat/mtkhnat.ko) but the package is empty.

Also still getting the warning "WARNING: kmod-mediatek_hnat is not available in the kernel config - generating empty package"

Already tried to make clean before it.

After reorganizing and removing the KCONFIG variables, managed to packaged it.

Full Makefile (Incase useful to another AX6S user) :

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk

PKG_NAME:=mediatek_hnat
PKG_RELEASE:=3
PKG_LICENSE:=GPL-2.0

HOST_BUILD_DIR:=$(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)

define KernelPackage/mediatek_hnat
  SUBMENU:=Network Devices
  TITLE:=MediaTek MT762x HW NAT driver
  DEPENDS:=@(TARGET_mediatek_mt7622||TARGET_mediatek_mt7623) +kmod-nf-flow
  KCONFIG:= \
	CONFIG_BRIDGE_NETFILTER=y \
	CONFIG_NETFILTER_FAMILY_BRIDGE=y
  FILES:= \
	$(PKG_BUILD_DIR)/mtk_hnat/mtkhnat.ko
  AUTOLOAD:=$(call AutoLoad,55,mtkhnat)
endef

define KernelPackage/mediatek_hnat/description
MediaTek MT762x HW NAT driver
endef

define KernelPackage/mediatek_hnat/config
	source "$(SOURCE)/src/Kconfig"
endef

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

NOSTDINC_FLAGS := \
	$(KERNEL_NOSTDINC_FLAGS) \
	-I$(PKG_BUILD_DIR) \
	-I$(HOST_BUILD_DIR)/include  -DCONFIG_NF_FLOW_TABLE -DCONFIG_NF_FLOW_TABLE_HW

MAKE_OPTS:= \
	$(KERNEL_MAKE_FLAGS) \
	M="$(PKG_BUILD_DIR)"

define Build/Compile
	$(MAKE) -C "$(LINUX_DIR)" \
		$(MAKE_OPTS) \
		NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \
		modules
endef

define KernelPackage/$(PKG_NAME)/install
		$(INSTALL_DIR) $(1)/lib/modules/$(LINUX_VERSION)
		$(INSTALL_BIN) $(PKG_BUILD_DIR)/mtk_hnat/mtkhnat.ko $(1)/lib/modules/$(LINUX_VERSION)
endef

$(eval $(call KernelPackage,mediatek_hnat))

Thanks @slh for the pointers.

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.