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卡是否存在并添加到系统中。

  1. 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);

 

  1. sdhci_thread_irq

mmc_detect_change

  _mmc_detect_change

            mmc_schedule_delayed_work(&host->detect, delay);

 

  1. 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控制器提供

  

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值