0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式 Linux 设计:详细实时  

王英 来源:hdfsf 作者:hdfsf 2022-07-26 10:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

实时系统必须尊重时间限制,以确保其执行具有功能意义。实时操作系统或 RTOS(有时称为实时执行内核)是一个函数库,用于实现计算机系统的时间关键管理和资源分配的规则和策略。RTOS 常用于嵌入式系统

RTOS 为微控制器处理器 (CPU) 提供了一个软件抽象层,具有一组管理 CPU 资源调度和访问的固有功能。简而言之,RTOS的功能可以总结如下:

它确定应用程序中的哪些执行实体应该控制 CPU、以什么顺序以及在放弃对处理器的控制之前允许多长时间。

它管理多个活动之间的内部存储共享。

它管理连接的硬件设备的输入和输出,例如控制器设备的串行端口和 I/O 总线。

它发送有关操作状态和已发生的任何错误的消息。

精心设计的 RTOS(图 1)提供了许多切实的好处,例如:

通过规则和政策为项目奠定坚实的基础,以确保一致性和可重复性。

简化开发过程并提高生产力:丰富的内核服务 (API) 集允许节省编写扩展代码的时间,而系统开销过多,无法完成相同的事情。

对处理器的抽象,而不关注许多硬件细节。

实施可靠的编程系统以成功管理共享同一处理器的多个操作:这使您可以管理对各种处理器或外围资源的访问,以便可以在不受干扰的情况下成功执行操作。

清理功能的高效管理:保存和恢复日志集以及管理内存缓冲区。

集成和管理来自通信和中间件堆栈(TCP/IP、USBCAN、FAT 和 Flash 文件系统等)的必要资源。

优化系统资源的使用,提高产品的可靠性、可维护性和质量。

RTOS 可以将所有这些元素整合到一个平台中。它实现了便利的开发过程,并允许更短的上市时间、更高的可靠性和更低的风险。

pYYBAGLeBIGAVJJHAABWWh3k9IU129.jpg

图 1:通用实时系统 (RTOS)

pYYBAGLeBI6ANbYoAACRUe2ffa8556.jpg

图 2:实时系统 (RTOS) – 调度程序

实时操作系统的组件

RTOS 的组件是调度程序、函数库、类和用户定义的数据对象。让我们分别详细地分析它们。调度程序(图 2)是 RTOS 的关键组件,它确定应用程序代码的哪些实体以何种顺序访问 CPU。在大多数商业 RTOS 中,存在三种编程模型:抢占式、协作式(也称为循环)和时间片模型。RTOS 函数库用作应用程序代码和 RTOS 之间的接口。这些功能也称为应用程序接口 (API),将 RTOS 的操作需求封装在其众多服务中。应用程序代码实体通过 API 向内核发出请求,然后确定应用程序所需的编程行为。类和用户定义的数据对象:RTOS 采用的数据结构通常根据操作类型排列成组或类。RTOS 将用来控制程序的每个类中的对象集由用户定义。名称可能不同,具体取决于适当设计的 RTOS 系统。

属性和功能

RTOS 的属性和功能可分为主要要求和次要要求。

主要要求:
· 管理处理器和其他系统资源以满足应用程序的需要。
· 同步事件。
· 在进程之间有效地移动数据。
· 管理与时间等独立变量相关的流程需求。
· 可预测地执行在可预测的时间段内发生的操作

次要要求:
· 高效的 RAM 管理。
· 独占访问系统资源。

资源管理系统

RTOS 的主要功能是管理某些系统资源,例如 CPU、内存和时间。每个资源必须在并发进程之间共享,以实现系统的一般功能,如下原则:

系统内存是有限资源,因此必须共享。

由于 CPU 的运行速度比执行控制或监视的物理进程快得多,因此可以共享 CPU 以避免处理延迟。这种延迟可能会违反基本的系统策略。

时间是 RTOS 管理的最困难的资源。

