根据需要需要把依赖dpdk的kni module移植,所以就学习了下模块编译makefile,总结如下

Makefile内容如下

obj-m += rte_kni.o  #要生成的module文件名为rte_kni.ko
#指定生成module需要的所有.o文件
rte_kni-objs:=kni_misc.o kni_ethtool.o kni_net.o ethtool/ixgbe/ixgbe_main.o ethtool/ixgbe/ixgbe_api.o ethtool/ixgbe/ixgbe_common.o ethtool/ixgbe/ixgbe_ethtool.o ethtool/ixgbe/ixgbe_82599.o ethtool/ixgbe/ixgbe_82598.o ethtool/ixgbe/ixgbe_x540.o ethtool/ixgbe/ixgbe_phy.o ethtool/ixgbe/kcompat.o ethtool/igb/e1000_82575.o ethtool/igb/e1000_i210.o ethtool/igb/e1000_api.o ethtool/igb/e1000_mac.o ethtool/igb/e1000_manage.o ethtool/igb/e1000_mbx.o ethtool/igb/e1000_nvm.o ethtool/igb/e1000_phy.o ethtool/igb/igb_ethtool.o ethtool/igb/igb_hwmon.o ethtool/igb/igb_main.o ethtool/igb/igb_debugfs.o ethtool/igb/igb_param.o ethtool/igb/igb_procfs.o ethtool/igb/igb_vmdq.o
PWD:=$(shell pwd)
KERNEL_VERSION=/lib/modules/`uname -r`/build
#指定编译过程中需要引用的文件路径
CFLAGS +=  -I$(PWD)/ethtool/ixgbe -I$(PWD)/ethtool/igb
CFLAGS += -Wall -Werror
#编译入口
all:
        make -C $(KERNEL_VERSION) M=$(PWD) modules
clean:
        make -C $(KERNEL_VERSION) M=$(PWD) clean
kni模块主要文件可通过下面网址看到

http://www.dpdk.org/browse/dpdk/commit/?id=3fc5ca2f63529ec5ad7b1b75f517d61dc7613bd9

将Makefile放在kni路径下

make

即可生成module,module文件为rte_kni.ko

加载模块

insmod rte_kni.ko kthread_mode=multiple
提示错误insmod: error inserting 'rte_kni.ko': -1 Unknown symbol in module
dmesg日志显示
rte_kni: Unknown symbol hwmon_device_register
rte_kni: Unknown symbol hwmon_device_unregister
通过modinfo rte_kni.ko查看依赖hwmon模块
加载依赖模块
modprobe hwmon
然后
insmod rte_kni.ko kthread_mode=multiple
安装成功 dmesg日志如下
KNI: ######## DPDK kni module loading ########
KNI: loopback disabled
KNI: ######## DPDK kni module loaded  ########
Logo

更多推荐