之前在使用君正的usb boot的host程式时,编译驱动并加入usb boot烧录程序的流程,对当时的操作作简单的说明
一. 安装环境,须按如下步骤安装:
1.安装VC6/VS2003/VS2005,本次安装的为VC6
2.安装DDK,本次安装的为1830_usa_ddk.iso,安装完成目录为WINDDK\3790.1830
3.安装DS(DriverStudio),本次安装为DriverStudio 3.2 Setup
注意:VC6的安装需在DS之前,这样可以在DS安装后,在VC6 IDE下看到DriverStudio菜单项
二. 编译DS的souces和例程
从DDK Build Settings下启动VC6,打开C:\Program Files\Compuware\DriverStudio\DriverWorks\source\VdwLibs.dsw
Batch Build x86库,如果编译OK,会在C:\Program Files\Compuware\DriverStudio\DriverWorks\lib\i386在生成相应的库文件,也说明之前的环境安装OK
接下来,也可以编译C:\Program Files\Compuware\DriverStudio\DriverWorks\Examples\下的例子,如wdm,使用DDK sources to vcproj Converter将目前下DIRS装换成VC6的工程文件,然后按照上面的步骤Batch Build x86即可
不过在编译例子ChatApp等时出现了如下错误:
--------------------Configuration: ChatApp - Win32 Free--------------------
Compiling with DDK compiler...
openbyintf.cpp
1394chat.cpp
console.cpp
Linking with DDK linker...
LIBC.lib(output.obj) : error LNK2019: unresolved external symbol @__security_check_cookie@4 referenced in function __output
LIBC.lib(mbctype.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
LIBC.lib(write.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
LIBC.lib(convrtcp.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
objfre\i386/ChatApp.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
ChatApp.exe - 5 error(s), 0 warning(s)
--------------------Configuration: ChatApp - Win32 Checked--------------------
Compiling with DDK compiler...
openbyintf.cpp
1394chat.cpp
console.cpp
Linking with DDK linker...
ChatApp.exe - 0 error(s), 0 warning(s)
解决:在Project-->Settings-->C/C++ for Win32 Free下将Common Options中的/ML改为/MDd,即将Category:Code Generation下的Use run-time library由Single-Threaded改为Debug Multithreaded DLL
三. 编译Usb Boot
同样的方式,打开Usb Boot工程,编译时出现如上类似的错误,解决方法类似,最终生成了Test_jz4740_usb.exe和jz4740_usb.sys
参考:
如下(VC6.0 +WDK 开发驱动的环境配置):
前段时间,系统偶感风寒,挂掉了,苦于又没有备份过,只有重装了。原来开发驱动的环境是VC6+DDK+DriverStudio3.2,当时配置的时候就花了好一阵功夫,也没有彻底搞清楚。现在要重装了,决定改用WDK来开发,但环境的配置又搞的我头疼,不太喜欢命令行方式的编译,还是想借助VC6来开发驱动。
在安装完VC6和WDK以后,就开始进行环境的配置了,可结果是弄了半个上午,还是搞不定。去网上找信息,关于WDK的,多是使用VS2005或VS2008的,有的要借助于DriverStudio之类的,按上面的方法来配置自己的工程看来不行。于是就参考了别人写的VC6+DDK编译驱动的文章,终于成了,不过有些地方还是有点不一样的。在这里把不一样的地方写下来,以供大家参考。
参考:http://blog.csdn.net/wzsy/archive/2009/04/07/4053632.aspx
(1)第一步:
打开VC建立一个Win32 Application工程,然后选择An empty Project。
(2)第二步:
随便找一个驱动程序,主要是.C,.h及rc资源文件,加入第一步建立的工程
(3)第三步:
设置VC编译驱动的环境,这才是重点。
打开VC的Tool->Options->Directories里设置Include,Lib,及Exectuable File。这里说明下为什么要设置这三个东西:Include目录中,主要是供我们开发使用的头文件.h文件;Lib目录,为我们驱动所要调用的一些链接库文件;Exectuable File,这个很重要,它里面包含了我们编译驱动所使用的Cl.exe及连接link.exe文件,VC正是通过这两个文件来生成最后的驱动.sys文件(如果编译出现cl.exe错误,说明是这里的路径设置的不正确,我先前在这里走了弯路了,所以提醒下)。
设置Include路径:
E:\WINDDK\6001.18002\INC
E:\WINDDK\6001.18002\INC\CRT
E:\WINDDK\6001.18002\INC\DDK
E:\WINDDK\6001.18002\INC\API (这里可能有些不需要,也可能少了,根据自己的情况在INC目录下继续添加就OK了)
设置LIB路径:
E:\WINDDK\6001.18002\LIB
E:\WINDDK\6001.18002\LIB\CRT\I386
E:\WINDDK\6001.18002\LIB\WNET\I386
设置Executable Files:
E:\WINDDK\6001.18002\bin\x86\x86
(这里要注意,一定要在bin\x86目录下,确切的找到Cl.exe文件,然后添加它所在的目录,DDK与WDK这个文件所在的路径并不是一样的,上面的是我所安装的WDK中cl.exe所在的路径,这里要根据不同情况选择正确的路径)
(4)第四步:
这里要设置工程的属性:
打开VC->Project菜单,找到C/C++选项卡,在Preprocesser definitions里输入如下字符串:
Release下输入:
_X86_=1,i386=1,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,NDEBUG
Debug下输入:
_X86_=1,i386=1,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,_DEBUG
在Code Generation里的Calling convention用_STDCALL
Debug版有个特殊编译选项 /GZ (注意是大写的,小写的不要删!)删掉,否则有链接错误,chkesp链接 不上什么的。
(5)第五步:
设置link选项卡,将输出文件名改为sys扩展名,
在General的Objcet/Library modules,填写驱动调用的几个lib:
ntoskrnl.lib hal.lib usbd.lib wmilib.lib。
然后进入Output在Entry-point symbol:填DriverEntry
下面就是往Project Options手动增加一些链接选项,复制如下进去:
/machine:IX86 /driver /subsystem:native /SECTION:INIT,d /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221
删除如下选项:
/subsystem:windows
/machine代表目标机器类型,/driver代表驱动,/subsystem:native 也是代表驱动。
(这里,我在配置的时候,只是将/subsystem:windows改为:/subsystem:native没有再进行其它设置,也可成功生成驱动文件,至于有没有问题,暂时不知道)
阅读(1913) | 评论(0) | 转发(0) |