对win10驱动开发环境的理解(一)
学习一个东西,对于初学者来说,总是希望一开始通过简单的操作,能看到一个直观的结果。开始学习C的时候,开始并不知道C能做些什么事情,但是通过显示“Hello World”,首先直观知道了这个东西可以打印出我们需要的东西。学习Verilog也是类似,或者说学习FPGA的也是类似。对Verilog,也可以先通过仿真器在屏幕上打印Hello Verilog的字样,来获得直观的感受。学习FPGA,除了利用verilog在仿真环境下打印Hello外,还可以在演示板上进行操作,比如演示板带LCD或者LED屏的话,可以显示出Hello World的字样。当然,对于FPGA学习,更常用的方式在演示板上“跑个马灯”:就是让板子上的LED灯循环的亮灭。
但是驱动略微有点不同。一开始着手学习驱动开发时,就在想一个问题,如何在开发驱动过程中,首先用开发的驱动程序打印“Hello world”?
回想自己装机过程中,是怎么处理“驱动”的。以前还会想去查查自己电脑是什么配置,然后到对应网站上去下载相应驱动安装程序。这时获得的驱动程序,多数都是可执行文件,只要在windows下双击,就可以安装驱动程序了。有些时候有新的驱动程序出来后,会获得类似于.sys的文件,获取后放在电脑上某个位置,再通过“设备管理器”找到该设备,就可以通过“更新驱动程序§”来安装新的驱动程序:
不过后来有了比如驱动精灵、驱动人生这些软件后,连这些操作都不需要了。直接在软件中进行“检测”,就可以知道哪些设备可以更新新的驱动程序了。新的驱动程序的安装也是“Push Button”的事。所以大家对驱动,似乎关注越来越少了。
关于驱动程序的理解,最开始的时候,根据我自己的体会,认为驱动本质上就是一种中间软件。这是基于以前对系统“层次化”理解的进一步拓展。要开发一个系统,有硬件,有软件。软件需要访问硬件,进行系统配置、数据读取。但是软件人员不一定有机会对硬件做深入了解,其实也没有这个必要。所以这时最好的方式就是硬件人员给软件人员提供一个关于硬件操作的“基本函数”,以比如API的方式提供。但是硬件人员又不一定能对软件有深入了解,所以就需要一个人来做这种衔接。我想这该是驱动产生的原因,所以,似乎可以简单把驱动理解为硬件的“接口函数”。有了驱动后,或者有了硬件的接口函数后,软件人员通过调用这些接口函数,就可以访问硬件的“资源”了。
这样看,开发驱动,就一定要和硬件打交道。要在硬件上有“直观的感受”,不是简单的事情。回想C语言和Verilog的学习,都是在“纯软件”环境下打印“Hello World”的。学习FPGA,需要在硬件环境下“打印”“Hello World”,就必须得要有显示屏。
因此貌似学习驱动开发,不太好显示“Hello World”。
任何设计,都要进行验证、测试。开发驱动程序也不例外。把驱动软件当成硬件的一个接口函数的话,那么能不能设计一个驱动程序,其功能就是在访问该驱动函数(相当于软件去访问硬件资源)时,返回的值就是“HelloWorld”? 貌似这种方式可行。