mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
阅读:12274回复:53

我的菜鸟日记:将驱动移植到64位的Vista ultimate下

楼主#
更多 发布于:2007-12-05 11:21
     [p]   恩,左思右想,前思后想,决定开这个帖子,记录我这样一个菜菜菜到不能菜的菜鸟,到底将会克服什么困难,遇到什么问题,最终成功的(虽然目前到成功之远,堪比电信之于网通,不过,肯定是会成功的,对吧)把32bit的sys,移植到64bit的vista上去的。
    装修有装修日记,结婚有结婚日记,我来写个移植日记,一是为了记录自己的工作情况(说白了我就是怕我自己干完了都不知道到底干了些啥),二是拍砖引玉,希望有更多同学提供更多信息。
    本人真是超级菜鸟,之前混了两三年,其实连驱动是怎么一回事,都是一知半解的,要做这么一个工作,那真是非我本意啊,无奈银子大过天,赶鸭子上架,那也得上啊!所以,请各位大侠拍砖的时候,温柔点,罗马不是一天建成的,菜鸟也有倾诉的权利啊~~~~[/p]

最新喜欢:

zanjunzanjun
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-12-05 13:13
[p]菜鸟之所以自称菜鸟,跟谦虚这种美好的品德并无关系,完全基于对自身的充分了解和认识。
菜鸟工作三年,一直用的是VC6.0,WIN2K DDK,WIN 2K的系统,SoftICE因为电脑显卡不支持,一直没用过,WinDbg倒是装了,不过只用来看看dmp文件。一句话,调试驱动,我不会!大侠们可能会问:莫非你写好程序就瞎猫跑么?非也,非也。调试信息菜鸟还是会输出的。。。。[/p]
      菜鸟就是这样混了三年,上个星期,领导忽然下达最新任务,要让俺们的USB设备,在64bit的Vista下正常的,好好的,运行起来。期限:半个月!
   菜鸟心知不妙,丝毫不敢拖延,立马上网找资料,MSN上一通狂轰滥炸,总算得到如下信息:
1.、要有一个64位编译器,能编译出64bit的程序。得,就VS2005吧。下载,安装,成功!
2、win2k的DDK是不能用了,得装64bit的DDK。立马装了WIN2003DDK,装好傻眼了,那么多目录,又是XP又是2k的,没看到Vista啊?菜鸟立刻发挥不耻下问的精神,问到的结果是:你哪能用win2003的DDK呀,你得用Vista的DDK!呃,Vista的DDK,菜鸟记得在驱动开发网看到过的,赶紧上去下啊(又恐权限不够)。结果,恩,咋死活上不去驱网呢?算了,再找找吧。拍马赶到windows connetion(高级啊,以前从来没来过),注册,登陆,申请,下载,oye,成功!再一看速度,9k!菜鸟还算聪明,在美国,欧洲和亚洲三个下载地址中那是反复的试啊连啊,死活速度不超过11k!老实等着吧。结果下班之后,忽然发现速度猛然窜到了300k。苍天啊,大地啊,白白骂了微软一天,敢情是我们公司这破网的问题啊!下载成功,安装,结果:呃,您的系统太破,我们WDK不支持。。菜鸟崩溃中。。。
3、sys那是一定要是64bit的。但是DLL,据说32bit的也能用,只不过得换个目录放。那就不管它,先用32bit的,不行再换。[p][/p]
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-12-06 08:42
昨天,菜鸟跌跌撞撞的在Vista下面,装好了VS2005,WDK,有模有样的开始编译sys啦!当然是一大堆的警告和错误,swprintf直接报错,说参数缺了一个,改啊改;无数的函数变得不安全,教我用安全的代替,反正是警告,就当没看见吧先;编译连接选项变的乱七八糟,删啊删。目前还没编译成功。再接再厉吧
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-12-07 08:17
菜鸟昨天忙忙碌碌的编译了一天,也没编译成功!
正当焦头烂额之际,一个同事跟我说,你不用这么麻烦啊!直接在VC6下面,装好DriverStudio,用2003的DDK编译嘛!只要改下编译连接选项,改成AMD64的就成。
菜鸟一下子晕了,这样可以么?真的可以么?那我之前不是白折腾了啊?
算了,先这样试试。。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2007-12-07 08:30
后来呢???
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-12-07 10:34
哈哈,楼上的同学,我好感谢你啊!!!你是第一个光临菜鸟日记的。
后来菜鸟我真的按照同事所说的,用DriverStudio编译的,编译成功啦!
然后我改了我的inf文件,在Vista下安装,遇到了“类别安装程序拒绝安装或升级此设备的请求”的错误,现在我正在想如何解决这个问题哩。
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-12-07 10:39
菜鸟这时候有点想明白了,我虽然是在VC6下打开我的工程,但是我装好了Driverstudio和2003DDK,并且设置好了编译连接选项,定义了AMD6的预编译头,这个时候其实是DriverStudio在编译连接,而不是VC6,所以这样编译出来的sys,也应该是64bit的啦!
为了验证菜鸟的想法,菜鸟用Depends打开sys,哈哈,一团乱,再打开之前的32bit的sys,一目了然!
这是不是能证明菜鸟编译的sys,确实是64bit的呢?
菜鸟想法奇怪幼稚并且无知,大侠看到了请多多指教。
我其实知道我这样做事情不对,但是我Vista没用过,64bit系统没用过,VS2005没用过,WDK没用过,2003DDK我都没用过,这样的情况我真的是病急乱投医啦!
angel_dolphin_i
驱动中牛
驱动中牛
  • 注册日期2007-08-16
  • 最后登录2011-09-06
  • 粉丝1
  • 关注0
  • 积分289分
  • 威望444点
  • 贡献值1点
  • 好评度552点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-12-07 10:39
