logo资料库

windriver快速入门指南.pdf

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
快速入门指南 五分钟学会写设备驱动程序. 谁必须用 WinDriver? 1. 硬件开发者--用这个驱动程序向导来快速测试你的新硬件。 2. 软件开发者 --用这个驱动程序向导来 产生设备驱动代码驱动你的硬件。用 WinDriver 工具来检测和调试 你的驱动程序。. WinDriver 支持哪个操作系统? 1. WinDriver 现在支持 Windows 95, 98, NT, 2000, Windows CE, Linux, Solaris 和 VxWorks. 检查一下 RFTech 网址看看在操作系统支持上是否有新的升级。 2. 利用 WinDriver,你写一样的驱动程序将会运行在以上所有的平台上--只要重新编译即可运行。学习 WinDriver 的方式,请看 WinDriver 技术白皮书。 在哪获得更多深入的资料? 1. 要想得到 WinDriver 技术白皮书、更深入的资料和价值 30 天的免费使用,请看 KRFTech 网址: http://www.krftech.com/dnload.html 2. 完整的 WinDriver 指南可以从 http://www.krftech.com/manuals.html 下载。 六步建立设备驱动程序: 安装: • 把硬件装置插入到 PC 机上 • 安装 WinDriver。 PCI/ ISA 总线 选择硬件: • 从开始菜单里,选择 WinDriver|Driver Wizard,运行 DriverWizard 程序。 DriverWizard 将会在你的机器上显示所有的即插即用设 备。 • 对于即插即用设备: 从列表中选择你的硬件设备。 • 对于非即插即用设备: 从列表中选择 “ISA” (你的鼠 标,键盘,内存等都是 ISA 设备) 。
. 检测 / 定义硬 件: • Driver Wizard 将自动测试即插即用设 备资源(I/O 范围, 内存范围以及中 断)。你可以手动定义寄存器。 • 对于非即插即用设备: 你需要动定义硬 件资源。 测试硬件: 在写驱动程序之前确信你的硬件工作正 常是很重要的。使用 Wizard 程序诊断你 的硬件, 如果硬件正在工作它可以查出 以下内容: • 读写硬件的内存及寄存器。 • 监听硬件中断。 产生驱动程序代码: 使用 Driver Wizard 产生驱动程序代码。它可以生 成如下代码: • 操作硬件的应用程序级(内核级)API 函数。 • 用上述 API 函数操作硬件的样本应用程序。 • 各种工程文件(对应与 Windriver 所支持的各种 操作系统及环境)。 . . BYTE MyCard_ReadStatusRegister (MyCard_HANDLE hMyCard) { BYTE data; MyCard_ReadWriteBlock(hMyCard, MyCard_StatusRegister_SPACE, MyCard_StatusRegister_OFFSET, &data, sizeof(BYTE), MyCard_MODE_BYTE);
Your Driver Project Name 编译及运行: • 让 Driver Wizard 为你喜欢的编译器产生工 程文件。 • 编译样本诊断程序并运行它! 这个样本程 序是你最终的驱动程序的一个雏形。 • 修改样本程序以适合你的需要, 或者使用 WinDriver 提供的其它许多例子程序。
Your hardware access API, and a sample application that uses this API Intuitive API. Call these functions directly from within your application! Start with XXX_Open(), use the Read/Write functions, Interrupt handling functions, etc., and finish with XXX_Close().
A: 使用 WinDriver, 你的设备 驱动程序将在用户模式下开发(作 为应用程序或一个分离的 DLL 的 一部分),你可以使用准的 Win32 开发工具(MSDEV, Borland 等等) 来开发及调试你的驱动程序, 这 会显著缩短开发时间。 使用 WinDriver 产生的驱动程序 (YourApp.EXE)通过 WinDriver 内核模块(Windrvr. VXD / SYS) 操作你的硬件, 并使用标准的 WinDriver 函数。 Q: WinDriver 如何工作? Your Application (EXE or DLL) WinDriver API (Windrvr.h) WinDriver Kernel Module (SYS or VXD) WinDriver Kernel PlugIn Your Kernel Functions (SYS or VXD) e d o M r e s U e d o M l e n r e K Your Hardware Q: 使用 WinDriver 如何达到最性能? A: 在驱动程序产生以后, 你可以很容易的改变驱动代码关键部分的性能 (中断或者 I/O 调用 等),方法是在 WinDriver 的核心模式下运行, 这将获得最佳性能。例如 – 在用户模式下写出中断 处理过程,写好代码,在用户模式下调试好这段代码后, 将这段代码移到核心模式的 PlugIn中. 此时你的中断例程将在核心模式下执行,这将达到最佳性能。 这种机制使您可以在用户模式下编写及调试代码, 然后转到核心层去运行,代码无需任何变动。
实际操作 下面的练习将使您在 5 分钟内领略 WinDriver 的一些功能. 你可以从http://www.biaoge.com.cn 下载一个 30 天的使用版来做如下练习。 练习 1: 读写 PCI 内存 目标: 学习如何读写 PCI 内存范围,以及如何定义寄存器。 概况: 这个练习会演示如何通过 Driver Wizard 读写 PCI 内存卡, 并产生这样的一个应用程序。下面将 以读写 PCI ( AGP) 显示卡为例来说明这个过程。 第 1 步: 启动 Driver Wizard 第 2 步: 从开始菜单,选择"程序 | WinDriver | Driver Wizard". 第 3 步: 在 Driver Wizard 菜单, 单击"File | New Project"菜单. 第 4 步: 从即插即用列表中选择显示卡,通过生产商的名字来选定。 第 5 步: 单击“Memory” 标签。该显示卡三内存范围显示出来. 内存范围的一段映射到显示器,例如, 内存范围中的数据映射到屏幕上的点阵. 从位置 0 开始读(屏幕的左上角位置). 现在移动一个 窗口到屏幕左上角然后再读,如果此时内存值变化了,说明你找的内存块是正确的。现在你 可以往这个内存块中写数据,你将会发现屏幕点阵发生变化! ** 注意: 如果你写的内存块不是显示卡位置,将会死机并需要重启系统。 第 6 步: 定义一个“TopLeft” 寄存器,它代表屏幕左上角 (例如位移 0). Read and write to this register. 定义另一个寄存器 “Somewhere”, 它的位移是 FF (屏幕上另一处点阵). 第 7 步: 单击"Build | Generate code" 菜单– Driver Wizard 将产生操作硬件资源的函数,你可以在用户模 式下在你的应用程序中直接使用这些函数,这个向导还会产生一个样本程序来使用这些函数 操作硬件! 第 8 步: 编译并运行该样本程序. 使用它来读写你的显示卡。 多简单啊—试一试! ** 注意: 你现在可以拷贝这些材料到任何其它所支持的操作系统 (Linux, Solaris, Windows CE 等等), 重 新编译,然后运行!
在练习 1 中由 Wizard 程序产生的部分 API 函数: BOOL SCREENCARD_Open (SCREENCARD_HANDLE *phSCREENCARD, DWORD dwVendorID, DWORD dwDeviceID, DWORD nCardNum, DWORD options); void SCREENCARD_Close(SCREENCARD_HANDLE hSCREENCARD); // General read/write functions void SCREENCARD_WriteWord (SCREENCARD_HANDLE hSCREENCARD, SCREENCARD_ADDR addrSpace, DWORD dwOffset, WORD data); void SCREENCARD_WriteDword (SCREENCARD_HANDLE hSCREENCARD, SCREENCARD_ADDR addrSpace, DWORD dwOffset, DWORD data); // This register represents a Pixel somewhere on the screen. DWORD SCREENCARD_ReadSomeWhere (SCREENCARD_HANDLE hSCREENCARD); void SCREENCARD_WriteSomeWhere (SCREENCARD_HANDLE hSCREENCARD, DWORD data); // This register toggles the top left pixel on the screen. DWORD SCREENCARD_ReadTopLeft (SCREENCARD_HANDLE hSCREENCARD); void SCREENCARD_WriteTopLeft (SCREENCARD_HANDLE hSCREENCARD, DWORD data); // handle interrupts BOOL SCREENCARD_IntEnable (SCREENCARD_HANDLE hSCREENCARD, SCREENCARD_INT_HANDLER funcIntHandler); void SCREENCARD_IntDisable (SCREENCARD_HANDLE hSCREENCARD);
练习: 处理中断 目标: 学习如何测试中断,并写出中断处理程序。 概况: 在这个练习中你将使用 Driver Wizard 监听由软盘驱动器产生的中断,然后你可以用此程序产生 一个应用程序来监听中断并在用户模式下写出一个中断处理程序。 第 1: 启动 Driver Wizard 第 2: 从开始菜单上, 选择 "程序 | WinDriver | WinDriver Wizard". 第 3: 在 Wizard 的菜单上, 单击"File | New Project". Wizard 程序会显示你机器中的即插即用卡列表 第 4: 由于我们将为软盘驱动器写程序,选择 ISA 第 5: 单击 “中断” 标签. • 定义软盘驱动器: 将中断命名“FloppyInterrupt”, 选择 6 作为中断号。 • 在创建的中断上单击右键, 单击“shared”. 这是因为要与操作系统共享此中断 第 6: 单击“监听中断”. • 查看软盘驱动器中断: 随意操作软盘驱动器 (例如, 在 DOS 路径下敲一个"a:" 浏览 A 盘上 一个文件)。 第 7: 单击菜单"Build | Generate code" – Driver Wizard 将会产生你定义的中断的功能函数. 你可以在 用户模式下直接调用这些函数. Wizard 还产生一个样本程序来演示如何操作软件驱动器 第 8: 编译并运行样本程序 第 9: 在样本程序中监听软件中断. 然后更改中断处理过程,把你自己的功能加到里面去。 多简单啊—试一试! ** 注意: 1. 使用 WinDriver’s 内核插件特性,可以在内核模式下处理中断及 IO 调用,这样可以达到 优化操作的目的。 2. 你可以测试一下 PS 鼠标中断 (Interrupt 12 on NT)及键盘中断 (Interrupt 1 on NT).
分享到:
收藏