- 1
- 0
- 约1.31万字
- 约 20页
- 2016-09-23 发布于重庆
- 举报
WINCE5SD驱动彻底解析
?以前也曾经写过类似的文章,但是每次调试到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));
#
您可能关注的文档
最近下载
- 【MOOC】中国传统艺术——篆刻、书法、水墨画体验与欣赏-哈尔滨工业大学 中国大学慕课MOOC答案.docx VIP
- 中国社会史18.ppt
- 2025年生活会“四个带头”个人对照检查检视材料(含典型案例剖析、违纪行为典型案例解析】2篇文.docx VIP
- 一种夹持式轮毂连续翻转机构.pdf VIP
- 准噶尔盆地东南部石炭系来源原油的发现与勘探意义.docx VIP
- 中学地理教学设计课件.ppt VIP
- 交互系统与设计目标.pptx VIP
- 地理新课标教学设计.pptx VIP
- 退役军人适应性培训课件.pptx VIP
- 2021-2025五年高考数学真题分类汇编 专题19 排列组合与二项式定理5种常见考法归类(全国通用)(解析版).pdf VIP
原创力文档

文档评论(0)