- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
?以前也曾经写过类似的文章,但是每次调试到sd的时候都会有些许收获,在此就来个全乎的吧,哈哈!
一,? MS SD驱动架构
在代码分析之前很有必要先看一张图,这样至少可以大致了解模块的作用,也可以知道该模块内的源文件甚至函数是为谁服务的。
?
?
这张图,初次见到的时候没有怎么在意。不过通过阅读源代码的时候,才发现这张图真真切切的反映了真个代码的调用流程。很清晰而又简明直接的一张图。
从图上,我们可以看出从APP到硬件的执行有3层,首先hardware部分我们可以先不用理会,而clients的上半部分也可以先不用理会,因为那是MS在系统中已经做好了。好了,剩下的也就是图中的深红色的部分。
通常,对于软件驱动工程师来说,这剩下的部分可以分为3个层次:SDclient,SDbus,SDhc。MS对Wince下的sd驱动也是这么划分并分目录存放的。源代码在\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\SDCARD目录下。牛也吹了,下面的部分我们就分别来介绍这3层,主要以详细的函数调用流程为主,请在阅读本文的时候对照源代码一起分析。
一,? SD主机控制器驱动(SDHC)
???? 首先在开始之前有必要说一下,这里之所以要先介绍SDHC驱动这部分,主要是因为,该层是直接与硬件SDHC打交道的,并且与上一层的SDBUS驱动交互。这里必然提供了很多接口来支持SDBUS的服务(当然SDBUS也提供了很多的接口来支持SDHC),从功能的实现方面讲,上层的功能函数调用最终是要调用到最底层驱动的函数,以实现与硬件的交互。
?
???? 地球人都知道,这些驱动最终展示给系统的真面目是DLL文件。那我们要分析它们的源代码也最好从它的入口函数DllEntry或者说从包含该函数的文件开始。为了具体一些,这里以s3c2440的sdhc为例分析。Come on!
[sdhc\sdhcbase\sdhcmain.cpp]
BOOL DllEntry(HINSTANCE hInstance, ULONG Reason, LPVOID pReserved)
{
BOOL fRet = TRUE;
if(Reason == DLL_PROCESS_ATTACH)
{
DEBUGREGISTER(hInstance);
DisableThreadLibraryCalls( (HMODULE) hInstance );
if( !SDInitializeCardLib() )
{
fRet = FALSE;
}
else if( !SD_API_SUCCESS( SDHCDInitializeHCLib() ) )
{
SDDeinitializeCardLib();
fRet = FALSE;
}
g_fRegisteredWithBusDriver = FALSE;
}
if(Reason == DLL_PROCESS_DETACH)
{
SDHCDDeinitializeHCLib();
SDDeinitializeCardLib();
}
return(TRUE);
}
虽然DllEntry函数都是千片一律的,但是这里还是给了我们两个突破口,如上蓝色部分。SDInitializeCardLib这个函数没有什么特别之处,总是能返回true。不过从这里我们知道了有SDCARD_API_FUNCTIONS g_SDClientApiFunctions这么个全局的结构体变量,从字面上可以大致猜测其目的,留待分析。SDHCDInitializeHCLib这个函数缺是个重量级的初始化函数。
[public\common\oak\drivers\sdcard\sdhclib\sdhclib.cpp]
static SDHOST_API_FUNCTIONS g_SDHostFuncs;
// SDHCDInitializeHCLib - Initialize the host controller library
//
// Return: SD_API_STATUS
// Notes: Call from DLL entry
//
SD_API_STATUS SDHCDInitializeHCLib()
{
#ifdef DEBUG
memset(g_SDHostFuncs, 0xCC, sizeof(g_SDHostFuncs));
#
您可能关注的文档
- 第六章 VVX1500配置手册.ppt
- 第六章 VX610WH_FAQ.pdf
- 第2篇 供求理论.ppt
- 第六章 VxWorks 5.5 学习笔记.doc
- 第六章 vxworks dosfs.doc
- 第2篇 平面机构的机构分析.ppt
- 第2篇 嵌入式交叉编译环境.ppt
- 第六章 VxWorks 网络编程教程.pdf
- 第六章 V刹 碟式 鼓刹.doc
- 第2篇 数据通信基础(4学时).ppt
- 中国国家标准 GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- 《GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计》.pdf
- 中国国家标准 GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- 《GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置》.pdf
- 中国国家标准 GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- GB/T 17889.4-2024梯子 第4部分:铰链梯.pdf
- 《GB/T 17889.4-2024梯子 第4部分:铰链梯》.pdf
最近下载
- 企业存货管理问题研究——以森马服饰为例.doc
- 2012年数学建模竞赛答案之一 葡萄酒.pdf VIP
- 手机游戏的营销策略分析以《明日方舟》为例.docx VIP
- 急诊POCT专项测试卷附答案.doc
- 2023年全国数学建模竞赛D题的答案.doc VIP
- 100m3每天医疗污水处理方案.docx VIP
- PreSonus 普瑞声纳 Temblor T10EN,CN T10 OwnersManual 04272021说明书用户手册.pdf
- 2021年全国数学建模竞赛D题的答案.pdf VIP
- PreSonus 普瑞声纳 Eris E44EN,CN Eris E44 and E66 OwnersManual EN V3 01112021.说明书用户手册.pdf
- 2003全国大学生数学建模竞赛b题参考答案.docx
文档评论(0)