还是关于打patch的问题。
这次我还是编译ixgbe的驱动,可make的时候总提示 “/home/netmap/LINUX/ixgbe/ixgbe_main.c:1530:39: 错误:‘budget’未声明(在此函数内第一次使用)” 的问题。
没办法只能把ixgbe_main.c和patch文件一行一行对了,这一对还真发现了大问题。
默认的patch和实际的系统驱动对不上,在ixgbe_main.c的函数ixgbe_alloc_rx_buffers中没有“budget”,而"budget"应该在函数ixgbe_clean_rx_irq中。
找一个比较符合的patch进行修改,或者干脆直接把符合的patch改名成默认寻找的patch。
不管怎么样总算是能够编过了。
接下来又遇到一个新的问题,在使用“insmod ixgbe/ixgbe.ko”时,报如下错误:
"insmod: error inserting 'ixgbe.ko': -1 Unknown symbol in module"
这个就头痛了,使用dmesg -c将dmesg清空。再次使用“insmod ixgbe/ixgbe.ko”,用dmesg查看,错误如下:
[ 903.973212] ixgbe: Unknown symbol mdio_mii_ioctl (err 0)
[ 903.973564] ixgbe: Unknown symbol mdio45_probe (err 0)
又查了半天,下面是google找到的解决方法:
使用It is not a build problem: the ixgbe module depends on other modules, which you can find with 'modinfo ixgbe/ixgbe.ko | grep ^depends:'. Since we are using insmod, we need to load the dependencies by ourselves:
modprobe
mdio modprobe ptp modprobe dca insmod ./netmap.ko insmod ./ixgbe/ixgbe.ko
modinfo ixgbe/ixgbe.ko | grep ^depends:
可以查看ixgbe.so的所有依赖,其中就有mdio, ptp, dca
按照上面的命令使用modprobe把mdio, ptp, dca依次加上
再用
就可以了。insmod ./netmap.ko insmod ./ixgbe/ixgbe.ko