mmc_blk_probe //card/block.c struct mmc_blk_data *md, *part_md; char cap_str[10]; md = mmc_blk_alloc(card); //card/block.c mmc_blk_alloc_req(card, &card->dev, size, false, NULL, MMC_BLK_DATA_AREA_MAIN); //card/block.c //传进来第1个参数名为card struct mmc_blk_data ...
通过上面的”driver创建描述“,在__driver_attach 的时候会判断driver_allows_async_probing,该函数是判断probe_type的类型,目前mmc的配置是PROBE_PREFER_ASYNCHRONOUS,所以支持异步调用。如果屏蔽掉的话可以解决。 五、mmcblkx的生成原理 在mmc驱动的probe函数中会调用: host = sdhci_pltfm_init(pdev, data, sizeof...
前面已经看到了,在总线的 probe 里面调用了 drv->probe, 而这个函数就对应的是 mmc_blk_probe ,具体这个 mmc_driver 是怎么挂到 mmc_bus 上的,自己去看 mmc_blk_init() ,就几行代码,应该不难。 staticintmmc_blk_probe(structmmc_card *card)// 来自 card/block.c{structmmc_blk_data *md;interr; ...
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_r...
mmc_blk_put(md);returnerr; } 开发者ID:maliyu,项目名称:SOM2416,代码行数:33,代码来源:mmc_block.c 示例3: mmc_blk_probe ▲点赞 3▼ staticintmmc_blk_probe(struct mmc_card *card){structmmc_blk_data*md;interr;if(card->csd.cmdclass & ~0x1ff)return-ENODEV;if(card->csd.read_blkbits ...
调用入口位于core/block.c,通过mmc_blk_init() 实现,先给出mmc设备结构体的定义:。 static struct mmc_driver mmc_driver = { .drv = {device_register .name = "mmcblk", .pm = &mmc_blk_pm_ops, }, .probe = mmc_blk_probe, // probe回调函数 ...
** MMC驱动包括2个核心函数,即atmel_sdhci_bind和atmel_sdhci_probe函数** 。 atmel_sdhci_bind函数用于驱动的绑定。调用了sdhci_bind函数,位于./drivers/mmc/sdhci.c;而MMC作为一种块设备,sdhci_bind函数进一步调用了mmc_bind函数,位于./drivers/mmc/mmc-uclass.c。
static int mmc_blk_probe(struct mmc_card *card) // 来自 card/block.c { struct mmc_blk_data *md; int err; …… md = mmc_blk_alloc(card); if (IS_ERR(md)) return PTR_ERR(md); …… add_disk(md->disk); return 0; out: ...
前面已经看到了,在总线的 probe 里面调用了 drv->probe, 而这个函数就对应的是 mmc_blk_probe ,具体这个mmc_driver 是怎么挂到 mmc_bus 上的,自己去看 mmc_blk_init() ,就几行代码,应该不难。static int mmc_blk_probe(struct mmc_card *card) // 来自 card/block.c...
***probe方法***/staticintmmc_bus_probe(struct device*dev){struct mmc_driver*drv=to_mmc_driver(dev->driver);struct mmc_card*card=mmc_dev_to_card(dev);returndrv->probe(card);// 直接调用mmc_driver中的probe操作,对于block.c来说就是mmc_blk_probe} 补充说明,通过上述mmc_bus的match方法实现,...