注冊登錄后可以在線提問,行業(yè)從業(yè)者將幫助您解答!
您需要 登錄 才可以下載或查看,沒有賬號?請用中文注冊用戶!
×
Linux中SD、MMC設備驅(qū)動流程 4.1.MMC子系統(tǒng)的基本框架 4.1.1.MMC子系統(tǒng)的代碼在kernel/driver/MMC下面,目前MMC子系統(tǒng)支持一些形式的記憶卡:SD,SDIO,MMC。 4.1.2.HOST:針對不同主機的驅(qū)動程序,這一部分需要根據(jù)自己的特定平臺來完成。 4.1.3.CORE:這是整個MMC的核心層,這部分完成了不同協(xié)議和規(guī)范的實現(xiàn),并且為HOST層的驅(qū)動提供接口函數(shù)。 4.1.4.CARD:因為這些記憶卡都是塊設備,當然需要提供塊設備的驅(qū)動程序,這部分就是實現(xiàn)了將SD卡如何實現(xiàn)為塊設備的。
4.1.5.各層之間的關(guān)系
Linux中SD、MMC設備驅(qū)動流程1.png (16.89 KB, 下載次數(shù): 40)
下載附件
保存到相冊
2018-7-19 14:27 上傳
4.2.重要的結(jié)構(gòu)體 4.2.1. struct mmc_host 用來描述卡控制器位kernel/include/linux/mmc/host.h下面。 4.2.2.struct mmc_card 用來描述卡位于kernel/include/linux/mmc/card.h下面 4.2.3.struct mmc_driver 用來描述mmc卡驅(qū)動在kernel/include/linux/mmc/card.h下面。 4.2.4.struct mmc_host_ops用來描述卡控制器操作集,用于從主機控制器向core層注冊操作函數(shù),從而將core層與具體的主機控制器隔離。也就是說core要操作主機控制器,就是這個ops當中給的函數(shù)指針操作,不能直接調(diào)用具體主控制器的函數(shù)。
位于kernel/include/linux/mmc/host.h下面。 2.5.struct mmc_ios用于描述了控制器對卡的I/O狀態(tài)。位于kernel/include/linux/mmc/host.h下面。 4.2.6.struct mmc_request用于描述讀寫MMC卡的請求,它包括命令,數(shù)據(jù)以及請求完成后的回調(diào)函數(shù)。位于kernel/include/linux/mmc/core.h中。 4.2.7.struct mmc_queue是MMC的請求隊列結(jié)構(gòu),它封裝了通用請求隊列結(jié)構(gòu),加入了MMC卡相關(guān)結(jié)構(gòu)。位于kernel/drivers/mmc/card/queue.h中。 4.2.8.struct mmc_data描述了MMC卡讀寫的數(shù)據(jù)相關(guān)信息,如:請求,操作命令,數(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設備驅(qū)動流程2.png (36.63 KB, 下載次數(shù): 37)
下載附件
保存到相冊
2018-7-19 14:27 上傳
4.3.2.數(shù)據(jù).命令的處理流程在代碼分析那里會仔細分析 4.4:核心任務
MMC/SD卡的驅(qū)動整個構(gòu)架由三個文件組成,其實一共就做了兩件事件:
1).卡的檢測。
2).卡數(shù)據(jù)的讀取。 4.4.1.卡的檢測中涉及到的函數(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ù)讀寫涉及到的函數(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等。想了解更多請咨詢扣二八伍二扒二陸扒六八;電話一三陸玖一玖八二一零柒
|