
Linux内核之块设备驱动
文章平均质量分 72
块设备驱动介绍
qxqxa
meizuo
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
块设备的两种访问方法的区别
当我们运行类似于“dd if=/dev/sdb1of=sdb1.img”的命令把整个/dev/sdb1裸分区复制到sdb1.img的时候,内核走的是def_blk_fops这个file_operations另外一种方法是通过文件系统来访问块设备,file_operations的实现则位于文件系统内,文件系统会把针对文件的读写转换为针对块设备原始扇区的读写。原创 2024-11-15 18:10:28 · 567 阅读 · 0 评论 -
块设备驱动的基本概念
块设备只能以块为单位接收输入和返回输出,而字符设备则以字节为单位。大多数设备是字符设备,因为它们不需要缓冲而且不以固定块大小进行操作;字符设备只能被顺序读写,而块设备可以随机访问。块设备对于I/O请求有对应的缓冲区,因此它们可以选择以什么顺序进行响应,字符设备无须缓冲且被直接读写。对于存储设备而言,调整读写的顺序作用巨大,因为在读写连续的扇区的存储速度比分离的扇区更快。所有的EXT4、UBIFS、原始块设备又都工作于VFS之下,而EXT4、UBIFS、原始块设备之下又包含块I/O调度层以进行排序和合并。原创 2024-10-30 18:11:53 · 730 阅读 · 0 评论 -
page cache是怎么回写到存储设备的?
blk_queue_bio先调用add_acct_request,里面通过I/O电梯调度算法将request插到request_queue中,电梯调度算法有3种: cfq, deadline, noop,然后他调用__blk_run_queue,里面会调用之前块设备中注册的request处理回调函数q->request_fn来在块设备驱动中处理这个request。在blk_init_queue这个函数中会初始化request_fn和make_request_fn这两个回调函数。原创 2024-10-15 17:45:13 · 336 阅读 · 0 评论 -
sdhc框架概述
Secure Digital(SD) Host Controller一般挂载sd和sdio设备,隶属于mmc子系统,其核心其实跟mmc子系统没什么差异;从我们先前的经验看,总线总是作为数据流通的的载体,那么这个载体我们总是分三段来看:设备--核心--主机;也可以简化成一句话:"设备在收发数据的时候,会调用核心提供的接口,这个接口会去匹配到设备挂载的具体控制器的具体收发的接口实现"。那我们还是按照先前这个并不成熟的总结依然往下看。原创 2023-11-25 12:08:49 · 757 阅读 · 0 评论 -
sdhci怎么通过dma/pio传输数据
sdio设备驱动调用sdio_memcpy_toio/sdio_memcpy_fromio来读写sdio设备,都会调用到host->ops->request(host, mrq),其框架如下。如果是dma传输完成中断,就会走sdhci_set_sdma_addr重新设置需要传输数据块的dma地址。对于adma就要通过dma_map_sg对一个sgl做映射,并返回sg_count。通过for_each_sg遍历每个sg,并通过__sdhci_adma_write_desc将描述符依次写进对应寄存器。原创 2024-05-17 17:47:50 · 819 阅读 · 0 评论 -
块设备的读写框架
open系统调用打开字符设备文件时,会调用do_dentry_open,里面的f->f_op = fops_get(inode->i_fop);就是把上面init_special_inode里的inode->i_fop = &def_blk_fops赋给f->f_op;vfs_read里的file->f_op->read_iter就等于def_blk_fops的read_iter成员。其中file->f_op->write_iter就等于def_blk_fops的write_iter成员。原创 2024-04-03 16:06:27 · 605 阅读 · 0 评论 -
简述mmc子系统框架
下面这句dev->driver = drv,就跟mmc_bus_probe的dev->driver对上了,就是总线上已注册的mmc_driver,当执行dev->bus->probe就调用了上面的mmc_bus_probe。设备-总线-驱动,注册了两条总线,还是像之前i2c/spi总线一样,还是core给出处理数据的通用接口,host-driver来做具体的实现,device-driver来调用。比如检查到mmc卡插上了,就会attach上mmc相关的初始化操作mmc_ops,设置电压,初始化card等。原创 2023-09-23 17:33:07 · 296 阅读 · 1 评论