硬件与软件的关系
在任何一个计算机系统中,大至服务器、PC机、小至手机、mp3/mp4播放器,无论是复杂的大型服务器系统还是一个简单的流水灯单片机系统,都离不开驱动程序的身影,没有硬件的软件是空中楼阁,没有软件的硬件只是一堆废铁,硬件是底层的基础,是所有软件得以运行的平台,代码最终会落实到硬件上的逻辑组合。但是硬件与软件之间存在一个驳论:为了快速、优质的完成软件功能设计,应用程序工程师不想也不愿关心硬件,而硬件工程师也很难有功夫去处理软件开发中的一些应用。驱动程序
例如软件工程师在调用printf的时候,不许也不用关心信息到底是通过什么样的处理,走过哪些通路显示在该显示的地方,硬件工程师在写完了一个4*4键盘驱动后,无需也不必管应用程序在获得键值后做哪些处理及操作。Linux操作系统
但是在有操作系统的情况下,此问题就会被放大:硬件来自不同的公司、千变万化,全世界每天都会有大量的新芯片被生产,大量的电路板被设计出来,如果没有一个很好的统一标准去规范这一程序,操作系统就会被设计的非常冗余,效率会非常低。Linux软件工程师
目前,Linux软件工程师大致可分为两个层次:1.Linux应用软件工程师(ApplicationSoftwareEngineer)——主要利用C库函数和LinuxAPI进行应用软件的编写。从事这方面的开发工作,主要需要学习:符合linuxposix标准的API函数及系统调用
linux的多任务编程技巧:多进程、多线程、进程间通信、多任务之间的同步互斥等
嵌入式数据库的学习
UI编程:QT、miniGUI等
设备驱动属于Linux内核的部分,编写Linux设备驱动需要有一定的Linux操作系统内核基础,需要了解部分linux内核的工作机制与系统组成
编写Linux设备驱动需要对硬件的原理有相当的了解,大多数情况下我们是针对一个特定的嵌入式硬件平台编写驱动的,例如:针对特定的主机平台:可能是三星的、,也可能是atmel的,或者飞思卡尔的等等
Linux设备驱动中广泛涉及到多进程并发的同步、互斥等控制,容易出现bug,因为linux本身是一个多任务的工作环境,不可避免的会出现在同一时刻对同一设备发生并发操作
由于属于内核的一部分,Linux设备驱动的调试也相当复杂。linux设备驱动没有一个很好的IDE环境进行单步、变量查看等调试辅助工具,inux驱动跟linux内核工作在同一层次,一旦发生问题,很容易造成内核的整体崩溃。
↓↓↓↓点击阅读原文,