从前天开始学习驱动,感觉不到驱动的精髓。不过随着时间的流逝我将搞定他。
因为我不是特别动如果我写的不到位的地方希望大家指正,共同进步 。
设备驱动
驱动框架:
驱动和普通程序的区别在于他是事件驱动 的,也就是说他不是像普通程序那样从main()执行,从main()结束。因为驱动是以模块的形式“融合”入系统的,系统是不会结束的所以驱动也谈不上“结束”,但是它是有返回的。正是由于它是事件驱动所以,他也不用main()。
驱动程序的特色:
1.事件驱动
2.“融合”入内核
3.不会结束
那么,这些特色会在以后的学习中体现出来。
首先是我解释一下“事件驱动”:
这个词语可以用,事件使能去解释,这是为了避免碰上“驱动”这个词语,我们写的是驱动为什么还在说事件驱动呢?如果你接触过面向对象编程听这个词语应该很耳熟,其实事件驱动在C语言就可以实现了,根本不用更高级语言。那么,事件驱动的本质是“轮询”,就是常说的“死循环”,这个循环是内核在做的操作。通过分时响应各各进程让我们可以同时进行多个应用。这样你看电脑的时候才感觉它不是“死”的。
再说“融入”:
这个词语是我自己发明的,之所以这样描述是因为我们将自己写好的“模块”(驱动),插入内核后,不会对内核效率造成影响。其实这一点,可以用“事件驱动”去理解,为什么呢?“驱动程序”是事件使能的,没事儿不会执行,不会被加到加载的流程中。所以,它对效率的破坏很低。
不会结束:
这个概念比较复杂,在这里,有三层含义,一是,驱动本身是不执行的所以说谈不上结束,二是,它是[被调用,返回]的过程,而不是一定要执行的过程。三是,不会结束也就是不会被重新生成代码。
第三层含义是这样的:
这个程序代码段(驱动)是不会死亡的,所以也不用再生。
例如:
我们有一个程序a.out在我们的主目录中,现有两个终端一起执行她,那么系统会分别复制2份这个程序的代码段到内存中,交给两个终端执行,无论是程序中的局部变量,还是,全局变量,都互相不一致。
而在驱动中,无论有多少用户调用某一设备时,都将产生,多个进程,但是每个进程的全局数据区保持一致性。
这些是我现在从学习驱动开始的感悟,希望对大家有所帮助。我会继续将具体的操作一点一点的写出来。