随着通信、电子物联网的飞速发展,每天都有各种各样的芯片被研发出来,而要想知道这些芯片怎样工作以及工作后的作用,则离不开软硬件工程师的努力,任何一个计算机系统都是系统中软硬件协作的结果,没有硬件的软件是空中楼阁,没有软件的硬件是一堆废铁,硬件是软件运行的基础。软件上所有操作最终都会被硬件以硬件工作的时序进行工作,硬件建造出来是固定的,而软件则很灵活,可以根据场景适应多种应用,两者相辅相成,缺一不可。
设备驱动,顾名思义就是"驱使硬件设备行动",设备驱动直接与硬件打交道,按照硬件datasheet要求的方式上下电、读写寄存器、中断处理、通信、DMA搬运等等。驱动充当着硬件和应用之间的桥梁,所以驱动有时候既要和硬件工程师沟通设备的运行方式,又要和应用工程师讨论调用方法。
一、无操作系统
在早期的软件中,程序不在复杂的情况下工作比较单一,控制着不太复杂的系统,例如食堂刷卡机、公交刷卡机、微波炉、冰箱等,功能都比较简单,并不需要多任务调度、文件系统、内存管理等复杂功能,单任务架构完全可以很好地支持它们的工作。可能一个无限循环加上按键、中断的处理就能完成功能设计。在这种情况下,应用和驱动分割的不是那么清楚,一般可能就是一个人完成了应用和驱动,每种芯片可能根据工作方式写了一组接口,比如A芯片读寄存器AreadReg,B芯片读寄存器BreadReg,应用需要根据芯片使用进行接口调用,在这种情况下,设备驱动的接口被直接提交给了应用软件工程师, 应用软件没有跨越任何层次就直接访问了设备驱动的接口。 设备驱动包含的接口函数也与硬件的功能直接吻合, 没有任何附加功能。甚至把应用和驱动写在同一文件中,不符合软件设计的高内聚低耦合的要求。
二、有操作系统
不管有无操作系统,设备驱动都是必须的,有了操作系统后,驱动程序需要融入到内核,应用和驱动直接的纽带是固定的,驱动工程师需要按照操作系统规定的接口进行设计,所以存在操作系统时,驱动变成了硬件和内核直接的桥梁,它对外呈现的是统一的接口,例如:write()、read()、驱动程序有Aread()、Bread(),操作系统会根据实际使用的设备调用相应的驱动,不用每次都重新匹配,应用工程师也完全不必关心硬件变化。
有了操作系统后,驱动会变得稍显复杂,但是和它能带来的好处而且无足轻重,不用关心内存管理、文件系统管理等等,更加高效、快速、方便的管理嵌入式硬件的有限资源,能完成很复杂的的控制,并且对于应用开发来说十分方便。
当然,要根据实际情况去选择是否需要操作系统,比较简单的单任务环境中,就完全没有必要了。
来源:https://blog.csdn.net/q2519008/article/details/102776208