error:initialization of 'void (*) (struct net_device *, unsigned int)' from incompatible pointer type(以rhel8.6为例)

问题描述

出现“error:initialization of 'void (*) (struct net_device *, unsigned int)' from incompatible pointer type”的报错,如图1所示。

图1 报错提示

解决方案

首先去Linux内核代码里查询造成冲突的接口。

在代码里找到该定义,发现要和内核里的类型不冲突,所以选择正确的分支进行编译,如图2所示。

图2 编译

当定义REDHAT8_6时,选择对hinic3_tx_timeout进行正确定义。

#if defined(HAVE_NDO_TX_TIMEOUT_TXQ) || defined(REDHAT8_6)
static void hinic3_tx_timeout(struct net_device *netdev, unsigned int txqueue)
#else
static void hinic3_tx_timeout(struct net_device *netdev)
#endif