让驱动自己被加载

来源:互联网 发布:node npm init 编辑:程序博客网 时间:2024/05/22 13:39

接触wince一段时间了,如果从摸这个算起,差不多都两年时间了,中间断断续续摸了linux和u/cos,接触的大都是应用方面的东东。今天写了个简单的gpio驱动在板上跑了起来,中间费了点周折,现在想想都不值得拿来说了,还是记录下来,作为成长经历吧。

废话不表,说实际内容。

 

第一步,加代码。在$(_TARGETPLATROOT)/SRC/Drivers 目录下新建一文件夹,例如:FirstDrv。然后在此文件夹新建.cpp , .def , .bib, .reg , sources , makefile 六个文件

 

cpp内容:

def内容:

  

bib文件内容:

reg文件内容:

sources文件内容:

makefile文件内容:

 

这步可以用微软CodeClip中的DrvWiz.exe直接生成这些文件,我们只需要修改.cpp就可以了,事实上这样做相当方便

 

第二步,编译。在Drivers目录下修改dir文件,添加 FirstDrv /,打开PB,在FirstDrv上右击,build Current Project,成功后可以发现在$(_FLATRELEASEDIR)下多了一个文件DriverDemo.dll。

 

第三步,编入内核。

在platform.bib 加入一行:#include "$(_TARGETPLATROOT)/src/Drivers/FirstDrv/DriverDemo.bib"

 

在platform.reg 加入一行:#include "$(_TARGETPLATROOT)/src/Drivers/FirstDrv/DriverDemo.reg"

选择 Build OS----->Make Run-Time Image

完成就OK了。

 

然后把编译好的NK.BIN(nk.rom)烧入板中重启,通过远程工具(Registry Editor或者System Information)就可以观察到DriverDemo.dll已经在运行了。

 

如果不放心,写个应用程序测试下就OK了。

 

写到这里,发现跟标题有点偏了,讲的实际重点好像是在如何写一个驱动。但实际在这个过程中,驱动就已经具备被自动加载的能力了。

系统启动运行NK.exe后,会调用注册表中[HKEY_LOCAL_MACHINE/init]下的一些启动内容,其中Device.exe就在其中被启动。Device.exe通过调用总线枚举器BusEnum.dll,会枚举注册表中[HKEY_LOCAL_MACHINE/Drivers/BuitIn]键下面的内容,我们的DriverDemo.reg正是在[HKEY_LOCAL_MACHINE/Drivers/BuitIn]键的子键DriverDemo下,然后根据"Order"依次加载驱动。

 

原创粉丝点击