RTOS 服务的执行速度决定了系统对物理过程变化的响应。然而,对于每项服务而言,在时间方面尽可能地具有确定性(可预测性)同样重要。如果没有可预测的时序,系统设计人员无法保证满足物理过程的时间限制。

多任务处理

如果没有专用于每个代码实体的 CPU,就不可能同时执行操作。但是,可以共享 CPU 访问时间以实现同时操作方面。许多活动之间的切换顺序是多任务处理概念的基础。图 3 显示了如何实现多任务处理。左侧显示了处理器的典型模型,由 CPU、一些寄存器、处理器状态、程序计数器 (PC) 和堆栈组成。

pYYBAGLeBJuAPYerAABr7_9vmq8427.jpg

图 3:多任务处理

要共享物理处理器,每个任务必须具有与物理处理器相同的属性:一组寄存器、一个状态、一个指向任务中下一条可执行指令的 PC,以及一个用于局部变量的堆栈。当然,每个活动也会有自己的一组运行代码。另一方面,图 2 的右侧显示了几个虚拟处理器(任务)。每个任务都等待其在物理处理器中激活其属性的机会。调度程序不断地决定 CPU 在给定时刻应该控制哪些活动。当需要停止正在运行的任务并将 CPU 控制权交给新任务时,调度程序会将正在运行的任务的属性(操作上下文)与新任务的属性(操作上下文)进行交换。此过程称为“上下文切换”。

优先和抢占

为了实现效率和共享 CPU 利用率,实时多任务操作系统使用从一个任务到另一个任务的适当控制转移。为了实现这一点,调度程序必须监控系统资源和每个任务的执行状态,以确保每个实体及时接收 CPU 控制权。
这里的关键词是及时性。没有在正确的时间执行必要任务的实时系统是无效的。这个错误可能会产生从良性到灾难性的后果。这意味着内核服务请求的响应时间和这些服务的执行时间必须是快速且可预测的。RTOS 固有的可预测性允许设计应用程序代码以确保检测和处理所有需求。实时应用程序通常由多个进程(任务和线程)组成,由于外部或内部事件,这些进程需要在不同时间控制系统资源。

调度模型

有几种调度模型允许任务从处理器接收执行时间。这些中的每一个的有用性取决于
Round-Robin (Cooperative) 应用要求:所有活动同等重要,具有相同的优先级。一旦任务接收到处理器控制,它将一直运行,直到完成或到达重新调度点。然后它放弃对 CPU 的控制权,以允许调度确定下一个任务,从而获得对 CPU 的控制权。在其执行周期中,行循环任务(图 4)不能冻结、等待、暂停或执行任何可能允许另一个任务获得 CPU 控制权的操作,但它可以被中断(异常)抢占。Tick-Sliced Scheduling:是循环调度的一种变体。两种方法都是相似的,只是任务滴答只能由可以表示时间或某些其他特定单位的关联计数器执行预定义的次数(量子滴答)。任务保持对 CPU 的控制,直到时间量刻度到期或直到活动阻塞。如果量子滴答到期,如果有另一个具有相同优先级的任务等待执行,则调度会强制任务出售其业务。Preemptive Scheduling:是导致预防性计划概念的策略,其中物理处理器的控制权委托给具有最高优先级的任务。如图 5 所示,较低优先级的任务(任务 2)在发生激活或释放任务 1 的事件时被抢占。是导致预防性计划概念的策略,其中物理处理器的控制委托给具有最高优先级的任务。如图 5 所示,较低优先级的任务(任务 2)在发生激活或释放任务 1 的事件时被抢占。是导致预防性计划概念的策略,其中物理处理器的控制委托给具有最高优先级的任务。如图 5 所示,较低优先级的任务(任务 2)在发生激活或释放任务 1 的事件时被抢占。

poYBAGLeBKeAd0AEAACgYuBxRSE998.jpg

图 4:循环

poYBAGLeBLKANSjOAABsL-voIQs629.jpg

