在参考一些设备驱动书籍、网上资料实现一个软块设备时,即使把它们的提供的代码原封不动地照抄,一编译,错误满屏。简单看了下,发现是多数是“查无此人”。显然是内核版本不对了。比如blk_init_queue()就被新版内核弃用了。
首先先去https://kernel.org下载一个旧版本的内核如2.6.10.
然后找到blk_init_queue(),可以发现,它是作为一个高级接口,基于请求、请求队列等结构体的一些冗余字段和一些操作函数做了很多额外的工作从而实现制造请求、进出队列等等过程。
新版内核(如5.4.20)去除了这些高级接口以及简化了相关的结构体的字段,让驱动开发者自己来实现这些功能。
因此,我们还是可以参考旧版的操作,基于新版的内核实现blk_init_queue()的功能。
实现代码示例:
static void _transfer(_dev_t *dev, unsigned long sector, unsigned long nsect, char* buffer, int write)
{
unsigned long offset = sector

本文讲述了如何在新版Linux内核(如5.4.20)中调整软设备驱动,通过理解blk_init_queue的变迁,借鉴旧版操作,实现在新环境下创建和管理请求队列。实例演示了transfer和request_process函数的更新,以及如何在gendisk注册部分替换旧接口。
最低0.47元/天 解锁文章
4405

被折叠的 条评论
为什么被折叠?



