WINCE 下的FAL(flash abstraction layer)——转载
2008-11-19 17:00
141 查看
WINCE 下的FAL(flash abstraction layer)
今天同事翻出NAND flash 的驱动问我为啥不能编译出DLL,我一看OAK/BLOCK/MSFLASHFMD确实有问题,就顺便来研究下。
我们就以该目录下的FASL Code来做下分析。FASLD目录就是生成LIB,先看以下里面的SOURCE 文件:
TARGETNAME=fasld_lib
TARGETTYPE=LIBRARY
WINCEOEM=1
WINCETARGETFILE0=$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/fasld.def
INCLUDES=../;../../inc
CDEFINES=$(CDEFINES) -DREAD_FROM_REGISTRY
SOURCES=../fmd.cpp
对上面的编译定义就不在阐述。
在看下fasld.def文件中的导出函数列表:
LIBRARY FASLD
EXPORTS
DSK_Init
DSK_Deinit
DSK_Open
DSK_Close
DSK_Read
DSK_Write
DSK_Seek
DSK_IOControl
DSK_PowerDown
DSK_PowerUp
原来 FMD (The flash media driver ) 也是走的BLOCK驱动的接口,在看下FMD。CPP里面的接口函数
DSK_Init
FMD_Deinit
FMD _Open
FMD _Close
FMD _Read
FMD _Write
FMD _Seek
FMD _IOControl
FMD _PowerDown
FMD _PowerUp
DWORD cbSize;
PFN_INIT pInit;
PFN_DEINIT pDeInit;
PFN_GETINFO pGetInfo;
PFN_GETINFOEX pGetInfoEx;
PFN_GETBLOCKSTATUS pGetBlockStatus;
PFN_SETBLOCKSTATUS pSetBlockStatus;
PFN_READSECTOR pReadSector;
PFN_WRITESECTOR pWriteSector;
PFN_ERASEBLOCK pEraseBlock;
PFN_POWERUP pPowerUp;
PFN_GETPHYSSECTORADDR pGetPhysSectorAddr;
} FMDINTERFACE, *PFMDINTERFACE;
更重要的是获得了这样一条信息:
When building your driver, verify that your driver links to the Fal.lib link library.
原来FASLD 要和FAL.lib一起link才能生成我们想要的东西,哈哈,做到这一步基本有了点思路,原来FMD.CPP之所以定义了一堆FMD_XXXXXX是为了满足FMDINTERFACE 接口的回调。在这里可能有人要问我 FAL里面到低做了那些工作,对我也很想知道FAL里面到底做了那些工作,在GOOGLE里面Search了一把,有以下的信息:
由于WinCE对FAT文件系统读写实现了wear-leveling(磨损均衡)机制,fat table等常进行写入
的区域被WinCE的FAL层算法均衡的写在flash的不同区域,而不是同一位置反复刷写。而这种
wear-leveling算法微软并未公开,故很难将这种机制模拟的一模一样。
彻底绝望,看来MS真的让很多的程序员受伤啊,看到这里只能去FMD。CPP里面实现驱动接口了。至于最后要生成DLL,可能大家要修改下SOURCE文件,比如:
TARGETNAME=fasld
TARGETTYPE=DYNLINK
RELEASETYPE=PLATFORM
DLLENTRY=DllMain
WINCEOEM=1
INCLUDES=../;../../inc
TARGETLIBS=$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/FAL.LIB /
$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib /
$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/CEDDK.lib
CDEFINES=$(CDEFINES) -DREAD_FROM_REGISTRY
SOURCES=../fmd.cpp /
今天同事翻出NAND flash 的驱动问我为啥不能编译出DLL,我一看OAK/BLOCK/MSFLASHFMD确实有问题,就顺便来研究下。
我们就以该目录下的FASL Code来做下分析。FASLD目录就是生成LIB,先看以下里面的SOURCE 文件:
TARGETNAME=fasld_lib
TARGETTYPE=LIBRARY
WINCEOEM=1
WINCETARGETFILE0=$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/fasld.def
INCLUDES=../;../../inc
CDEFINES=$(CDEFINES) -DREAD_FROM_REGISTRY
SOURCES=../fmd.cpp
对上面的编译定义就不在阐述。
在看下fasld.def文件中的导出函数列表:
LIBRARY FASLD
EXPORTS
DSK_Init
DSK_Deinit
DSK_Open
DSK_Close
DSK_Read
DSK_Write
DSK_Seek
DSK_IOControl
DSK_PowerDown
DSK_PowerUp
原来 FMD (The flash media driver ) 也是走的BLOCK驱动的接口,在看下FMD。CPP里面的接口函数
DSK_Init
FMD_Deinit
FMD _Open
FMD _Close
FMD _Read
FMD _Write
FMD _Seek
FMD _IOControl
FMD _PowerDown
FMD _PowerUp
突然有点郁闷,别急我们看下MSDN,找到了
typedef struct _FMDINTERFACE {
DWORD cbSize;
PFN_INIT pInit;
PFN_DEINIT pDeInit;
PFN_GETINFO pGetInfo;
PFN_GETINFOEX pGetInfoEx;
PFN_GETBLOCKSTATUS pGetBlockStatus;
PFN_SETBLOCKSTATUS pSetBlockStatus;
PFN_READSECTOR pReadSector;
PFN_WRITESECTOR pWriteSector;
PFN_ERASEBLOCK pEraseBlock;
PFN_POWERUP pPowerUp;
PFN_GETPHYSSECTORADDR pGetPhysSectorAddr;
} FMDINTERFACE, *PFMDINTERFACE;
更重要的是获得了这样一条信息:
When building your driver, verify that your driver links to the Fal.lib link library.
原来FASLD 要和FAL.lib一起link才能生成我们想要的东西,哈哈,做到这一步基本有了点思路,原来FMD.CPP之所以定义了一堆FMD_XXXXXX是为了满足FMDINTERFACE 接口的回调。在这里可能有人要问我 FAL里面到低做了那些工作,对我也很想知道FAL里面到底做了那些工作,在GOOGLE里面Search了一把,有以下的信息:
由于WinCE对FAT文件系统读写实现了wear-leveling(磨损均衡)机制,fat table等常进行写入
的区域被WinCE的FAL层算法均衡的写在flash的不同区域,而不是同一位置反复刷写。而这种
wear-leveling算法微软并未公开,故很难将这种机制模拟的一模一样。
彻底绝望,看来MS真的让很多的程序员受伤啊,看到这里只能去FMD。CPP里面实现驱动接口了。至于最后要生成DLL,可能大家要修改下SOURCE文件,比如:
TARGETNAME=fasld
TARGETTYPE=DYNLINK
RELEASETYPE=PLATFORM
DLLENTRY=DllMain
WINCEOEM=1
INCLUDES=../;../../inc
TARGETLIBS=$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/FAL.LIB /
$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib /
$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/CEDDK.lib
CDEFINES=$(CDEFINES) -DREAD_FROM_REGISTRY
SOURCES=../fmd.cpp /
相关文章推荐
- WINCE 下的FAL(flash abstraction layer)
- WINCE 下的FAL(flash abstraction layer)
- WINCE 下的FAL(flash abstraction layer)
- WINCE 下的FAL(flash abstraction layer)
- WINCE 下的FAL(flash abstraction layer)
- WINCE 下的FAL(flash abstraction layer)
- WINCE 下的FAL(flash abstraction layer)(转贴)
- WINCE 下的FAL(flash abstraction layer)
- WinCE 应用程序开机自动运行的又一种方法(flash,U盘,SD卡都行)——转载
- [转载]javascript练习(一)JS仿Flash图片切换效果
- FTL (Flash translation layer) 闪存转换层
- WinCE NAND flash - FAL
- FTL (Flash translation layer) 闪存转换层
- H264参数结构二:网络提取层NAL (Net Abstraction Layer) & 视频编码层VCL (Video Coding Layer) .
- [转载]解决Linux下flash乱码问题
- 如何在raspberry pi2上使用flash【转载】
- 【转载】战速决Flash ActionScript 3.0 - 以文本形式、XML形式和JSON形式与ASP.NET通信续
- 每天学一点flash(6) FLASH 8 和 FLASH CS3 加载外部文本的区别 (转载)
- WinCE显示ResidentFlash盘符(文件夹)
- 手把手搭建WINCE平台与制作内核镜像(转载)