分享

我的第一个WinCE驱动--流式驱动【转】

 lhzstudio 2012-05-09

转做WinCE驱动已经有两个月了,却没有做过一个真正的WinCE平台下的驱动,心里都有些急了,很想尝试下,好尽快融入WinCE驱动开发这个团队。

头儿也很理解,给了俺个简单的,可以说是非常简单的任务,好让俺找找入门的感觉,就是做一个FM的驱动。

由于WinCE下的驱动大多是基于流接口的,所以偶也采用了流接口,做比较起来简单,呵呵

说白了,流接口就是实现以下几个接口:

BOOL WINAPI DllMain(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved);

DWORD XXX_Init(LPCTSTR pContext, LPCVOID lpvBusContext);

BOOL XXX_Deinit(DWORD hDeviceContext);

DWORD XXX_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode);

BOOL XXX_Close(DWORD hOpenContext);

BOOL XXX_PowerUp(DWORD hDeviceContext); BOOL XXX_PowerDown(DWORD hDeviceContext);

BOOL XXX_PowerDown(DWORD hDeviceContext);

DWORD XXX_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count);

DWORD XXX_Write(DWORD hOpenContext, LPCVOID pBuffer, DWORD Count);

DWORD XXX_Seek(DWORD hOpenContext, long Amount, WORD Type);

BOOL XXX_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn,
              PBYTE pBufOut, DWORD dwLenOut,
              PDWORD pdwActualOut);

XXX是任意的大写字符串(只能是三个字符,偶刚开始用的FM,后面回出问题),且保证与注册表Prefix项后的一样哦

把以上接口给实现了,接下来就是弄注册表咯

在注册表中添加如下项目。(一般放在Platform.reg)
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\DevName]
"Prefix"="XXX"
"Dll"="MyDev.Dll"
"Order"=dword:1


然后在BIB文件中添加项目,将所用到的文件加入BIN文件(一般放在Platform.bib)。
    MyDev.dll     $(_FLATRELEASEDIR)\MyDev.dll     NK SH

注:
DevName为任意与其它项目不重名的字符串.

在platform/你的平台(如:smdk2410)/drivers 下新建一个目录(偶的是FM),然后在drivers目录中的dirs文件中加入以你刚新建的目录名。
    在刚新建的目录下,新建你的C源代码文件,在其中实现上面所述的函数,及其功能。新建名称分别为sources, makefile, mydev.def的文件。
其内容如下:
    makefile: 只需要这样一行
!INCLUDE $(_MAKEENVROOT)\makefile.def

mydriver.def文件定义需要输出的函数,这些函数能够被其它代码用动态加载的方法调用。格式:

LIBRARY     MyDev(这个字符串要和将要生成的动态库的文件名一样)

EXPORTS
    XXX_Init
    XXX_Deinit
    XXX_Open
    XXX_Close
    XXX_PowerOff
    XXX_PowerDown
    XXX_Read
    XXX_Write
    XXX_Seek
    XXX_IOControl

Sources:这个文件很重要,内容也多,最基本的一个文件该有如下内容。

TARGETNAME=MyDev(指定要生成的动态库的名称)
TARGETTYPE=DYNLINK(指定要生成的是一个动态库)

(下面两项指定需要与哪些动态库链接,一般要第一项就足够了)
TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
              $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib

DEFFILE=MyDev.def (指定def文件)

DLLENTRY=DllEntry(指定动态库的入口函数)

SOURCES=(请在这写上你所有源文件的名字,它们将会被编译)

一个流驱动就大功告成咯~~~~~~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多