哦,呵呵,再后来呢,come on, baby!
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-12-07 10:50
菜鸟现在很后悔三年来一直混混沌沌的工作,公司一直用的VC6加2000 ddk,菜鸟也一直心安理得的这么用,似乎都跟外界脱节了。等开始这个工作的时候,菜鸟才猛然发现,自己落后的太多了!记得两三年前,菜鸟混的一个论坛上,大家都在骂VS2003,说它这个不好那个不好,说VC6多么多么好,菜鸟那会儿觉得很开心,这不就更有理由不用学习新工具了么?但是现实就是:新的工具一旦发展成熟,必然取代旧工具,作为我们来说,有三种选择,1,主动接纳学习新工具。2,被动接受新工具。3,无法接受新工具,被淘汰!
   菜鸟现在不得不选择了第二个。并且下了决心,我得做第一个!
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-12-07 11:00
啊,又有同学来我的帖子了!感动中!
菜鸟总结一下自己现在的成果:
1、用DriverWizard创建了一个新的支持AMD64的空的驱动工程,删掉了其中所有文件,把我原来工程文件添加进去。然后在VC6下,通过DriverStudio设置好DDK的目录为2003DDK,编译成功了sys。
2、修改了INF文件,增加了一个ntamd64的section,在这个section下添加了我的设备VID等。
3、直接使用inf文件,右键安装,不成功,提示这个inf文件没有什么可安装的项目之类的。
4、在设备管理器中,找到设备,强制安装,可以显示出设备名称,这时候安装,则“类别安装程序拒绝安装或升级此设备的请求”

   现在菜鸟先去解决那“类别安装程序拒绝安装或升级此设备的请求”的问题去啦~

    
 
alwaysrun
驱动小牛
驱动小牛
  • 注册日期2006-06-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1059分
  • 威望752点
  • 贡献值1点
  • 好评度98点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-12-07 14:18
继续了。。。。。。。。。。。。
一颗平常的心!
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-12-10 09:16
菜鸟郁闷的一塌糊涂。
那个什么类别安装程序拒绝的问题,周五搞了一天,也没搞清楚到底哪里出了问题,是我的sys本身编译的不对,还是inf文件有问题?
因为使用的是2003SDK,据同事说他在XP下和2003下用这个方法都没问题,而且我的inf文件也是照他的写的,那么可能是这样做在VISTA下不行?
于是我又搞了一个64bit的XP,试着安装了一下,也是这个样子,安装不成功。在DriverEntry下加了一些调试信息,安装的时候没进入DriverEntry啊?怎么回事哩?
今天继续搞这个问题。。。
如果还是搞不出来,我试着自己改下注册表试试?反正所谓安装,不就是copy几个文件,注册几个东西嘛,纯手工安装下试试!
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-12-11 15:42
菜鸟今天太开心了,哈哈!
今天仔细检查了inf文件,发现了某个地方不太合适,改,重新安装,哈哈,没有完全成功,设备前显示一个感叹号。我怀疑是数字签名的问题,重新启动系统,F8,改成什么允许没有签名过的驱动,等系统起来一看,哈哈,设备装好了!我用了一下,正常啊!
具体功能还需要仔细测试,不过,挺艰难的一步终于过去了。开心啊!
虽然是用的最最简单的方法,虽然DLL什么的,都是32bit的,但是,终于有了这么一点成果,作为一只菜鸟,不激动是不可能的!

