[转]VC的DDK编译环境构建
http://blog.csdn.net/skdev/article/details/1336935
1 环境状况
Windows XP SP1 NTDDK(win2kddk) VC++6.0
NTDDK所在路径:D:/NTDDK
DDK 编译所需的文件:SetEnvCallBuild.bat BuildDriver.bat makefile makefile.mk source
SetEnvCallBuild.bat 是命令行(msdos)执行文件,参数:checked WXP或free WXP 两种
BuildDriver.bat是SetEnvCallBuild.bat调用的文件。
Makefile makefile.mk source 是build –cZ 用到的文件;makefile和makefile.mk不用修改,souce包含要编译的文件,用记事本编辑。
以下用NTDDK/src/wdm/usb/usbview为例
2 各文件的代码
文件名 SetEnvCallBuild.bat
//-----------------------------------
@echo on
REM %1
REM %2
set DDKPATH=D:/NTDDK
set PRJDRV=E:
set PRJPATH=driver
echo s1 %1
echo s2 %2
call BuildDriver.bat %DDKPATH% %PRJDRV% %PRJPATH% %1 %2
set DDKPATH=
set PRJDRV=
set PRJPATH=
----------------------------------------//
注:DDKPATH=D:/NTDDK为NTDDK安装的路径,PRJDRV=E E表示要编译文件所在盘符即E盘,PRJPATH=driver driver表示要编译文件所在的文件夹。
文件名 BuildDriver.bat
//------------------------------------
@echo off
REM %1
REM %2
REM %3
REM %4
REM %5
echo n1 %1
echo n2 %2
echo n3 %3
echo n4 %4
echo n5 %5
if %1=="" goto usage
if %3=="" goto usage
if not exist %1/bin/setenv.bat goto usage
call %1/bin/setenv.bat %1 %4 %5
%2
cd %3
build –cZ
goto exit
:usage
echo usage Make sure your DDK path is valid!
:exit
---------------------------------------------//
文件名 makefile
//--------------------------------------------
#############################################################################
#
# Copyright (C) Microsoft Corporation 1992-1997
# All Rights Reserved.
#
# makefile for USBVIEW
#
#############################################################################
# Paths are relative to the directory containing this file.
!IFDEF WIN95_BUILD
# Root of the SLM tree (i.e. the directory containing the DEV project).
!IFNDEF ROOT
ROOT = ../../../..
!ENDIF
DEFAULTVERDIR = retail
VERSIONLIST = retail debug
IS_32 = TRUE
COMMONMKFILE = makefile.mk
!include $(ROOT)/DEV/MASTER.MK
!ELSE
!include $(NTMAKEENV)/makefile.def
!ENDIF
--------------------------------------//
文件名 makefile.mk
//-----------------------------------------
#############################################################################
#
# Copyright (C) Microsoft Corporation 1996-1998
# All Rights Reserved.
#
# makefile.mk for USBVIEW
#
#############################################################################
ROOT = ../../../../..
NAME = USBVIEW
SRCDIR = ..
IS_32 = TRUE
WANT_C1132 = TRUE
WANT_WDMDDK = TRUE
IS_DDK = TRUE
L32EXE = $(NAME).exe
L32RES = ./$(NAME).res
L32LIBSNODEP = kernel32.lib user32.lib gdi32.lib comctl32.lib libc.lib cfgmgr32.lib
TARGETS = $(L32EXE)
DEPENDNAME = $(SRCDIR)/depend.mk
RCFLAGS = -I$(ROOT)/DEV/INC
# Enable read-only string pooling to coalesce all the redundant strings
#
CFLAGS = -GF
L32OBJS = usbview.obj /
enum.obj /
display.obj /
debug.obj /
devnode.obj /
dispaud.obj
!INCLUDE $(ROOT)/DEV/MASTER.MK
----------------------------------------//
文件名 source
//--------------------------------------------
TARGETNAME=usbview
TARGETTYPE=PROGRAM
TARGETPATH=obj
UMTYPE=windows
UMENTRY=winmain
UMBASE=0x1000000
TARGETLIBS=/
$(SDK_LIB_PATH)/kernel32.lib /
$(SDK_LIB_PATH)/user32.lib /
$(SDK_LIB_PATH)/gdi32.lib /
$(SDK_LIB_PATH)/comctl32.lib /
$(SDK_LIB_PATH)/cfgmgr32.lib
INCLUDES=../inc;../../inc
SOURCES=usbview.c /
display.c /
enum.c /
debug.c /
devnode.c /
dispaud.c /
usbview.rc
-------------------------------------------//
SOURCES 所列的文件为需编译的。
3 创建工程
1) 新建工程
选择makefile
2) 在Debug中创建check版的驱动
注:WXP 为Windows XP
3) 在Release中创建free版驱动
4) 导入文件
5) 编译工程
6) 生成结果
生成objchk/i386中的usbview.exe
说白了原理与在dos编译一样
如下为dos编译方法
setenv即为setenv.bat 其参数为ntddk所在路径

表示环境创建成功
然后到要编译的目录下运行build –cZ 注意:该目录下必需的makefile makefile.mk source文件
运行结果
完成。
参考:啊良的”使用VC6编译Driver”
- VC++6.0编译环境介绍
大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解.原因是多方面的.大多数情况下,我们只停留在"使用"它,而不会想去"了解"它.因为它只是一个工具,我 ...
- 在CentOS上构建.net自动化编译环境
我们知道在Windows上我们很容易构建于MSBuild的自动化编译环境,那么在CentOS也是可以的,主要是需要Mono. 在这儿我们选择Jenkins+Gitlab+Mono在C ...
- 【Android开发】构建Android源码编译环境
原文:http://android.eoe.cn/topic/android_sdk 构建Android源码编译环境 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- 迁移到MSYS2 与 Qt 工具链注意的几个事情(g++在链接时,符号依赖项查找遵循从左至右的顺序,但qmake会自动合并造成错误。使用脚本给Mingw32-make创造出一个局部的VC编译环境)
Microsoft Visual Studio 2015社区版提供了强大的开发体验,且 Qt 提供了预编译版本.然而,由于客户提出兼容Windows XP ~ Windows 8.1 这样宽泛的环境要 ...
- 利用 Docker 构建一个简单的 java 开发编译环境
目前 Java 语言的版本很多,除了常用的 Java 8,有一些遗留项目可能使用了 Java 7,也可能有一些比较新的的项目使用了 Java 10 以上的版本.如果想切换自己本地的 Java 开发环境 ...
- VC++2010下编译STLport,Boost
VC++2010下编译STLport,Boost 最近在想向Boost转移,努力掌握Boost代码的过程中, STLport版本:5.2.1 Boost版本:1.4.6.1 (1.4.7.0也OK) ...
- windows下安装python的C扩展编译环境(解决“Unable to find vcvarsall.bat”)
个人文章除注明转载外,均为个人原创或者翻译. 个人文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本文链接:http://www.cnblogs.com/f ...
- VS编译环境中TBB配置和C++中lambda表达式
TBB(Thread Building Blocks),线程构建模块,是由Intel公司开发的并行编程开发工具,提供了对Windows,Linux和OSX平台的支持. TBB for Windows ...
- Windows下用VC与QT编译MPI程序入门
MPI是信息传递接口的简称,常用来进行进程间.机器间的通信与并行计算.一般而言,MPI都会部署在*nix系统下,在Windows下面直接编译.配置MPI并不容易.本文利用MS提供的编译好的MPI的版本 ...
随机推荐
- SQL:认识数据库约束
讲了关于数据库的很多内容,也讲了很多约束,对唯一和主键.核查和规则.外键约束很感兴趣. 一.唯一和主键(实体完整性) 区别: 数量:一张表只可以有一个主键约束,却可以有多个唯一约束. 是否空值:主键不 ...
- 在C++中调用DLL中的函数 (2)
应用程序使用DLL可以采用两种方式: 一种是隐式链接,另一种是显式链接.在使用DLL之前首先要知道DLL中函数的结构信息. Visual C++6.0在VC\bin目录下提供了一个名为Dumpbin. ...
- 如何判断raid1中哪块硬盘损坏?
服务器 2块硬盘做的raid1,如果其中有一块坏掉,如何能判断是哪块坏掉? 方法①.通过硬盘硬件指示灯进行观察,一般黄灯代表硬盘存在问题,显示红灯则代表硬盘损坏.方法②.通过开机进入阵列配置进行查看, ...
- javaSE第十七天
第十七天 168 1:登录注册案例(理解) 169 A:用户注册案例的分析 169 B:用户注册案例的源码 170 1: cn.itcast.pojo.User.java ...
- Ajax实现步骤和原理
1.获取ajax异步对象 IE4~IE12 : 使用new ActiveXObject("microsoft.xmlhttp"); 非IE : 使用new XMLH ...
- html Doctype作用?
Doctype它主要的作用来声明html的版本 <!Doctype html>这是html5的 不写可能会造成html5的功能不能用(具体会不会出错就要看浏览器的容错性)
- jQuery中$.ajax()和$.getJson()同步处理详解
一.前言 为什么需要用到同步,因为有时候我们给一个提交按钮注册提交表单数据的时候,在提交动作之前会进行一系列的异步ajax请求操作,但是页面js代码会按顺序从上往下面执行,如果你在这过程中进行了异步操 ...
- Linux命令学习---目录
一.文件相关命令 1.文件显示 1)tail,head,more,less,cat,nl
- Hbase Interface HConnection
HTablePool 在Hbase 0.94.0.95.0.97被废弃,在0.98中被清除( HTablePool 对比HConnection.getTable),hbase0.98 HTablePo ...
- WordPress 主题开发 - (四) 创建WordPress的主题HTML结构 待翻译
Now we're starting to get into the real meat of WordPress Theme development: coding the HTML structu ...