sd卡驱动
- 简介
MMC/SD存储卡是一种典型的块设备,它的实现位于drivers/mmc。Drivers/mmc下又分为card、core、host三个子目录。Card层实际跟块设备子系统对接,实现块设备驱动,core层处理块驱动和sd卡设备的匹配,host层实现了sdhci控制器驱动,在检测到sd存在会向系统中添加sd卡设备。匹配过程图解如下;
- sdhci控制器识别并添加sd卡的过程
sdhci控制器驱动和dts匹配后执行函数sdhci_msm_probe,该函数初始化sdhci_host,然后添加系统中,当sdhci控制的中断发生时,中断函数会调用之前配置的延迟函数,该函数会检查sd卡是否存在并添加到系统中。
- sdhci_msm_probe
sdhci_pltfm_init
sdhci_alloc_host
mmc_alloc_host
INIT_DELAYED_WORK(&host->detect, mmc_rescan);
sdhci_add_host
__sdhci_add_host
request_threaded_irq(host->irq, sdhci_irq, sdhci_thread_irq,
IRQF_SHARED, mmc_hostname(mmc), host);
- sdhci_thread_irq
mmc_detect_change
_mmc_detect_change
mmc_schedule_delayed_work(&host->detect, delay);
- mmc_rescan
mmc_rescan_try_freq
mmc_attach_sd
mmc_add_card //添加了sd设备
- sd驱动probe函数分析
mmc_blk_probe
mmc_blk_alloc
mmc_blk_alloc_req
mmc_init_queue
blk_init_queue(mmc_request_fn, lock);
kthread_run(mmc_queue_thread, mq, "mmcqd/%d%s",
host->index, subname ? subname : "");
mmc_add_disk
- 块设备访问流程
mmc_request_fn
mmc_queue_thread
mmc_blk_issue_rq
mmc_blk_issue_rw_rq
mmc_start_req
__mmc_start_data_req
mmc_start_request
__mmc_start_request
host->ops->request //sdchi控制器提供