块设备驱动程序
来源:互联网 发布:js event touch 编辑:程序博客网 时间:2024/06/11 00:43
通用块层
常用数据结构: bio
磁盘描述符 gendisk
generic_make_request 是通用块层的入口点
io调度层:
请求队列:request_queue
请求描述符:request
块设备:
block_device
注册块设备 register_blkdev 预定主设备号。
块设备文件操作描述符表:
open blkdev_open
release blkdev_close
llseek block_llseek
read genric_file_read
wrtie blkdev_file_write
aio_read generic_file_aio_read
aio_write blkdev_file_aio_write
mmap generic_file_mmap
fsync block_fsync
ioctl block_ioctl
compate-ioctl compat_blkdev_ioctl
readv generic_file_readv
writev generic_file_wrtie_nolock
sendfile generic_file_sendfile
块设备驱动程序注册流程:
1. 自定义驱动程序描述符
2. 预定主设备号 register_blkdev
3. 初始化自定义设备,alloc_disk gendisk
4. 初始化gendisk
5. 初始化块设备操作表 gendisk的fops
6. 分配和初始化请求队列
7. 设置中断处理程序 request_irq (主要调用end_thatA_request_first end_that_request_last)
8. 注册磁盘 add_disk
9.
策略例程: gendisk-》rq-》request_fn
待补充
i/o 调度请求:
generic_make_request 是通用块层向 io 调度交互的主要接口函数。
bio ---通用块层
queue_request request ---io调度层
blkdev_readpage-》block_read_full_page-》submit_bh-》submit_bio-》generic_make_request
block_dev.c
static const struct address_space_operations def_blk_aops = {
.readpage = blkdev_readpage,
.writepage = blkdev_writepage,
.sync_page = block_sync_page,
.write_begin = blkdev_write_begin,
.write_end = blkdev_write_end,
.writepages = generic_writepages,
.releasepage = blkdev_releasepage,
.direct_IO = blkdev_direct_IO,
};
.readpage = blkdev_readpage,
.writepage = blkdev_writepage,
.sync_page = block_sync_page,
.write_begin = blkdev_write_begin,
.write_end = blkdev_write_end,
.writepages = generic_writepages,
.releasepage = blkdev_releasepage,
.direct_IO = blkdev_direct_IO,
};
0 0
- 块设备驱动程序实现
- 13. 块设备驱动程序
- 块设备驱动程序
- 装载块设备驱动程序
- 块设备驱动程序框架
- 块设备驱动程序
- 块设备驱动程序
- .块设备驱动程序框架
- 块设备驱动程序
- 块设备驱动程序
- 块设备驱动程序之一
- 块设备驱动程序设计
- 块设备驱动程序<一>
- 块设备驱动程序<二>
- 块设备驱动程序
- 块设备驱动程序1
- 块设备驱动程序2
- 块设备驱动程序3
- 从B 树、B+ 树、B* 树谈到R 树
- ARPACK安装
- GDI+ 图片贴字程序MFC实现
- [LeetCode]148.Sort List
- 查找兄弟单词
- 块设备驱动程序
- 一月漫谈——《业务员与玩家》
- PHP下ORM的基本实现
- 数据库分页
- 黑马程序员--Java基础学习七(Java容器)
- MFC在文本框控件中实时显示时间
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符
- Hadoop常见错误及解决办法汇总
- Unity3D学习之(游戏注册界面)