silan
驱动小牛
驱动小牛
  • 注册日期2002-02-04
  • 最后登录2004-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3970回复:9

编译网卡驱动程序时出错找不到ndis.h文件,为什么?(100分答谢)--分数已给

楼主#
更多 发布于:2003-03-07 10:29
我的Workspace放在D;\\Working\\PdaTry,网卡驱动放在D;\\Silance

网卡驱动程序由makefile,sources和驱动程序文件组成,没有.reg文件,先通过BSP Wizard加到Catalog,然后从Catalog加到Platform,Build Platform时出错:NMAKE: U1073: don\'t know how to make \'D:\\Working\\PdaTry\\WINCE410\\Emulator\\cesysgen\\oak\\lib\\x86\\debug\\silance.def\'
我看了一下,PlatformBuilder的确没有把我的silance.def拷到该目录下,于是我手动的把silance.def拷到该目录下,我注意到该目录下并没有其他的.def文件。
再右键选中并且Build the Selected Feature,这时出错如下:
Platform header files are up-to-date...
Performing Additional Build Actions...
Srcgen D:\\Silance  PDATRY D:\\Working\\PdaTry\\WINCE410\\Emulator\\cesysgen
BUILD: Compile and link for X86.
BUILD: Loading D:\\Silance\\Build.dat...
BUILD: Computing Include file dependencies:
BUILD: Examing d:\\Silance directory for files to compile.
       d:\\Silance
BUILD: Building generated files in d:\\Silance
BUILD: Examing d:\\Silance directory for files to compile.(2nd Pass)
       d:\\Silance
       d:\\Silance -12 source files (3,316 lines)
BUILD: Compiling d:\\Silance directory
Compiling -d:\\Silance\\.\\init.c for x86
d:\\Silance\\.\\precomp.h(16): error C1083: cannot open include file: \'ndis.h\' No such file or directory.
...

后面是一堆同样的错误,只要是涉及到ndis.h的地方。再有就是由于缺少ndis.h引起的函数未定义错误。
init.c中有include<precomp.h>
precomp.h内容如下:
#ifndef ___PRECOMP___H__
#define ___PRECOMP___H__

#include <ndis.h>
#include <function.h>  //  我自己的头文件
#include <maindef.h>   //  我自己的头文件
#endif

我按照有些大虾的提议做了,把ndis5.1从Catalog中加到Platform,重新编译平台,可再编译我的Feature时依然出现上面的错误,这是为什么啊,100分答谢!!!


[编辑 -  3/9/03 by  silan]
/***************************/ 认认真真学好三个代表,踏踏实实做好无产阶级接班人。 /***************************/
yusb
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2006-02-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-07 14:33
把ndis.h拷贝到你的网卡驱动目录下或者设置一下头文件的路径试试
silan
驱动小牛
驱动小牛
  • 注册日期2002-02-04
  • 最后登录2004-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-07 14:51
    ndis.h里面还包含了很多其它的头文件,如ntcompat.h等等,如果仅仅修改#include <ndis.h>为#include <D:\\WINCE\\...\\ndis.h>的话,依然无法解决ndis.h包含的其它头文件的路径问题。你说的修改路径是不是从Tools->Options->Directories中修改,我改过了,也不行啊。
    拷过来可能不行,我也觉得应该修改路径,但不知道怎么改,如果路径不告诉编译器,link的时候编译器可能还会出问题。
    

[编辑 -  3/8/03 by  silan]
/***************************/ 认认真真学好三个代表,踏踏实实做好无产阶级接班人。 /***************************/
yusb
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2006-02-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-07 15:03
Options->Directories中加入NDIS.H的路径不行吗?
你是选择的included files 再ADD include 的路径吗?
silan
驱动小牛
驱动小牛
  • 注册日期2002-02-04
  • 最后登录2004-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-07 15:16
    是的,而且选择的included files 再ADD include 的路径的,不行,我头都大了。
    我是不是还要改我定制的平台上的.reg或者.bat文件?不然PlatformBuilder怎么不会自动把我的silance.def文件加到平台中去呢?每次编译平台后该文件都会被删掉。
    我把ndis5.1从Catalog加到Platform中去了,结果编译平台时没问题(有警告),选中ndis5.1,再Build the selected feature时也会出错:
