编译Linux块驱动程序init_request函数时出现不兼容的指针类型错误

时间:2019-12-06 19:19:28

标签: c linux-device-driver

我正在编写Linux块驱动程序。我一直在用另一个作为参考 https://elixir.bootlin.com/linux/v4.0/source/drivers/block/mtip32xx/mtip32xx.c#L2382

我在blk_mq_ops结构的init_request函数中遇到问题:

static struct blk_mq_ops mydrv_mq_ops = {
    .queue_rq = mydrv_queue_rq,
    .init_request   = mydrv_init_cmd,
}; 

我的功能是:

int mydrv_init_cmd(void *data, struct request *rq, unsigned int hctx_idx, unsigned int request_idx, unsigned int numa_node)
{
    struct mydrv_cmd *cmd = blk_mq_rq_to_pdu(rq);

    sg_init_table(cmd->sg, REQ_MAX_SEG);
}

但是当我编译它时,我得到一个错误:

  

../ mydrv.c:在顶层:

     

../ mydrv.c:344:18:错误:从不兼容的指针类型[-Werror = incompatible-pointer-types]初始化

     

.init_request = mydrv_init_cmd,

     

mydrv.c:344:18:注意:(“ mydrv_mq_ops.init_request”的初始化附近)

我无法弄清楚问题出在什么地方,因为我的功能只是从参考文献中取消了。如何解决此编译器错误?

1 个答案:

答案 0 :(得分:0)

您从中借用的示例将init_request函数定义为static函数。您可能还需要使函数static并从static struct进行引用:

static int mydrv_init_cmd(void *data, struct request *rq, unsigned int hctx_idx, unsigned int request_idx, unsigned int numa_node)