没有合适的资源?快使用搜索试试~ 我知道了~
WINCE5 SD驱动彻底解析.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 23 浏览量
2022-10-27
04:37:12
上传
评论
收藏 444KB DOCX 举报
温馨提示
试读
20页
。。。
资源推荐
资源详情
资源评论
以前也曾经写过类似的文章,但是每次调试到 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);
}
剩余19页未读,继续阅读
资源评论
G11176593
- 粉丝: 6668
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功