初始化时mmc_blk_init中会执行mmc_register_driver,而前文所述执行mmc_attach_mmc时会通过mmc_add_card将mmc_card注册到mmc bus,这样就触发了执行前文所述的mmc_blk_probe函数,后面有详细解释mmc_blk_probe的执行过程 mmc_blk_probe最主要的是初始化了request queue;初始化disk,同时通过mmc_add_disk将磁盘添加...
driver_register(&drv->drv) module_init(mmc_blk_init); 读写流程 mmc_queue_thread是在mmc_init_queue中起的线程,主要作用是完成上层发送的请求进行处理。 mmc_queue_thread //mmc/card/queue.c struct mmc_queue *mq = d; struct request_queue *q = mq->queue; req = blk_fetch_request(q); //...
mmc_init:注册mmc、sdio总线,以及mmc_host class。 mmc_pwrseq_simple_driver_init:Simple PowerSequence模块初始化,包含pre_power_on/post_power_on/power_off接口。 mmc_pwrseq_emmc_driver_init:MMC的PowerSequence模块初始化,仅包含reset。 mmc_blk_init:注册rpmb_bus,rpmb字符设备;祖册MMC块设备号,注册mmc_dr...
atomic_t*abort){///只考虑abort为NULL的情况,在mmc core中的mmc_claim_host也是将其设置为NULLDECLARE_WAITQUEUE(wait,current);unsigned long flags;int stop;might_sleep();// 说明这个函数可能导致进程休眠add_wait_queue(
随后在__blk_run_queue_uncond中调用q->request_fn(q),request_fn在blk_init_queue函数中初始化,指向mmc_request_fn函数。而mmc_request_fn通过wake_up_process唤醒了mmc_queue_thread,该函数在mmc_init_queue函数中完成初始化赋值,随后执行mmc_queue_thread,该函数在queue.c(drivers/mmc/card),代表着从此进入...
卡设备加到系统中后,通知mmc块设备驱动。块设备驱动此时调用probe函数,即mmc_blk_probe()函数,mmc_blk_probe()首先分配一个新的mmc_blk_data结构变量,然后调用mmc_init_queue,初始化blk队列,然后建立一个线程mmc_queue_thread()然后就可以进行传输命令和数据了。
随后在__blk_run_queue_uncond中调用q->request_fn(q),request_fn在blk_init_queue函数中初始化,指向mmc_request_fn函数。而mmc_request_fn通过wake_up_process唤醒了mmc_queue_thread,该函数在mmc_init_queue函数中完成初始化赋值,随后执行mmc_queue_thread,该函数在queue.c(drivers/mmc/card),代表着从此进入...
// 初始化自旋锁spin_lock_init(&host->lock);// 初始化等待队列头init_waitqueue_head(&host->wq);// 初始化延迟的工作队列`host->detect`和`host->sdio_irq_work`INIT_DELAYED_WORK(&host->detect,mmc_rescan);INIT_DELAYED_WORK(&host->sdio_irq_work,sdio_irq_work);timer_setup(&host->retune_...
ret = mmc_init_queue(&md->queue, card, &md->lock); ret = mmc_init_queue(&md->queue, card); if (ret) goto err_putdisk;31 changes: 15 additions & 16 deletions 31 drivers/mmc/core/queue.c Original file line numberDiff line numberDiff line change...
device_initialize(&host->class_dev);mmc_host_clk_init(host);spin_lock_init(&host->lock);init_waitqueue_head(&host->wq);INIT_DELAYED_WORK(&host->detect,mmc_rescan);INIT_DELAYED_WORK_DEFERRABLE(&host->disable,mmc_host_deeper_disable);#ifdefCONFIG_PMhost->pm_notify.notifier_call=mmc_pm_...