菜鸟接下来要
1、好好测试一下设备功能
2、在这里看到大侠们说,64bit的Vista系统,数字签名是绕不过去的,我总不能每次叫客户都F8去改启动选项呀。于是跟销售同事说得解决这问题。他们说,具体要怎么买怎么做,要我具体说明一下,他们去操作。可我根本不知道数字签名是怎么一回事,还得仔细研究研究。
focusbh99
驱动牛犊
驱动牛犊
  • 注册日期2007-07-04
  • 最后登录2010-01-25
  • 粉丝0
  • 关注0
  • 积分472分
  • 威望68点
  • 贡献值0点
  • 好评度47点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-12-12 16:18
楼主的经验对于我很重要,谢谢!!
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-12-13 12:51
楼上的同学,谢谢顶贴哈。有一点点你可以学到的地方,我就很开心啦!我写的不对的,你也帮我指出来呀。
这几天我一直在研究数字签名以及购买什么证书的事情。
证书买好,就可以制作数字签名啦。
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-12-13 12:57
啊,原来你也在折腾那个证书的事情,咱俩交流一下哈!
能不能加我msn啊:mengjin0321@hotmail.com
xiexiantao
驱动牛犊
驱动牛犊
  • 注册日期2007-04-10
  • 最后登录2010-11-01
  • 粉丝0
  • 关注0
  • 积分181分
  • 威望23点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-12-18 11:46
能够把inf文件内容发出来看看吗
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-12-19 11:20
楼上同学,你inf文件不会写么?抱歉,我不能全部发上来,但是,只要增加NTAMD64这部分,其他不做什么改动就可以了。DDK里有很多例子的。
如果你到了“设备前面有个感叹号”的地步,那说明你是因为没有数字签名的原因,启动时候通过F8修改下启动项,允许没有签名的驱动加载,就可以了。
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-12-19 11:22
目前,证书买好了,是通过一个代理买的Verisign的证书。数字签名也做好了,虽然中间历尽磨难 。现在驱动可以正常使用啦。功能测试也差不多了。就差一个自动安装程序没弄好了。
我的任务可以说快完成了。当然后面还有很多很多事情要做。。。
mengjin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-24
  • 最后登录2010-06-12
  • 粉丝0
  • 关注0
  • 积分335分
  • 威望83点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-12-21 08:27
菜鸟把自动安装程序想的太简单了,5555
原本公司的自动安装程序,是用SetUpdi那一堆函数完成的。针对2k,NT和98,分别提供不同的DLL。我以为稍微改一下,判断系统OS版本的地方,增加一个Vista也就行了。谁知道,设备搜索到了,但是安装却总是不成功。UpdateDriverForPlugAndPlayDevices函数返回FALSE,GetLastError得到的错误代码是0xE0000235。根本查不出是什么错误。
根据在本版学习到的知识,我猜这个错误代码就是ERROR_IN_WOW64。DDK里头说:The calling application is a 32-bit application attempting to execute in a 64-bit environment, which is not allowed.
但是,如何证明呢?哪里有ERROR_IN_WOW64的定义呢?

就算我不去证明,怎么改哩?本版有大侠说,这个函数 64bit的系统也能用,只要调用例程也是64bit的就行。那么我把安装程序编译64bit的版本出来?DLL好编译,但是InstallShield怎么弄个64bit的出来?

又有大侠说,可以用WDK的一个工具什么DPInst,怎么用,我也不知啊。。。

唉,这工作,说浪漫点,如同潮水,有起就有落,有那顺顺利利的一天,就得有磕磕绊绊的一天。说的市侩点,就跟股市差不多,一天涨200点一路高歌冲向6000的日子不是没有,但是动不动来个下跌1百多探底,那你也得受着。。。
我估计,这牛人就好比牛股遇到牛市,我这种菜鸟,就该是10个交易日得调整8天那种。

   
上一页
游客

返回顶部