linux 设备驱动开发基本概念

        任何一个计算机系统的运转都是系统中软硬件共同努力的结果, 没有硬件的软件是空中楼阁, 而没有软件的硬件则只是一堆废铁。 硬件是底层基础, 是所有软件得以运行的平台, 代码最终会落实为硬件上的组合逻辑与时序逻辑; 软件则实现了具体应用, 它按照各种不同的业务需求而设计, 并完成用户的最终诉求。 硬件较固定, 软件则很灵活, 可以适应各种复杂多变的应用。 因此, 计算机系统的软硬件相互成就了对方。 驱动程序负责硬件和应用软件之间的沟通, 而驱动工程师则负责硬件工程师和应用软件工程师之间的沟通, 那么从字面意思来看, 设备驱动最通俗的解释就是“驱使硬件设备行动” 。 在学习驱动之前, 我们先了解一些基础概念。
 

概念一 裸机编程或单片机开发
        裸机编程, 顾名思义, 就是直接在硬件上编程写代码, 或者说编写直接在硬件上运行的程序, 没有操作系统的支持。 一般我们把没有操作系统的编程环境, 称为裸机编程环境, 比如在单片机上编程。 通过串口直接将程序下载到单片机芯片内部的 Flash 中, 单片机运行时, 直接调用我们编程的程序。 这时, 我们编写的程序一般都有一个 while 1 的死循环存在, 这样程序才能一直保持运行。 裸机编程现在主要是正对低端的嵌入式系统, 如 SCM(single chip machine) 、 各式 MCU、 DSP 等。 当然, 编写 PC 的 bootloader 肯定也属于裸机编程。

         单片机是一种集成电路芯片, 是用大规模集成电路技术通过编程数据处理能力的中央处理器 CPU、 随机存储器 RAM、 只读存储器 ROM、 多种 I/O 口和中断系统、 定时器/计时器等功能,这其中还包括显示驱动电路、 脉宽调制电路、 模拟多路转换器、 A/D 转换器等功能等集成到一块小芯片上。单片机开发包括: 程序设计(PC 端软件编程) , 程序送往执行(将编程好的软件下载到单片机, 需要编程器或者下载线) , 单片机系统的设计(硬件上设计你需要的任务的执行机构, 如控制开关, 温度检测,红外传输等等, 都是根据你的所需, 然后在选择对应的硬件器件)。
 

概念二 linux 系统开发

        基于 linux 操作系统来开发我们的产品叫 linux 系统开发。此开发的编程方式和裸机开发的编程方式是截然不同的。 裸机开发的编程方式是直接运行在硬件之上, 不与任何操作系统关联。 操作系统的存在势必要求设备驱动附加更多的代码和功能, 把单一的“驱使硬件设备行动” 变成了操作系统内与硬件交互的模块,它对外呈现为操作系统的 API, 不再给应用软件工程师直接提供接口。 由此可见, 当系统中存在操作系统的时候, 驱动变成了连接硬件和内核的桥梁。
        linux 系统开发框架如下图所示, 最上层的是应用软件, 下面是操作系统, 再下面是驱动程序, 最后是我们的硬件。 如果在硬件上跑操作系统, 驱动程序是位于硬件和操作系统中间的, 是连接操作系统和硬件之间的桥梁。
        这里拿 linux 操作系统给大家举个例子, linux 系统可以跑到不同的硬件上面如 pc 机或者 arm 开发板上面。 如果 linux 操作系统跑到 PC 机上, 那么驱动就要适配 PC 机; 如果 linux 操作系统跑到 arm 开发板上面,那么驱动就要适配 arm 开发板; 所以说不同的硬件架构都可以跑 linux, 但是它的驱动程序是不同的, 那么linux 操作系统源码都是一样的, 唯一不一样的就是驱动程序了。 也就是说同一个操作系统可以跑到不同的硬件上面, 但是驱动程序是有差异的, 因为驱动程序是操作系统和硬件连接的一个桥梁。
linux 设备驱动开发基本概念_第1张图片

概念三 系统移植 linux 驱动移植
        移植是说同样的一个 linux 操作系统 , 我们可以跑到不同的硬件上面, 我们把操作系统移植到不同的硬件上面, 这个过程叫做移植。 设备驱动移植步骤, 如下图所示:
 linux 设备驱动开发基本概念_第2张图片

概念四 应用软件
        在操作系统上面有应用软件, 应用软件程序的执行是依赖于操作系统的, 应用程序需要调用 linux 操作系统的库函数来实现, 也就是说, 应用软件的程序会调用 linux 操作系统的函数来完成对硬件的操作, 那么应用程序是不能对硬件直接进行操作的。
概念五 linux 系统架构优点
        linux 系统开发架构和我们裸机的架构是不同的, 架构相比于裸机架构是非常复杂了, 那么我们使用这个架构都有什么好处呢?
1 有了系统的架构后, 开发起来就非常容易了, 因为它有自己的框架, 这种框架都是非常成熟的框架,我们直接按照框架开发就可以了, 框架给我们提供了很多现成的功能。
2 这个框架让我们的系统变得更加安全, 因为我们的应用软件不能直接对硬件进行操作, 它要借助操作系统来对硬件进行操作。 如果应用软件有好几个, 假如其中的一个应用软件奔溃了, 它不会影响我们整个系统的运行, 不会造成系统的死机, 这样就会让系统更加安全, 出问题的概率变得更小了。
 

你可能感兴趣的:(嵌入式,驱动开发,linux)