一般工程师对驱动程序都有莫名的恐惧,其实嵌入式系统的红运程序开发比在Windows或Linux上简单得多。
有在PC上写过产品驱动程序的吗?估计不多,在Windows和Linux上写驱动程序,除了必须了解新装置的硬件特性,把控制硬件的程序尽快完成外,大部分时间都在设法让驱动程序符合Windows或Linux的规定,简单地说,就算硬件的控制程序是正确无误的,如果不符合操作系统的规定,这个驱动还是完全跑不起来。
Windows或Linux的开发环境已经有稳定的操作系统,要增加对新硬件装置的支持,所以驱动程序自然要按照操作系统的规定,可是偏偏Windows和Linux是通用型的操作系统,它们的驱动程序的架构又大又复杂,若不照着它们的规定去做是不行的。
嵌入式系统开发的状况千奇百怪,在现有的系统上增加硬件装置当然也有可能,但有一个观念是不会变化,已上市的消费性电子产品需要扩充硬设备的机会几乎是没有的,所以设计一个可扩充的驱动程序架构意义不大,而且嵌入式系统中的资源是很宝贵的,把架构设计的很复杂完全不合逻辑,不管先有系统还是先有驱动程序,嵌入式系统的驱动程序架构绝对要清晰简单,一般来说最多就是两层
1.drivet层:真正驱动硬件装置的程序,上层的程序不应该直接调用到这层的函数;
2.API层:根据系统或应用程序的需求,将driver层包装成较简单的接口,这应该是上层程序与硬件沟通的唯一通道。
简单地说,驱动程序就是要设法隐藏硬件的特性,例如设定CPU状态缓存器中的某个bit可以禁止中断的产生,但只有用汇编语言才能操作PSR,驱动程序工程师不但要负责确认程序真的有禁止中断的效果,而且还要将其包装成API,就像一般的C语言函数一样,让上层程序可以直接调用,这样还有另一个好处,可以把机器相关与机器无关的程序代码分开,将来如果要换平台,只要驱动程序的API相同,系统程序与应用程序应该就可以重复使用。 |