蜗牛

一起交流,共同进步
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Linux 2.6.28内核SD卡初始化流程

Posted on 2011-01-06 12:38  路漫漫...  阅读(1723)  评论(0编辑  收藏  举报

 

最近在研究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卡所有的初始化。