块设备驱动加载全解析
1. 块设备请求处理代码分析
在块设备驱动中,有一段代码用于处理请求:
bh->b_end_io(bh, 1);
break;
default:
/* can’t happen */
bh->b_end_io(bh, 0);
break;
}
/* Nonzero return means we’re done */
return 0;
这段代码主要进行常规计算,以确定块在 sbull 设备中的位置,并使用 memcpy 执行操作。由于操作能立即完成,它会调用 bh->b_end_io 来指示操作完成,并向内核返回 0。不过,“make request” 函数需要处理一个细节:要传输的缓冲区可能位于高端内存,而内核无法直接访问高端内存。一种解决方法是使用 create_bounce 函数,将高端内存缓冲区替换为可访问内存的缓冲区。通常,内核在将缓冲区放入驱动的请求队列之前会使用 create_bounce ;但如果驱动实现了自己的 make_request_fn ,则需要自行处理此任务。
2. 块设备的挂载与卸载机制
块设备与字符设备和普通文件不同,它可以挂载到计算机的文件系统上。挂载为设备访问提供了一种间接层,与通过特定进程持有的 struct file 指针访问的字符设备不同,挂载文件系统时没有进程持有该文件结构。
超级会员免费看
订阅专栏 解锁全文
1803

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



