mmc driver驱动流程

目录

1.mmc驱动结构体定义

2.mmc总线结构体定义

3.代码流程


1.mmc驱动结构体定义

static struct mmc_driver mmc_driver = {
	.drv		= {
		.name	= "mmcblk",
		.pm	= &mmc_blk_pm_ops,
	},
	.probe		= mmc_blk_probe,
	.remove		= mmc_blk_remove,
	.shutdown	= mmc_blk_shutdown,
};

见下mmc_blk_probe的执行流程。

2.mmc总线结构体定义

static struct bus_type mmc_bus_type = {
	.name		= "mmc",
	.dev_groups	= mmc_dev_groups,
	.match		= mmc_bus_match,
	.uevent		= mmc_bus_uevent,
	.probe		= mmc_bus_probe,
	.remove		= mmc_bus_remove,
	.shutdown	= mmc_bus_shutdown,
	.pm		= &mmc_bus_pm_ops,
};

在mmc总线上进行驱动和设备的匹配,匹配成功调用mmc_bus_probe。

3.代码流程

module_init(mmc_blk_init)
    mmc_blk_init //drivers\mmc\core\block.c
    mmc_register_driver(&mmc_driver) //mmc驱动名称为mmcblk
        drv->drv.bus = &mmc_bus_type //绑定到mmc总线
        driver_register(&drv->drv) //驱动注册
        
        //上面的驱动mmcblk与设备在总线mmc上匹配,将执行下面的函数

        mmc_blk_probe
            mmc_blk_alloc
                mmc_blk_alloc_req
                    mmc_init_queue //drivers\mmc\core\queue.c
                    mq->queue = blk_mq_init_queue(&mq->tag_set);
                    blk_mq_init_queue
                        blk_mq_init_queue_data
                            blk_mq_init_allocated_queue
                                blk_mq_realloc_hw_ctxs
                                    blk_mq_alloc_and_init_hctx
                                        ->blk_mq_alloc_hctx
                                            ->blk_mq_run_work_fn
                                                ->__blk_mq_run_hw_queue
                                                    ->blk_mq_sched_dispatch_requests
                                                        ->blk_mq_run_hw_queue

            mmc_blk_alloc_parts
                mmc_blk_alloc_req/mmc_blk_alloc_rpmb_part
                    mmc_init_queue //drivers\mmc\core\queue.c
                        mq->queue = blk_mq_init_queue(&mq->tag_set);
                            blk_mq_init_queue
                                blk_mq_init_queue_data
                                    blk_mq_init_allocated_queue
                                        blk_mq_realloc_hw_ctxs
                                            blk_mq_alloc_and_init_hctx
                                                ->blk_mq_alloc_hctx
                                                    ->blk_mq_run_work_fn
                                                        ->__blk_mq_run_hw_queue
                                                        ->blk_mq_sched_dispatch_requests
                                                            ->blk_mq_run_hw_queue
INIT_DELAYED_WORK(&hctx->run_work, blk_mq_run_work_fn);

INIT_DELAYED_WORK(&hctx->run_work, blk_mq_run_work_fn);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值