4.1.MMC子系統(tǒng)的基本框架 4.1.1.MMC子系統(tǒng)的代碼在kernel/driver/MMC下面,目前MMC子系統(tǒng)支持一些形式的記憶卡:SD,SDIO,MMC。 4.1.2.HOST:針對(duì)不同主機(jī)的驅(qū)動(dòng)程序,這一部分需要根據(jù)自己的特定平臺(tái)來(lái)完成。 4.1.3.CORE:這是整個(gè)MMC的核心層,這部分完成了不同協(xié)議和規(guī)范的實(shí)現(xiàn),并且為HOST層的驅(qū)動(dòng)提供接口函數(shù)。 4.1.4.CARD:因?yàn)檫@些記憶卡都是塊設(shè)備,當(dāng)然需要提供塊設(shè)備的驅(qū)動(dòng)程序,這部分就是實(shí)現(xiàn)了將SD卡如何實(shí)現(xiàn)為塊設(shè)備的。
4.1.5.各層之間的關(guān)系
Linux中SD、MMC設(shè)備驅(qū)動(dòng)流程1.png (16.89 KB, 下載次數(shù): 59)
下載附件
保存到相冊(cè)
2018-7-18 09:32 上傳
4.2.重要的結(jié)構(gòu)體 4.2.1. struct mmc_host 用來(lái)描述卡控制器位kernel/include/linux/mmc/host.h下面。 4.2.2.struct mmc_card 用來(lái)描述卡位于kernel/include/linux/mmc/card.h下面 4.2.3.struct mmc_driver 用來(lái)描述mmc卡驅(qū)動(dòng)在kernel/include/linux/mmc/card.h下面。 4.2.4.struct mmc_host_ops用來(lái)描述卡控制器操作集,用于從主機(jī)控制器向core層注冊(cè)操作函數(shù),從而將core層與具體的主機(jī)控制器隔離。也就是說(shuō)core要操作主機(jī)控制器,就是這個(gè)ops當(dāng)中給的函數(shù)指針操作,不能直接調(diào)用具體主控制器的函數(shù)。
位于kernel/include/linux/mmc/host.h下面。 2.5.struct mmc_ios用于描述了控制器對(duì)卡的I/O狀態(tài)。位于kernel/include/linux/mmc/host.h下面。 4.2.6.struct mmc_request用于描述讀寫(xiě)MMC卡的請(qǐng)求,它包括命令,數(shù)據(jù)以及請(qǐng)求完成后的回調(diào)函數(shù)。位于kernel/include/linux/mmc/core.h中。 4.2.7.struct mmc_queue是MMC的請(qǐng)求隊(duì)列結(jié)構(gòu),它封裝了通用請(qǐng)求隊(duì)列結(jié)構(gòu),加入了MMC卡相關(guān)結(jié)構(gòu)。位于kernel/drivers/mmc/card/queue.h中。 4.2.8.struct mmc_data描述了MMC卡讀寫(xiě)的數(shù)據(jù)相關(guān)信息,如:請(qǐng)求,操作命令,數(shù)據(jù)以及狀態(tài)等。位于kernel/include/linux/mmc/core.h中。 4.2.9.struct mmc_command描述了MMC卡操作相關(guān)命令及數(shù)據(jù),狀態(tài)信息等。位于kernel/include/linux/mmc/core.h中。 4.3.host,core以及card之間的關(guān)聯(lián)和處理流程 4.3.1總體的流程如下圖所示
Linux中SD、MMC設(shè)備驅(qū)動(dòng)流程2.png (36.63 KB, 下載次數(shù): 64)
下載附件
保存到相冊(cè)
2018-7-18 09:33 上傳
4.3.2.數(shù)據(jù).命令的處理流程在代碼分析那里會(huì)仔細(xì)分析 4.4:核心任務(wù)
MMC/SD卡的驅(qū)動(dòng)整個(gè)構(gòu)架由三個(gè)文件組成,其實(shí)一共就做了兩件事件:
1).卡的檢測(cè)。
2).卡數(shù)據(jù)的讀取。 4.4.1.卡的檢測(cè)中涉及到的函數(shù)
tcc_mmc_probe(host/tcc_sdhc.c)
mmc_alloc_host(core/core.c)
mmc_rescan(core/core.c)
mmc_attach_mmc(core/mmc.c)
mmc_init_card(core/mmc.c)
mmc_add_card(core/bus.c)
device_add
mmc_bus_match(core/bus.c)
mmc_bus_probe(core/bus.c) mmc_blk_probe(card/block.c)
alloc_disk/add_disk 4.4.2.卡中數(shù)據(jù)讀寫(xiě)涉及到的函數(shù)
mmc_blk_issue_rq(card/block.c)
mmc_wait_for_req(core/core.c)
mmc_start_request(core/core.c)
host->ops->requset(host,mrq)
//tcc_sdhc.c中的tcc_mmc_request 深圳雷龍發(fā)展有限公司從事NANDFLASH行業(yè)10+年.目前代理ATO Solution小容量SLC NAND,SPI NAND,MCP等。想了解更多請(qǐng)咨詢扣二八伍二扒二陸扒六八;電話一三陸玖一玖八二一零柒
|