SLES15 SP3(内核5.3.18-59.16)下驱动编译make_request_fn报错求助
故障原因及解决方案
故障原因
你编译的驱动使用了Linux内核已弃用的make_request_fn块设备IO钩子接口,SLES15 SP3的5.3.18内核虽然主版本号为5.3,但SUSE已经回移了高版本内核的块层重构代码,移除了make_request_fn类型定义及struct request_queue结构体中的对应成员,因此触发编译报错。
修复方案
方案一(推荐)
联系驱动的官方提供方,索要适配SLES15 SP3内核版本的驱动安装包,直接安装即可,无需手动修改代码。
方案二(手动修改代码适配)
按以下步骤修改对应源码文件:
- 修改
KernelTracer.h
找到第87行代码:
make_request_fn* original_make_request_fn;
替换为:
blk_qc_t (*original_submit_bio)(struct bio *bio);
- 修改
KernelTracer.c
- 找到
make_request_hook函数定义,将函数签名修改为适配submit_bio的格式,原逻辑中调用原有接口的行device_info->original_make_request_fn(q, bio);替换为return device_info->original_submit_bio(bio); - 将所有代码中访问
bd->bd_disk->queue->make_request_fn的位置,全部替换为bd->bd_disk->queue->submit_bio,涉及的代码行包括:第764、768、776、779、784、810行 - 将所有代码中引用
original_make_request_fn成员变量的位置,全部替换为original_submit_bio
修改完成后重新执行编译命令即可。
内容的提问来源于stack exchange,提问作者JoeyM
相关产品推荐
相关产品推荐

