最近在研究PXA300 SD卡的驱动程序,搞清楚了SD卡的初始化流程,记录如下
1. 在pxamci_probe()函数调用mmc_alloc_host()分配mmc_host结构,初始化了mmc_rescan延时任务
2. 接着进行了mmc_host结构的一系列的初始化,MMC硬件控制器寄存器相关的初始化,中断的注册,DMA的初始化等
3. 在pxamci_probe()最后调用了mmc_add_host()进行了mmc_host设备驱动模型相关的设置,执行mmc_host_start()
启动了mmc_rescan延时任务。
4. 紧接着执行mmc_rescan()函数,发送相关的命令,依次扫描接到MMC控制器上的SDIO,SD,MMC设备
5. 扫描到SD卡后,会从相关命令的响应中获取SD卡的相关信息,接着初始化SD卡,并分配mmc_card结构描述该卡的相关特性,
并将mmc_card注册到“mmc"总线的设备层。
6 在讲mmc_card注册到“mmc"总线的设备层的过程中,根据设备驱动模型找到"mmc"总线上名为“mmcblk"的mmc_driver,
调用mmc_drivcer中的mmc_blk_probe()函数
7. 在mmc_blk_probe()函数中会为SD卡分配mmc块设备相关的数据结构,为SD卡分配设备节点和设备号,最后将SD卡添加到
块设备层即完成了SD卡所有的初始化。