图 5:任务抢占

pYYBAGLeBL6AfLINAACGmQcIl_o812.jpg

图 6:内核服务

内核类

RTOS 在一组通常称为类的结构上运行。每个类都支持一组通常称为内核服务的运算符(图 6),这些运算符由应用程序进程调用以实现预期的行为。这些类如下:

任务:管理程序代码的执行;每个活动都独立于其他活动,但能够以多种形式与其他活动建立关系,包括数据结构、输入、输出或其他构造。

任务间通信:将信息从一项任务传递到另一项执行的任务。用于交互任务的常用类是信号量、队列和管道。红绿灯提供了一种使活动与各种事件同步的方法。

内核服务:执行某些系统行为的例程。当应用程序代码实体请求内核提供的功能时,会启动对该功能的内核服务请求。

ISR(中断服务程序):是一个软件程序,被激活以响应中断

编译具有实时支持的 Linux 内核

要编译具有实时支持的 linux 内核(图 7),您必须首先实时获取源代码和补丁。–

http://www.kernel.org/内核版本;

http://www.kernel.org/pub/linux/kernel/projects/rt/获取 RTOS 补丁

下载兼容版本很重要,否则编译不会产生积极的结果。解压文件夹后,复制旧配置文件:
cp /boot/config/kernel path/

下一步:
制作 oldconfig

完成上述命令后,运行以下命令:

bzcat/路径dellapatch/patch-2.6。Xx-rtyy。柏油。Bz2 | 补丁-p1

这会将实时补丁插入 Linux 内核。此时键入以下命令:

制作菜单配置

转到“处理器类型和功能”(图 8)并在“抢占模式”下选择“完全抢占(实时)”。

在“定时器频率”下选择值,例如 1000 Hz。除了修改内核的其他功能外,设置完成后必须立即执行以下命令:

制作 -j5 bzImage

制作 -j5 模块

制作modules_install

现在复制文件:/bootfolder中的arch / x86 / boot / bzImage。您有两个选项来运行测试:在启动时使用 grub shell 并手动加载文件,或者为 grub 创建一个新条目。这可以通过将默认内核版本的值复制到/boot/grub/menu并适当地修改路径和名称来完成。

pYYBAGLeBMqAPysdAACSIOYmzKg158.jpg

图 7:QNX 微内核示例

pYYBAGLeBNSAA6TGAADtchHpHXI073.jpg

