执行build -ceZ 编译驱动前的小动作1-setenv.bat

一直很好奇双击ddk的Checked/free Build Environment跳出的cmd对话框能运行build编译驱动(其实App也行),直接用cmd运行build,却提示找不到可运行的命令。开始时,怀疑环境变量Path没有包含build所在的路径导致不能工作,可是向Path追加了build的路径,虽然可以执行build但仍然不能生成sys。

于是换个思路驱动程序所在的目录下都少不了source/makefile文件,看看这些文件里有没有隐藏什么信息:

source

TARGETNAME=echo
TARGETTYPE=DRIVER

INF_NAME=echo

SOURCES=echo.c

makefile:

!INCLUDE $(NTMAKEENV)\makefile.def

source文件貌似和路径不沾边,倒是makefile隐约跟环境变量有关,到Build Environment看看环境变量NTMAKEENV的值。先声明我把wdk7600安装在C盘根目录下。

NTMAKEENV是ddk根目录的一个子目录,看来是ddk安装时设置了一些脚本,并在双击Build Environment时include进来(个人觉得用linux中source比较贴切)。搜索%DDKROOT%/bin目录下哪个文件设置了这个变量:

如图,NTMAKEENV由setenv.bat设置。如法炮制,看看有谁引用了setenv.bat这个脚本:

然而很可惜,并没有找到谁引用了这个脚本。看来只能在Build Environment这个快捷方式上找门路了。右键快捷方式

目标中的值为"C:\Windows\System32\cmd.exe /k C:\WinDDK\7600.16385.1\bin\setenv.bat C:\WinDDK\7600.16385.1\ chk x86 WXP"

查看ms 对cmd /k的解释:

如果指定了cmd /C 或 /K,命令行开关后的命令行其余部分将作为命令行处理

按他的意思就是由cmd启动C:\WinDDK\7600.16385.1\bin\setenv.bat,并把参数C:\WinDDK\7600.16385.1\ chk x86 WXP传给它。那好,找到设置NTMAKEENV环境变量的入口了。跟到setenv.bat中看看它做了哪些事(仅罗列一些重要的环境变量):

在文件的开头有一行

set BASEDIR=%1 这里%1就是C:\WinDDK\7600.16385.1\

于是set BASEDIR=%1变成了set BASEDIR=C:\WinDDK\7600.16385.1\

命令行参数有chk x86 WXP,因此脚本依次执行

if /I "%1"=="chk"     set _FreeBuild=false

...

if /I "%1"=="WXP"     set DDK_TARGET_OS=WinXP

...

if /I "%DDK_TARGET_OS%"=="WinXP"    goto WXP

:WXP

set _ddkspec=wxp

set _IA32bit=true

这些变量设置了编译版本,编译后二进制文件的文件结构

然后进入:checked分支,

设置优化选项,

set MSC_OPTIMIZATION=/Od /Oi

设置编译相关的变量:

set PROJECT_ROOT=%BASEDIR%\src

set PUBLIC_ROOT=%BASEDIR%

设置头文件包含路径

set Lib=%BASEDIR%\lib

set Include=%BASEDIR%\inc\api

set WPP_CONFIG_PATH=%BASEDIR%\bin\wppconfig

设置编译连接工具路径

set NTMAKEENV=%BASEDIR%\bin

set BUILD_MAKE_PROGRAM=nmake.exe

设置crt,sdk,ddk,wdk头文件路径

set CRT_INC_PATH=%BASEDIR%\inc\crt

set SDK_INC_PATH=%BASEDIR%\inc\api

set DDK_INC_PATH=%BASEDIR%\inc\ddk

set WDM_INC_PATH=%BASEDIR%\inc\ddk

设置lib库路径

set SDK_LIB_DEST=%BASEDIR%\lib\%_ddkspec%  --->C:\WinDDK\7600.16385.1\lib\wxp\i386\lib\wxp\i386

