驱动程序中使用CPPUnit

简介: 最近研究了一下如何将CPPUnit应用到驱动开发中,下面是一些实现步骤! 我的环境是WDK 6801,安装在C:/WinDDK目录下。IDE环境使用的是Visual Studio 2005。

最近研究了一下如何将CPPUnit应用到驱动开发中,下面是一些实现步骤! 我的环境是WDK 6801,安装在C:/WinDDK目录下。IDE环境使用的是Visual Studio 2005。
1. CPPUnit首先需要为WDK特别编译一个版本,使用如下方式配置Visual Studio环境:
   A. Visual Studio -> Tools -> Options -> Projects and Solutions -> VC++ Directories
     在Include files中添加如下列表,并将它们置顶:
     C:/WinDDK/6801.0/inc/api  <-将C:/WinDDK/6801.0替换成适当的路径
     C:/WinDDK/6801.0/inc/crt
     C:/WinDDK/6801.0/inc/ddk
     C:/WinDDK/6801.0/inc/api/crt/stl60
   B. 在相同界面下Library files中加入下面的列表,也将它们置顶

     C:/WinDDK/6801.0/Lib/Crt/i386
     C:/WinDDK/6801.0/Lib/wnet/i386  <- Windows 2003使用
 NOTE:使用这些设置,Visual Studio也可以用来编译WDK驱动程序。
   
2.打开cppunit工程,然后进行如下设置:
   Project Properties -> C/C++ -> Advanced ->Calling Convention 设为 "__stdcall(/Gz)"
     *相应的,测试程序也要使用同样的方式 WDK默认就是stdcall.
  
   Project Properties -> C/C++ -> Code Generation -> Runtime Library 设为 "Multi-threaded (/MT)"
     *注意此处的不同。它会决定后面所需要使用的静态库,详细的内容可以Google下。
 
3. 编译一份cppunit的Release版本。
   *最好将它拷贝起来,以和其它类型的cppunit库区分开来。
   
CPPUnit就算准备好了,现在开始建立一个测试工程。
4. 在sources文件中设定如下:
  CPPUNITDIR=C:/project/cppunit  <- 指向CPPUnit的工作目录
  TARGETNAME=UnitRunner <- 目标程序名称
  TARGETPATH=obj 
  TARGETTYPE=PROGRAM
  UMTYPE=console
  UMENTRY=main
  USE_LIBCMT = 1  <- 我们使用的是/MT,所以这里要使用LIBCMT, 不能使用MSVCRT (/MD)
  USE_STL=1  <- 我们需要使用STL,主要是CPPUnit引用的。
  STL_VER=60 <- 需要和VS中的STL版本保持一致。这里是STL60
  C_DEFINES=$(C_DEFINES) /D_STL60_
 
5. 将CPPUnit的路径加入到INCLUDES中
  INCLUDES=$(DDK_INC_PATH);$(INCLUDES);$(CPPUNITDIR)/include;
 
6. 将cppunit库加入到Library列表中:
  TARGETLIBS=$(TARGETLIBS) /
  ......
  $(CPPUNITDIR)/lib/WDK/cppunit.lib
 
  *其它库,视项目需要而定。
  
7. 确保源正件也正常时,开始编译。
*注意,因为我们只有编译一个Release版本。
目录
相关文章
|
6月前
|
缓存 Java C语言
嵌入式 LVGL移植到STM32F4
嵌入式 LVGL移植到STM32F4
|
9月前
|
Ubuntu Unix Linux
驱动程序的helloworld
驱动程序的helloworld
46 0
|
10月前
驱动开发:内核LoadLibrary实现DLL注入
远程线程注入是最常用的一种注入技术,在应用层注入是通过`CreateRemoteThread`这个函数实现的,该函数通过创建线程并调用 `LoadLibrary` 动态载入指定的DLL来实现注入,而在内核层同样存在一个类似的内核函数`RtlCreateUserThread`,但需要注意的是此函数未被公开,`RtlCreateUserThread`其实是对`NtCreateThreadEx`的包装,但最终会调用`ZwCreateThread`来实现注入,`RtlCreateUserThread`是`CreateRemoteThread`的底层实现。
2495 1
|
存储 异构计算
|
IDE Linux 编译器
鸿蒙移植i.mx6ull(六) Kconfig_GCC_Mkefile(下)
鸿蒙移植i.mx6ull(六) Kconfig_GCC_Mkefile
144 0
鸿蒙移植i.mx6ull(六) Kconfig_GCC_Mkefile(下)
|
物联网
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(下)
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统
273 0
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(下)
|
物联网
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(上)
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统
240 0
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(上)
|
Ubuntu Linux 编译器
Linux驱动设备树-工具使用
文件.dts是一种ASCII文本格式的设备树描述,由于其是纯文本形式的,所以十分适合开发人员阅读和修改。由于多个开发板会对应于同一款SoC,所以,可以将关于同一款SoC的DT配置提取成一个单独文件,称其为.dtsi文件。.dts和.dtsi文件类似于C语言的源文件和头文件的关系,所以.dtsi同样可以包含其他的.dtsi文件。
358 0
|
Linux
Linux qtcreator编程实现动态加载动态链接库
Linux qtcreator编程实现动态加载动态链接库
439 0