1.概念
1.发展历史
Intel 单片机
ARM (Advanced RISC Machines)微处理器:
(1)基于RISC技术的ARM处理器是32位嵌入式处理器的典型代表
(2)ARM公司1991年成立于英国剑桥
(3)主要出售芯片设计技术的产权
(4)约占据了32为RISC微处理器75%以上的市场
ARM 处理器命名规则;
1.概述
嵌入式系统软件的一般结构
硬件:ARM CPU 内存+I/O
驱动层:最典型的就是BOOTLOAD,以及底层封装,底层封装是很重要的一部分,屏蔽了硬件的细节
操作系统层:核心是文件系统、内核
中间件层:有些应用是必须的,不是必须的部分可以直接进入到应用层
嵌入式操作系统定义:嵌入式操作系统EOS(Embedded Operating System)或者称实时操作系统RTOS(Real Time Operation Systerm),通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器Browser等。主流的嵌入式操作系统如下表。
嵌入式操作系统特点:(1)可装卸性(2)强实时性(3)统一的接口
(4)操作方便、简单、友好的GUI图形界面(5)提供强大的网络功能,支持TCO/IP协议(6)强稳定性,弱交互性(7)固化代码,嵌入式系统一般是固化到flash,用户很少去改变它,或者更新,然而常用的PC端的系统可以安装在硬盘上(8)具有良好的移植性
2.嵌入式Linux系统
定义:linux 是一个类Unix(Unix-like)的、免费的,开源的,符合POSIX(Portable Operating System Interface Standard)标准规范的操作系统。
POSIX标准定义:操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一些列API标准总称。
嵌入式Linux内核:为特殊硬件匹配置、或为了支持特别的应用而经过特别的裁剪修改过的Linux内核,通常具有不同与工作站或服务器的内核配置
嵌入式Linux系统:基于Linux内核的嵌入式系统
嵌入式Linux发行套件:(1)开发嵌入式Linux系统的平台(2)各种为了在嵌入式系统汇总使用而裁剪过的应用软件
Linux版本号说明:
嵌入式Linux系统结构图
Linux内核子系统
内核子系统中最核心的是进程调度,嵌入式Linux的实时性能改造与进程调度有很大关系,,调度策略的算法直接关系到系统的实时性能。
嵌入式Linux中文件系统的结构
嵌入式Linux应用开发体系:
Linux操作系统实时性改造
实时系统定义:对外部事件及时响应的系统;在接到数据的同时,能够在规定的时间内给予响应,以足够快的速度处理,及时将处理结果送出;嵌入式系统多是实时系统
区分非实时、软实时、硬实时三个概念:不是以速度为标准,是一个确定性的概念。
确定性的含义:任务的最后时限才是确定性的含义
实时操作系统的特征:(1)高精度计时系统(2)多级中断机制(3)实时调度机制——包括两个方面;一是在调度策略和算法上保证优先调度史诗任务二是建立更多的“安全切换”时间点,保证及时调度实时任务
普通的Linux系统:时间精度10ms,达不到实时系统的微妙级;中断是内核临界区域关中断;实时调度机制在常规Linux下是固定的,为了满足实时性必须可变的优先级调度。
RTLinux :(Real Time Linux)
定义:利用Linux开发的面向实时和嵌入式应用的操作系统;采用独创的双内核方式和中断虚拟化技术实现Linux实时化
双内核结构
RTLinux设计原则
基于以上实时系统设计原则,想得到实时系统,要解决Linux系统三个问题,
中断虚拟化
实时调度:
计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间。如果系统的时间约束条件得不到满足将会发生系统出错;在RTLinux 中,允许用户编写自己的调度器代码,并把其实现为一个可装载的内核模块;使得可以试验不同的调度策略和算法,以找到一个最适合自己应用的调度方式。
RTLinux 实现的两种调度器:
(1)基于优先级的占先式调度器
(2)最早期限有限算法EDF(Earliest Deadline First) 没有静态优先级,二是最靠近最终期限的任务先执行
计时:Linux内核使用三种时钟
(1)实时时钟
(2)时间标记计数器
(3)可编程间隔定时器PIT(Programmable Interval Timer)–内核编程,以固定的。预先设定的频率发出中断,用于Linux中任务调度。Linux中,中断频率被设定为100Hz,即大约每10ms产生一次定时中断。在RTLinux 中采用单处罚时钟中断(one-shot)来提高计时的 精度,可以使中断调度得到1微妙左右的精度。
GCC的编译过程:与处理、编译、汇编、链接
GCC警告提示功能:GCC在编译过程中检查出错误的话,会中止编译。但检测到警告是能够继续编译生成可执行程序的,警告只是针对程序结构的诊断信息,不能说明程序由一定的错误,二是存在风险,或者可能有错误。
在Linux下的库文件分为两大类,分别是动态链接库(常以.so结尾)和静态链接库(通常以.a结尾);
默认情况下,GCC在连接时优先使用动态链接库,只有当动态链接库不存在是才考虑使用静态链接库;
若想直接使用静态链接库在编译时加上-static选项,强制使用静态链接库
GDB调试器
GDB 命令主要分为以下几类:
(1)工作环境相关命令
(2)设置断点与恢复命令
(3)源代码查看命令
(4)查看运行数据相关命令及修改运行参数命令
1. Linux设备驱动技术
(1)Linux设备驱动程序是操作系统内核和设备硬件之间的接口;
(2)设备驱动为应用程序屏蔽了硬件的细节
(3)在应用程序看来,硬件设备知识一个设备文件,可以像操作普通文件一样对硬件设备进行操作
(4)设备驱动程序由一些私有数据和一组函数组成,他是Linux内核的一部分。
设备驱动程序组成部分:
(1)初始化配置程序:初始化配置程序检测硬件存在与否,能不能正常工作,在可以正常工作的前提下初始化硬件
(2)I/O程序:用户控件函数通过I/O程序完成数据的通信,应用程序进行的系统条用由该部分程序完成。
(3)中断服务程序 中断服务程序是硬件产生中断后被内核调用的一段程序代码
中断处理
在Linux驱动程序中,中断是非常重要的一部分。Linux内核吧中断服务程序分为两个部分:上半部(top half)和下半部(bottom half)。上半部被设计的短小精悍,大量复杂好使的工作由下半部去处理,以求得系统更高的吞吐量
top half 和 bottom half 最大的不同是下半部是可中断的,而上半部是不可中断的,下半部相对来说并不是非常紧急的,通常还是比较耗时的,因此由系统自行安排运行实际,不断在中断服务上下文中执行
并发控制
(1)并发:指两个以上执行单元同时。并行地执行
(2)互斥访问:指同一时刻有且只有一个执行单元可以访问共享资源
(3)临界区:指访问共享资源的程序代码
避免竞争必须互斥地访问共享资源,用某种互斥机制保护临界区
一般而言,自旋锁是和于保持时间非常短的情况,它可以在任何上下文使用;信号量适用于保持时间较长的情况,只能在进程上下文使用
如果被保护的共享资源需要在中断上下文访问,(包括底半部即中断处理句柄和顶半部即软中断),就必须使用自旋锁。
2. 设备驱动程序
设备驱动程序设计原则:设备驱动程序的功能在于提供机制而不是提供策略
机制指的是需要提供什么功能;策略指的是如何使用这些功能
Linux设备驱动程序功能
预定义和必要的头文件
驱动程序编译方式
有两种(1)编译进内核(kernel)
(2)编译成模块)(modules)
通常一个应用程序是从头到尾完成一个任务,而模块则是为了以后处理某些请求而注册自己,完成这个任务后它的“主”函数就立即中止了。
设备管理: