嵌入式爱好者

查看: 10809|回复: 0

[Win CE] WINCE6添加和删除流驱动

  [复制链接]

6

主题

28

帖子

45

积分

扫一扫,手机访问本帖
发表于 2016-8-22 17:06:08 | 显示全部楼层 |阅读模式
WINCE6关于流驱动的增加和删除的说明增加流驱动增加驱动文件
打开操作系统工程,选择                              (中文)或者 (英文)。在此窗口中依次展开AM335_SK_OS->C:\WINCE600->PLATFORM->AM33x_SK_BSP->SRC然后在SRC下的DRIVERS文件夹上点击右键,选择ADD->New Sources Subproject
这里将弹出如图对话框
其对应的项目类型分别为
         WCEApplication                                 WINCE应用程序
         WCEConsole Application                  WINCE控制台应用程序
         WCE Dynamic-Link Library                WINCE的动态链接库
         WCE Static Library                               WINCE的静态链接库
         WCE TUX Dynamic-Link Library        WINCE基于TUX的动态链接库
在这里我选择的是动态链接库。
         在项目名称中输入LED (也可以使用您自己的名字设定,但是尽量使用三个字母并且避开诸如USBDRV这种可能被系统占用的名称) ,然后将弹出一个对话框,这里我们选择第二项,一个示例工程,这样系统将自动为我们创建文件。
   
下一步,选择加入当前文件夹 。点击完成。
加入完成后在DRIVERS下有一个LED工程文件夹 。
         在本节中,我们将在已经创建的文件基础上建立一个用于控制LED的驱动,在335x系列开发板中,LED属于GPIO操作,因此LED本来不需要驱动,直接使用GPIO驱动即可,这里为了演示流驱动的建立方法,加入了LED的操作。您可以根据自己的需要建立驱动。
4.2.1.添加输出接口
         在工程资源管理器中双击LED.def文件 。该文件默认为空文件,在里面加入如下代码:
LIBRARY LED_DRV
EXPORTS
   LED_Init
   LED_Deinit
   LED_Open
LED_Close
LED_Read
        LED_Write
LED_IOControl
其中LED_DRV可以自定义,但是EXPORTS后面的代码也就是用于输出函数的接口则必须使用这种写法。
而这里我用于验证流驱动,因此这里的函数只是一部分,您可以根据您的需求加减函数。
4.2.2.添加函数
         双击LED.cpp修改LED的驱动。注意这里的函数和输出接口函数是一致的。
4.2.2.1.构造函数
DWORD LED_Init(LPCTSTR pContext, LPCVOIDlpvBusContext) {
         RETAILMSG(TRUE,(TEXT("[LED]: INIT")));
         return1;
}
4.2.2.2.析构函数
BOOL LED_Deinit(DWORD hDeviceContext) {
         returnTRUE;
}
4.2.2.3.驱动打开函数
DWORD LED_Open(DWORD hDeviceContext, DWORDAccessCode, DWORD ShareMode) {
         return1;
}
4.2.2.4.驱动关闭函数
BOOL LED_Close(DWORD hOpenContext) {
         returnTRUE;
}
4.2.2.5.读函数
DWORD LED_Read(DWORD hOpenContext, LPVOIDpBuffer, DWORD Count) {
         return1;
}
4.2.2.6.写函数
DWORD LED_Write(DWORD hOpenContext, LPCVOIDpBuffer, DWORD Count) {
         return1;
}
4.2.2.1IO操作函数
BOOL LED_IOControl(DWORD Handle,
                                                                                     DWORD dwIoControlCode,
                                                                                     PDWORD pInBuf,
                                                                                     DWORD nInBufSize,
                                                                                     PDWORD pOutBuf,
                                                                                     DWORD nOutBufSize,
                                                                                     PDWORD pBytesReturned) {  
switch (dwIoControlCode) {
         default:
                   break;
         }
return TRUE;   
}  
修改BIB文件
修改AM33X_SK_BSP\FILES文件夹下的platform.bib文件,在FILES标签上方增加如下一句话
LED.dll               $(_FLATRELEASEDIR)\LED.dll                              NK  SH
保存。
修改REG文件
修改AM33X_SK_BSP\FILES文件夹下的platform.reg文件,添加
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\LED]
         "Prefix"="LED"
         "Dll"="LED.dll"
         "Index"=dword:1
         "Order"=dword:13(此项可自定义,根据目前的已经启动的DLL的数量自定义)
保存
测试
重新编译操作系统,将生成的镜像拷贝到SD卡上然后烧写到开发板上。
将调试串口接入,启动,如果设置正常,则串口会输出[LED]:INIT的信息。
删除流驱动停止编译驱动文件
在解决方案资源管理器窗口中依次展开AM335_SK_OS->C:\WINCE600->PLATFORM->AM33x_SK_BSP->SRC->DRIVERS然后在LED文件夹上点击右键,选择Exclude from Build
修改BIB文件
打开AM33X_SK_BSP\FILES文件夹下的platform.bib文件,删除修改
LED.dll               $(_FLATRELEASEDIR)\LED.dll                              NK  SH
保存。
修改REG文件
打开AM33X_SK_BSP\FILES文件夹下的platform.reg文件,删除修改
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\LED]
         "Prefix"="LED"
         "Dll"="LED.dll"
         "Index"=dword:1
         "Order"=dword:13(此项可自定义,根据目前的已经启动的DLL的数量自定义)
保存
重新编译
重新编译操作系统,将生成的镜像拷贝到SD卡上然后烧写到开发板上。
将调试串口接入,启动,如果设置正常,则串口不会输出[LED]:INIT的信息。

这里需要注意的是,这里只是常规的删除流驱动的方法,一些比较复杂的流驱动,可能涉及其他驱动,这个时候就需要对驱动有比较深刻的理解,以防止删除驱动,但是其它驱动还会调用该驱动造成系统错误。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-12-20 19:46

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表