Linux内核之块设备驱动
文章平均质量分 64
块设备驱动介绍
qxqxa
弱小就以弱小的方式前进吧!
展开
-
sdhc框架概述
Secure Digital(SD) Host Controller一般挂载sd和sdio设备,隶属于mmc子系统,其核心其实跟mmc子系统没什么差异;从我们先前的经验看,总线总是作为数据流通的的载体,那么这个载体我们总是分三段来看:设备--核心--主机;也可以简化成一句话:"设备在收发数据的时候,会调用核心提供的接口,这个接口会去匹配到设备挂载的具体控制器的具体收发的接口实现"。那我们还是按照先前这个并不成熟的总结依然往下看。原创 2023-11-25 12:08:49 · 557 阅读 · 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 · 502 阅读 · 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 · 473 阅读 · 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 · 158 阅读 · 1 评论