set DDK_LIB_DEST=%SDK_LIB_DEST%

set CRT_LIB_PATH=%BASEDIR%\lib\crt\*

正是因为设置了这些inc/lib的路径,因此当我们执行build -cez时不仅能编译驱动程序,还能正确生成native App(有机会会写blog)/win32 App等工程

当一切环境变量设置完成setenv.bat退出,正式进入到cmd交互环境。这时的cmd环境,由于还在同一个终端中,环境变量仍然有效,因此它是一个具有编译环境的强大cmd环境!

时间: 2024-08-24 13:05:33

执行build -ceZ 编译驱动前的小动作1-setenv.bat的相关文章

编译驱动时出现"Cannot open file trace.h"错误

编译驱动时出现"Cannot open file trace.h"错误 如题,用VS2013编译驱动是出现上述错误,原来是开启了WPP追踪导致的: 解决方案: 右键项目名-属性-WPP Tracing--->[Run Wpp Tracing]选择 <否> 即可. 需要注意的是编译平台需要正确选择,如果针对x86平台做了设置,在64位平台是不起作用的

【转】Unity3D中脚本的执行顺序和编译顺序

支持原文,原文请戳: Unity3D中脚本的执行顺序和编译顺序 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:  我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示,然后按照顺序将脚本绑定到对

Linux 跨内核编译驱动

在UBuntu12.04 内核版本3.2.0-29-generic-pae,编译UBuntu14.04内核版本为3.13.0-32-generic的驱动.首先要搭建编译环境. 1.安装相应的内核文件: apt-get install kernel-headers-`uname -r` uname -r : 需要替换为3.13.0-32-generic2 .编译驱动文件 make -C /usr/src/linux-headers-3.13.0-32-generic/ M=`pwd` clean

(转)linux下编译驱动

参考: 1,linux下编译运行驱动 http://blog.csdn.net/zeroboundary/article/details/9294715 2,A Simple Driver for Linux OShttp://www.codeproject.com/Articles/112474/A-Simple-Driver-for-Linux-OS (转)linux下编译驱动

C#执行js动态编译的方法

本文实例讲述了C#执行js动态编译的方法.分享给大家供大家参考.具体实现方法如下: 代码如下: using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace webpro { public clas

WinCE6.0学习笔记之三——快速编译驱动及BSP

转自:http://blog.chinaunix.net/uid-1818867-id-2835826.html 在WinCE下面,创建工程,然后编译是需要花很长时间的.当我们第一编译完工程以后,如果需要改我们的驱动或者BSP,我们是不需要重新编译整个工程的: 1. 如果更改了driver,以WinCE6.0为例,我们可以在菜单里面选择“build”->“Open Release Directory in Build Window” ,然后在弹出的命令行窗口中,通过dos命令切换到你要编译的dr

树莓派运载Realtek RTL8188启动hotspot开启wifi(编译驱动)

</pre>最近想搞点玩意,需要在户外开热点,树莓派是个不错的选择<p></p><p>驱动方面不太熟悉,参考了网上几篇文章,但是总是卡在最后一步,失败!</p><p>无奈,只能去官网的社区寻求帮助,终于解决了,用的是桥<span style="border: 0px; padding: 0px; margin: 0px; font-family: Helvetica, sans-serif; font-size: 13

WinCE下,快速编译驱动及BSP

在WinCE下面,创建工程,然后编译是需要花很长时间的.当我们第一编译完工程以后,如果需要改我们的驱动或者BSP,我们是不需要重新编译整个工程的: 1. 如果更改了driver,以WinCE6.0为例,我们可以在菜单里面选择"build"->"Open Release Directory in Build Window" ,然后在弹出的命令行窗口中,通过dos命令切换到你要编译的driver的目录下面,然后运行"build"就可以了.也可以

【转】Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)

http://www.cnblogs.com/champ/p/execorder.html 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:  我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示