初始化时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;初始化d
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); //...
return NULL; } // 初始化自旋锁 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)...
应用层一般都是操作基于sd卡块设备上的文件系统,所以会先经过vfs—>具体的文件系统的read、write-->块子系统submit_bio-->块请求队列处理函数即在card目录里面 mmc_blk_probe-->mmc_blk_allocàmmc_init_queueàmmc_request函数,该函数会唤醒队列处理线程mmcqd,mmcqd结合mmc_blk_issue_rq将上层的struct request_que...
卡设备加到系统中后,通知mmc块设备驱动。块设备驱动此时调用probe函数,即mmc_blk_probe()函数,mmc_blk_probe()首先分配一个新的mmc_blk_data结构变量,然后调用mmc_init_queue,初始化blk队列,然后建立一个线程mmc_queue_thread()然后就可以进行传输命令和数据了。
(wait,current);unsigned long flags;int stop;might_sleep();// 说明这个函数可能导致进程休眠add_wait_queue(&host->wq,&wait);// 把当前进程加入到等待队列中spin_lock_irqsave(&host->lock,flags);while(1){// 以下尝试获取host,如果host正在被占用,会进入休眠set_current_state(TASK_UNINTERRUPTIBLE);/...
我在beaglebone黑色上运行linux。我的系统直接从sdcard上运行。要更改IO调度程序,我需要配置/sys/block/ xxx /queue/调度程序,其中xxx是挂载驱动器。但是,在/sys/块文件夹中只有mmc和ram的条目。如何更改安装在sdcard上的系统的IO调度程序? 浏览0提问于2015-02-18得票数2 ...
drivers/mmc/card/queue.c drivers/mmc/core/core.c drivers/mmc/core/host.c drivers/mmc/core/ 内核启动时,首先执行core/core.c的mmc_init,注册mmc、sd总线,以及一个host class设备。接着执行card/block.c中,申请一个块设备。 数据结构: mmc总线操作相关函数,由于mmc卡支持多种总数据线,如SPI、SDIO、8Lin...
388 - * @lock: queue lock 389 388 * 390 389 * Initialise a MMC card request queue.391 390 */ 392 - int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card, 393 - spinlock_t *lock) 391 + int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card) ...
目录 收起 1 块设备驱动流程主要步骤 2和MMC子系统的关系 1 块设备驱动流程主要步骤 这里写下大概步骤 //注册块设备 register_blkdev() ... //分配并初始化请求队列 xxx.queue = blk_init_queue(a(xx),xx) ... //分配及注册gendisk结构体 xxx.gendisk->major = xxx.major; // 主设备号 xxx....