错误:来自不兼容指针类型的分配[-Werror = incompatible-pointer-types]

时间:2019-03-21 14:08:05

标签: linux-kernel kernel-module

我正在研究Linux内核模块。

在头文件中定义的结构tcpsp_conn如下:

struct tcpsp_conn {
...
struct timer_list timer; /* exp. timer*/
...
};

然后我声明一个指向该结构的指针,然后尝试分配该函数:

struct tcpsp_conn *cp;
cp->timer.function = tcpsp_conn_expire;

tcpsp_conn_expire函数的定义方法与内核的struct timer_list中的定义相同:

static void tcpsp_conn_expire(unsigned long data)

我不明白为什么会出现此错误: 错误:来自不兼容指针类型[-Werror = incompatible-pointer-types]的赋值   cp-> timer.function = tcpsp_conn_expire;

看起来类型没有问题。

1 个答案:

答案 0 :(得分:1)

tcpsp_conn_expire函数的类型.function结构的timer_list字段的类型不同。

在最新的内核(自4.15开始)中,此函数字段使用struct timer_list *参数而不是unsigned long声明,如下所示:

struct timer_list {
    ...
    void            (*function)(struct timer_list *);
    ...
};

具有这样的参数,您可以使用宏struct tcpsp_conn获取指向嵌入了计时器的container_of结构的指针。