我正在编写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”的初始化附近)
我无法弄清楚问题出在什么地方,因为我的功能只是从参考文献中取消了。如何解决此编译器错误?
答案 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)