Error PB2504: Error spawning #(C:\\WinCEKits\\WINCE410\\private\\winceos\\COMM\\ndis51\\ntcompat\\)build.exe
我查看了一下C:\\WinCEKits\\WINCE410\\private\\winceos\\COMM目录,下面根本没有\\ndis51子目录。
/***************************/ 认认真真学好三个代表,踏踏实实做好无产阶级接班人。 /***************************/
yusb
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2006-02-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-07 15:32
1、如果你在这加了这个路径,不应该还找不到ndis.h
另:你的网卡驱动是单独编译的,还是和整个系统一起编译的?
建议:定制一个系统(有网卡支持),然后再单独编译你的网卡驱动。
对了,最好在IDE和命令行下都试一下
silan
驱动小牛
驱动小牛
  • 注册日期2002-02-04
  • 最后登录2004-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-08 16:39
在#include <ndis.h>中的ndis.h前加上路径之后,ndis.h里包含了ntcompat.h,ntcompat.h又include <wdm.h>,这些路径又都找不到了,而且我按有些大虾的意思把
#include <ndis.h>
改成
extern \"C\" {
#include <ndis.h>
}
也不行。
和平台一起编译的时候出警告:
NMAKE: U1073: don\'t know how to make \'D:\\Working\\PdaTry\\WINCE410\\Emulator\\cesysgen\\oak\\lib\\x86\\debug\\silance.def\'

silance.def是我的驱动程序中的一部分,都放在D:\\Silance目录下,里面定义了Exports,PlatformBuilder不会自己把它拷到‘D:\\Working\\PdaTry\\WINCE410\\Emulator\\cesysgen\\oak\\lib\\x86\\debug\\’这个临时文件夹下。命令行编译我不会,我回去再看看用命令行编译一下。
/***************************/ 认认真真学好三个代表,踏踏实实做好无产阶级接班人。 /***************************/
yusb
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2006-02-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-09 15:06
1、在你的SOURCES文件的“INCLUDES=”这一项中加入你的NDIS.H的路径试试。 
2、你的silance.def文件找不到,我怀疑你通过BSP Wizard加到Catalog时可能不太对。

silan
驱动小牛
驱动小牛
  • 注册日期2002-02-04
  • 最后登录2004-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-09 18:00
    yusb,我的问题已经自行解决,今天特来放分,本来决定分数见者有份,但发现你说的INCLUDE是对的,所以还是决定很公平的把分数给你,谢谢你!
    问题是这样解决的。我的sources是参考ne2000的驱动写的,把ne2000的加到平台也会出同样的问题,所以我又打开了几个sources,其中有一个是无线网卡的,发现这款无线网卡里有一项INCLUDES,于是我就加上了:
_PUBLICROOT=D:\\Working\\EmbPad\\PdaTry\\WINCE410\\Emulator\\cesysgen
INCLUDES=\\
         $(_PUBLICROOT)\\sdk\\inc; \\
         $(_PUBLICROOT)\\ddk\\inc; \\
         $(_PUBLICROOT)\\oak\\inc; \\
         ..\\inc;
这样就不会找不到头文件了。

找不到silance.def,我把WINCETARGETFILE0=$(_COMMONOKAROOT)\\lib\\$(_CPUINDPATH)\\silance.def
改成
WINCETARGETFILE0=$(_RELEASELIBDIR)\\$(TARGETDEFNAME).def
就行了。
/***************************/ 认认真真学好三个代表,踏踏实实做好无产阶级接班人。 /***************************/
yusb
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2006-02-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-10 09:17
谢谢silan
游客

返回顶部