图 8:使用 RTOS 编译内核

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5212

    文章

    20783

    浏览量

    338944
  • Linux
    +关注

    关注

    88

    文章

    11863

    浏览量

    219876
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux 下开发嵌入式必备命令速查表

    嵌入式开发中,Linux系统几乎成为必备的开发环境。不管你是在做STM32、RaspberryPi、还是基于ARM的板子,熟练掌握Linux命令不仅能加快开发效率,还能让你在调试、交叉编译、文件
    的头像 发表于 01-19 09:06 1124次阅读
    <b class='flag-5'>Linux</b> 下开发<b class='flag-5'>嵌入式</b>必备命令速查表

    如何在Zynq UltraScale+ MPSoC平台上通过JTAG启动嵌入式Linux镜像

    在之前文章中,我们介绍了如何使用 XSCT 工具通过 JTAG 在 Zynq SoC 上启动嵌入式 Linux 镜像(从 JTAG 启动 Zynq-7000 嵌入式 Linux:使用
    的头像 发表于 01-13 11:45 5317次阅读

    什么是嵌入式应用开发?

    系统中,用于控制、监测或通信等特定用途。与一般计算机系统不同,嵌入式系统通常具有较小的存储容量、处理能力和功耗,且需要满足特定的实时性、可靠性和安全性要求‌。 应用领域 嵌入式系统广泛应用于各种设备
    发表于 01-12 16:13

    从小白到大牛:Linux嵌入式系统开发的完整指南

    技术融合:嵌入式开发常需结合其他技术领域,如物联网(MQTT 协议、LwIP 协议栈)、人工智能(边缘计算、TensorFlow Lite 部署)、实时系统(RT-Linux、FreeRTOS
    发表于 12-16 10:42

    什么是嵌入式操作系统?

    发者不用直接操作底层寄存器,能高效开发复杂功能。 二、嵌入式 OS vs 我们熟悉的 Windows/Linux(桌面 / 服务器 OS) 很多开发者会疑惑Linux 也是 OS,为什么
    发表于 12-09 10:33

    嵌入式与FPGA的区别

    分为算法和控制,而算法的工资会比控制高,因为技术含量比控制高得多,但算法适合高数比较好的人学。 ⭕最后在了解下入行门槛? ✅1、嵌入式系统的门槛比较低,不管是嵌入式linux还是纯软,开发语言远远
    发表于 11-20 07:12

    嵌入式实时操作系统的特点

    实时嵌入式操作系统(Real-Time Embedded Operating System)是专门设计用于嵌入式系统的实时操作系统。嵌入式
    发表于 11-13 06:30

    嵌入式Linux新手入门:为什么迅为RK3568+迅为资料是黄金组合

    嵌入式Linux新手入门:为什么迅为RK3568+迅为资料是黄金组合
    的头像 发表于 11-04 14:05 836次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>新手入门:为什么迅为RK3568+迅为资料是黄金组合

    嵌入式需要掌握哪些核心技能?

    嵌入式需要掌握哪些核心技能? 若想通过学习嵌入式技术提升就业竞争力,需重点掌握C语言、嵌入式硬件架构、RTOS/Linux开发、通信协议四大核心技能,并结合行业需求积累项目经验。
    发表于 10-21 16:25

    嵌入式达到什么水平才能就业?

    :包括GPIO、定时器、中断、ADC 等外设的配置与调试,能实现如温湿度采集、电机控制等功能掌握嵌入式 Linux 驱动开发基础:能编写简单字符设备驱动,实现设备的初始化、读写操作,会用内核调试
    发表于 09-15 10:20

    入行嵌入式应该怎么准备?

    架构、总线协议和存储器管理等概念的理解也是必不可少的。 三、操作系统嵌入式系统通常需要运行一个实时操作系统(RTOS)或者一个精简版的操作系统。熟悉RTOS的概念和使用方法,能够编写多任务和实时
    发表于 08-06 10:34

    【「Yocto项目实战教程:高效定制嵌入式Linux系统」阅读体验】+基础概念学习理解

    。为了对珠峰更了解些,开始接触 Linux 系统开发,并逐渐认识到 Yocto 项目在定制嵌入式 Linux 系统方面的重要性。所以很想拜读下此书。 二、书籍内容概述 基础知识 书中首先回顾了
    发表于 08-04 22:29

    一文读懂:嵌入式Linux实时性进阶

    在工业控制、机器人、汽车电子等关键领域,嵌入式系统对实时性要求极高。 Linux作为强大的通用操作系统,其原生实时性能难以满足最严苛的硬实时
    发表于 07-10 15:26

    怎么结合嵌入式Linux,和FPGA三个方向达到一个均衡发展?

    嵌入式领域,不少人都怀揣着让嵌入式Linux 和 FPGA 三个方向实现均衡发展的梦想,然而实践中却面临诸多挑战。就像备受瞩目的全栈工程师稚晖君,他从大学玩单片机起步,凭借将智能算法融入
    的头像 发表于 06-25 10:08 1104次阅读
    怎么结合<b class='flag-5'>嵌入式</b>,<b class='flag-5'>Linux</b>,和FPGA三个方向达到一个均衡发展?

    Linux嵌入式和单片机嵌入式的区别?

    Linux嵌入式与单片机嵌入式在多个方面存在显著的区别,以下是详细的比较和归纳: 一、基本概念 1. Linux
    发表于 06-20 09:46