您的位置:首页 > 编程语言

驱动编程学习杂谈

2015-10-26 14:42 337 查看
当面对一个不熟悉的开发环境,或新基础平台,


先弄明白新环境或平台它是如何工作,它提供哪些功能。

代码也许很复杂,甚至让人一时不能理解,

一般好的代码是简单易懂的。

比如用vs开发windows应用程序,

你就要理解vs的基本功能,比如消息分发机制、各种图形功能等。

阅读一些vs的demo例子程序的代码,能快速找到直观的感觉。

如果java程序员局限于java语言本身,很难写出高质量的实用程序。程序员不仅要掌握编程语言中基础库的函数和类型用法,

还要了解函数和类型的原理。即便是源码库,比如STL,

也好明白代码实现才可以灵活自如的用好库(比如STL中的各种容器数据结构、迭代器或算法)

对于程序员,系统软件是操作系统自己或者依附操作系统为应用提供服务的软件。系统软件会跟硬件直接打交道,程序员可以按照自己的想法来通过系统软件来控制硬件,

理解并掌握操作系统的运行机制是系统程序员写出正确、高效软件的基础。

写windows驱动是最能考验程序员能力的。

内核驱动程序的代码量一般不大,

但驱动框架的函数或一行代码都蕴含复杂逻辑、隐式要求假设。

即使程序员写自定义的代码,也要考虑与环境有关的因素,比如代码是不是可被中断、是不是能重入,或者引用的内存是不是被交换到外存。

应用中地址空间、内存管理、异常处理和多线程并发等,

在驱动中可能理解起来不一样。

常用的c运行时库函数基本不适用于驱动,

驱动程序员要面对全新底层环境和支持平台。

要写出正确运行的驱动,程序员不仅要明白目标设备或功能,

还要掌握Windows内核是怎么跟驱动打交道的,内核中各种管理和运行机制,比如内存管理、线程调度和并发控制。

当Windows内核驱动被加载到内核启动后,它就成了内核的一部分,驱动接口函数被内核调用,这是windows驱动工作方式。

微软定义了WDM来规定驱动结构,内核与WDM怎么打交道。

WDM定义了I/O管理器、PnP即插即用、电源管理和WMI。

要写出一个完全支持WDM的驱动,需要明白WDM涉及的内核组件。

在某一方面,驱动调试等同内核调试。

对一些逻辑错误,内核调试器也无能为力。

因此,内核驱动要尽量精简,设计软件时,

尽量把功能代码放到应用里,驱动保留必要功能。

为了方便开发驱动,微软定义了一个驱动框架WDF,

分内核部分为KMDF(Kernel-Mode Driver Framework)和UMDF。

KMDF实际是个库,它封装WDM的逻辑。

KMDF部分简化内核驱动开发,没有降低内核驱动复杂性,

需要程序员更努力学习。

总之,你要明白os与自己软件打交道的各个部件,

也要知道依赖的开发工具做了哪些。

系统程序员往往需要经历很长的学习曲线。

台上一分钟,台下十年功。

要想得心应手的弄好windows驱动,那就要付出额外的学习努力。

掌握好方法后,接下去就挥洒汗水,积累吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: