有个问题想请教下:我有两个BSP,其中有个驱动,注册表的配置信息和驱动的源代码都是一样的,是网卡驱动。但编译的结果是:一个可以加载(开机加载,不是流驱动),而另外一个BSP的NK.BIN烧进去后不可以加载。这个问题一般是怎么造成的?
【☆☆是不是在OAL代码里面的硬件初始化、中断之类的操作出现了问题?】
---------------------
我是CE6.0,
-----------
驱动的加载都是需要一个进程来来实现,不管是Device.exe,还是其它的进程,他们都是先被系统加载,然后,再去根据注册表的信息来加载相应的驱动,
【问题:】一般的如Device.exe之类的进程是不是不用管它,只要晓得这个黑匣子的作用就可以了?
【问题:】//从板子上电--到-->某一个驱动被加载//
{BootLoader |OAL |注册表| 驱动DLL } 间大至是怎麽样的调用关系? 我看DNW上的打印信息,刚开是调用OAL里面的OEMinit(),之后就到了要开机加载的驱动的的打印信息了,这一步是怎么实现的?
-----------------------
wince6.0和wince5.0的驱动差距不是很大。我看wince6.0的书,有一本。研华工程师吧,李大为出的。你找来看看。
至于什么OAL都很清楚,网上也很多,这些和wince5.0基本一致。
device是系统进程,只要你选择的不是tiny core的,基本上都会有这个进程,这个你不用管它,系统会处理好一切。
注册表里那些描述设备的项,在系统系统的时候,会被查询,然后系统自动启动设备驱动。
谢谢楼上两位
--------------
可是同样的驱动,代码没有做如何更改,注册表也是一样的,都是CE6.0下的,
只是CPU变了。
{为什么一个可以开机加载,而另外一个却不可以呢?所以我才想:是不是从宿主进程读注册表信息到驱动的加载之间还有其它环节,而且在这些环节可能出现了问题?}
有没有可能是中断的处理出现问题?
----------------
现在没了思路,高人指下方向,我好做个研究!
加载不成功,很可能是驱动XXX_Init函数的问题,这个函数在驱动加载时候执行。你在里面放点打印信息,看看死在哪里了。
我的4.2的驱动放到5.0要改动很多的。申请中断等等都有很大差别的。
不同的CPU那差得东西就多了,先看看驱动被加载了没有,如果是加载的过程中出错了,那慢慢改那些跟CPU相关的东西吧
如果没有加载,那就应该还是别的问题了
驱动是以DLL形式存在的,DLL的入口一般先是DllEntry(),(应该是这样把)
-----
我在这个里面放了打印信息,结果没有任何东西如来,那就可以说这个驱动是没有被加载喽?
引用: 引用 6 楼 YZZ2086 的回复:
驱动是以DLL形式存在的,DLL的入口一般先是DllEntry(),(应该是这样把)
-----
我在这个里面放了打印信息,结果没有任何东西如来,那就可以说这个驱动是没有被加载喽?
没有加载啊。哈哈。
《WINDOWS CE 工程实践完全解析》确实不错 李大为出品
我会买的谢谢 gooogleman 和menfolk_odon
引用: 引用 7 楼 gooogleman 的回复:
引用 6 楼 YZZ2086 的回复:
驱动是以DLL形式存在的,DLL的入口一般先是DllEntry(),(应该是这样把)
-----
我在这个里面放了打印信息,结果没有任何东西如来,那就可以说这个驱动是没有被加载喽?
没有加载啊。哈哈。
======================
既然这样问题一般处哪里?
从宿主进程读取注册表信息---到---->驱动被加载,之间还有那些环节?
我现在在研究中断,有没有可能是这个出现问题了
你的编译方法是否正确?——》查看nk.bin所在目录的platform.reg/bib文件是否是正常的——》使用命令行viewbin -t NK.bin 看是否有你的DLL?——》使用同步软件查看注册表,看有没有正常,最老土的方法是在 XXX_Init上加打印信息,如果没有,那么你的问题就慢慢解决吧。基本是以上几个步骤。
1、编译方法应该是没有问题的!刚开始都是BULID 后面只改BSP的话就是build current bsp AND SUBPROJECTS|||
2、.REG/.BIB 都是和成功的那个bsp是一样的!应该是没的问题的!
3、我用viewbin -t NK.bin 看了有我的DLL,
4、用远程注册表编辑器看我的驱动没有被加载!
5、打印信息我在DLLENTRY里面加了都没的!
--------------------------------------------------------
这个问题还的找啊!
编译的时候点上 clean before build
你仔细点,机器一般不会错,只有人疏忽的。
我把我的驱动放在
HIVE BOOT SECTION~; END HIVE BOOT SECTION 之间
--------
驱动就可以正常加载了,我是HIVE类型的注册表
===============================
【继续发问:】
从宿主进程读注册表信息到驱动的加载之间还有什么环节,OAL 在加载驱动、系统和设备间通信间等方面是什么作用?
{是不是在完成最初的初始化后,在与设备间通信时就主要为?中断的操作? 比如网口:是不是当我每次重新设置过IP等配置后,系统都会根据IRQ返回一个SYSINTR,并根据该SYSINTR,设置一个事件,然后驱动扑捉到该事件,进行后续的处理?如果一切顺利我的设备就可以按目的工作了?}
你的问题,太多。
我从简了。这个ARM 跑wince上和裸奔很大不同就是多线程,多任务了。但是他的中断怎么处理还是和单片机,以及ARM裸奔是一样的。所以是一个道理。初始化好中断后,就等着硬件中断产生,产生后就用线程来处理。
哈哈!
只不过是想把问题描述的清除的!
--------
要的不是答案,只是点一点,谢谢了! 有点思路也好搞些
那些什么OAL,网上有很多说明,最好找些书看看。我就懒得打了。貌似我的博客有不少这些东西,以前我一边学习一边写博客的。看过代码什么都明白了,别人说的未必很深入。