用嵌入式Linux硬件平台下的软件开发来说,我们大可将编程分为三种,分别为裸机编程、Linux驱动编程以及 Linux应用编程。
裸机编程:
一般把没有操作系统支持的编程环境称为裸机编程环境,譬如单片机上的编程开发,编写直接在硬件上运行的程序,没有操作系统支持
驱动编程:
狭义上 Linux驱动编程指的是基于内核驱动框架开发驱动程序, 驱动开发工程师通过调用 Linux内核提供的接口完成设备驱动的注册,驱动程序负责底层硬件操作相关逻辑
应用编程(系统编程):
是基于 Linux操作系统的应用编程,在应用程序中通过调用系统调用 API 完成应用程序的功能和逻辑,应用程序运行于操作系统之上。
操作系统下面有两种不同的状态:
常在操作系统下有两种不同的状态:内核态和用户态,应用程序运行在用户态、而内核则运行在内核态。他们直接是靠系统调用API来交互的。
内核提供了一系列的服务、资源、支持一系列功能,应用程序通过调用系统调用 API 函数来使用内核提供的服务、资源以及各种各样的功能。
总结:
应用程序与驱动程序是分隔、分离的,它们单独编译,它们并不是整合在一起的,应用程序运行在操作系统之上,有操作系统支持,应用程序处于用户态,而驱动程序处于内核态,与纯粹的裸机程序存在着质的区别。最重要的一点驱动属于内核的一部分



