前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FPGA Xilinx Zynq 系列(三十四)Zynq 上的操作系统介绍

FPGA Xilinx Zynq 系列(三十四)Zynq 上的操作系统介绍

作者头像
FPGA技术江湖
发布2020-12-30 12:05:27
3.4K0
发布2020-12-30 12:05:27
举报
文章被收录于专栏:FPGA技术江湖FPGA技术江湖
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

今天给大侠带来 FPGA Xilinx Zynq 系列 第三部分 Part C 操作系统 & 系统集成,第三部分是关于 Zynq SoC 开发的操作系统的,回顾和讨论了应用程序、动机、 交易、操作系统和产品特性。这里也进一步地深入探讨了在 Zynq 上部署 Linux 的问题,如何把 Linux 与基于 PL 的部分组合起来来形成一个嵌入式系统。

今天带来第三十四篇,开启第二十一章,Zynq 上的操作系统介绍,本篇内容目录简介如下:

21. Zynq 上的操作系统介绍

21.1 为何要使用嵌入式操作系统?

21.1.1 加速面市

21.1.2 使用已有的功能

21.1.3 降低维护和开发的成本

21.2 选择正确的操作系统类型

21.2.1 单任务操作系统

21.2.2 实时操作系统 (RTOS)

21.2.3 其它嵌入式操作系统

21.2.4 进一步的考虑

21.3 应用

21.4 多处理器系统

21.5 Zynq 操作系统

21.5.1 Linux

21.5.2 RTOS

21.5.3 其操作系统

21.6 本章回顾

21.7 参考文献

本系列分享来源于《The Zynq Book》,Louise H. Crockett, Ross A. Elliot,Martin A. Enderwitz, Robert W. Stewart. L. H. Crockett, R. A. Elliot, M. A. Enderwitz and R. W. Stewart, The Zynq Book: Embedded Processing with the ARM Cortex-A9 on the Xilinx Zynq-7000 All Programmable SoC, First Edition, Strathclyde Academic Media, 2016。

嵌入式系统和 FPGA

设计师在开发嵌入式系统时面对的一个主要问题是要不要用嵌入式操作系统。本章内容就是试图帮助回答这个问题,并将详细描述应该使用嵌入式操作系统的情形、已有的操作系统的种类以及可供使用的多种不同的操作系统。本章还会探寻能充分发挥 Zyna 平台上的这个双核处理器的各种可能做法。

21.1 为何要使用嵌入式操作系统?

虽然并非所有的嵌入式系统应用都有必要用嵌入式操作系统,不过使用它们还是具备一些优势的。这一节会点出其中的许多好处,并在适当的地方给出一些例子。

21.1.1 加速面市

在开发嵌入式系统的过程中,嵌入式操作系统的使用可以在一些关键领域降低研发时间。操作系统厂家能支持相当多的架构和平台,在产品开发的时候,如果打算要迁移到一个新的处理器平台,这个时候操作系统对众多平台的支持就是一个优势了。因为软件开发是基于操作系统,而不是某个特定的芯片,那么迁移到一个新的架构或芯片就不应该成为问题。

比如,嵌入式 Linux 和传统的桌面 Linux 是非常相似的。如果一个设计者已经熟悉了在各种桌面版本的 Linux 上开发应用系统,那么转到在嵌入式 Linux 上的研发就很直接了,而且学习过程会相应简单。这会大大地减少 —— 如果不能完全取消—— 设计者熟悉新的开发环境所需的时间。同样值得注意的是,大多数嵌入式操作系统厂家使用了 (或者以第三方的形式支持了)Eclipse IDE。

要想进一步改进可移植性,可以考虑使用具有标准系统接口(如可移植操作系统接口、POSIX)的操作系统,这些操作系统中的用户命令行和脚本接口是一致的。POSIX 是由一个工作组联合开发,并且仍在持续维护中的标准。这个工作组包括了IEEE 可移植应用和标准委员会的成员、开放工作组和 ISO/IEC 联合技术委员会 1 的成员 [6]。这个工作组合起来被叫做 Austin 工作组 [6]。

通过使用 POSIX 标准的操作系统,可降低当开发工作从一个操作系统搬移到另 一个时产生的影响,因为都是用了 POSIX API,高层的调用就不需要移植到新的操作系统了。总的来说,使用 POSIX 标准的操作系统使得在操作系统层面上具有了更为灵活的可移植性。

21.1.2 使用已有的功能

嵌入式操作系统支持很多功能,要不然就要由系统设计者自己来开发了,下面会着重介绍其中的一些功能。

如果要给嵌入式平台加上一个显示器 —— 无论是低分辨率、内置 LCD 屏还是通过 HDMI 输出给外置显示器 —— 系统都必须能支持才行。需要支持到什么程度当然和特定的应用相关,但是总的来说可以分成两个级别:驱动支持和图形界面支持。选择使用已有的操作系统,一般来说你将兼得驱动级别和图形界面级别二者的支持。

驱动级别的支持提供了底层软件,能连接嵌入式处理器和显示器,让系统能支持所用的特定接口。在驱动层面所控制的某些功能包括信号时序、同步、屏幕分辨率、缓冲区格式和屏幕刷新率等。许多操作系统自带很多视频驱动,这样就不需要从头开发驱动了,这种开发会是复杂而且耗时的工作。

图形界面级别的支持负责处理高级的要显示的图形内容。这种显示可以是单行的文本显示器,也可以是功能完整的图形用户界面(GUI)。操作系统提供高级的做图形开发的 API,同时也提供一个能用的 GUI。

21.1.3 降低维护和开发的成本

通过使用嵌入式操作系统可降低需要开发和测试的定制代码的量。实际上,这个量的下降也大大降低了引入软件的潜在的错误,从而降低了测试系统来找到并解决错误的时间和成本。操作系统会提供一个稳定的平台,这个平台已经经过了充分的测试,这样你就可以全神贯注于开发你的系统所需的定制功能,而不必费心做底层代码的调试了。使用操作系统厂家所提供的工具集,就能使用与这个操作系统相关的评估和调试工具,这样能加速开发、帮助发现性能瓶颈。在为多线程处理系统研发软件时,工具集也表现出其重要性。

另一个操作系统可以降低维护成本的地方是提供自家的开发团队之外的支持。大多数商业的操作系统厂家都有自己的服务团队,用以帮助解决操作系统平台的问题,这种服务可通过电话或邮件的方式进行。而基于开源的操作系统可能没有专门的服务团队,他们会有丰富的在线知识库,还有能通过在线论坛提供支持的热心的用户。有时,公司可能会给开源操作系统做一个包括产权功能的商业版本。如果是这样的话,此操作系统厂家会提供相应的支持并帮助解决开源许可的问题。

操作系统厂家会定期发布对操作系统的更新和改进,这意味着你不用担心对其中代码的改进问题,只要专注于自己的功能就好了。集中精力对付自己的开发,你就能在竞争中保持领先。

21.2 选择正确的操作系统类型

在决定用于嵌入式系统的操作系统时,是存在着一些可能性的。比如简单的单任务操作系统、RTOS 或特制的嵌入式操作系统,如各种版本的嵌入式 Linux。不过,在做选择之前,我们应该先来考察下现有的嵌入式操作系统的类型。

21.2.1 单任务操作系统

单任务操作系统,又叫做裸机操作系统,是一种简单的操作系统,目的是提供非常底层的软件模块,让系统可以用来访问处理器特有的功能。

考虑到 Zynq 平台的特殊性,Xilinx 提供了一个单任务操作系统平台,实现了诸如配置 cache、设置中断与异常,及其他硬件相关的功能。这个裸机平台就直接位于操作系统层的下面,每当应用程序需要直接访问处理器特性的时候就可以使用[8]。

单任务操作系统能对代码执行有更切实的控制,但是就功能而言实在是有限。它应该只适用于软件功能简单并且只需重复执行的应用上。单任务操作系统可执行的任务量相对较小,因为添加更多的任务会使得裸机要做的任务管理动作量急剧上升。

21.2.2 实时操作系统 (RTOS)

RTOS 的特征就是由调度器所保证的确定性的程度。RTOS 的目标并非是要实现高的吞吐率,而是对于指定任务能有快速并且可预期的响应。

许多嵌入式系统都要求软件对事件的响应是在一个短小而且确定的响应时间内发生的。根据这个需求,实时系统可以被分成三种类型:软实时、硬实时或一般实时 [3]。

在软实时系统中,首要任务确实是满足响应时间底限的要求,但是这个底限并不是致命的。偶有一次无法满足要求的响应时间可能使性能降级,但是不会破坏系统。

不过,一个硬实时系统中,错失响应时间是无法接受的,可能导致系统的完全失效。一般实时系统介于硬实时和软实时之间,少量的越过响应时间底限不会导致系统完全失效,但是大量的错失可能导致整个系统失效 [3]。

大多数现代 RTOS 系统还带有一套与实时内核相辅的高层函数。这些函数可能包括 GUI、通信协议栈和一定程度上的外设管理。在一个嵌入式系统中,RTOS 控制芯片,并负责实现所需层级的响应性。软件任务是由 RTOS 控制的,它调度 CPU 时间,分别分配给每个任务 [1]。

21.2.3 其它嵌入式操作系统

尽管 RTOS 适合管理嵌入式系统上的实时应用,它们一般不能实现最高的系统吞吐或性能。需要高系统性能的应用,一般需要另一类操作系统。

传统上,首选解决办法是嵌入式 Linux,不过,随着近年类似 Android 这样的移动操作系统的发展,嵌入式系统现在有了更多可以产生高系统性能的选择了。

Linux

Linux 和 Linux 内核会依次在第 22 章和 23 章详细介绍,所以这里就先跳过了。

Android

Android 是一个主要用于触摸屏移动设备 —— 比如手机和平板电脑 —— 的操 作系统。Android 最初是由 Android 有限公司创建的,这家公司原本就是 Google 资助的,后来干脆被 Google 收购了,现在 Android 就是由 Google 开发和维护的。因为它的开源状态,Android 已经被定制使用在一些非移动的设备上,比如用在智能电视、相机 (摄像机)、媒体播放器、笔记本电脑和手表上。

Google 基于 Apache V2 开源许可发布了 Android 的源码,这意味着任何人,无 论是手机厂家还是智能电视开发者,如果使用 Android 平台做了他自己的创新,并不需要向开源社区开放共享他所做的新东西 [4]。这使得 Android 是一个非常友好的商业工作平台。

Android 操作系统包含一个由 Linux 内核 2.6 版派生而来的内核,从一开始到 Android 3.2,所有的版本都用的是这个内核。到了 Android 4.0 之后,Android 的内核是基于 Linux 内核 3.x 了 [12]。不过,Android 软件架构和传统的 Linux 系统是大相径庭的,对基础的内核功能都有一些修改。由于 Android 最初是面向移动设备的,其中引入了一些积极的电源管理策略,只要可能就强迫内核进入睡眠模式来尽量减少功耗。这和传统的桌面 Linux 版本尽量不让内核进入睡眠模式是截然不同的。除此之外,其他的变化包括引入了定时的 GPIO、告警定时器、偏执的网络安全和 binder 扩展的进程间通信 (IPC)。Android 完整的软件架构详见图 21.1:

图 21.1: Android 操作系统构架

值得一提的是Android最近对非移动设备适用的改造。除了它的开源状态之外, 还有很多理由使得 Android 是理想的构建嵌入式系统的平台。下面我们就来看几个理由。

Android 吸引开发者的东西之一,是那个功能完整的 SDK,通过使用标准化的 API 来提供了一个正常的工作框架。尽管 Android 是一个仍在不断演化的平台,在最近几年里已经经历了几个大的版本更新,但是它的 API 在各个版本上基本上保持了稳定,这样就使得开发者可以做相对安全的长期投资,对于多个目标设备只要设计和编译应用一次就好了,这能节省开支。

Android 具有直接可用的对非常多种传感器的支持 (包括 GPS、加速度计和摄像头),对网络 (WiFi、蓝牙、NFC、2G/3G)和大量常见媒体格式的支持。如果你的嵌入式应用需要用到其中的一两种功能,那么选择 Android 会很好的加速你的开发时间。除此之外,因为它被广泛使用在手机和平板上,Android 的用户界面对许多潜在用户是熟悉的,因此能降低学习曲线。

21.2.4 进一步的考虑

选择嵌入式操作系统的时候还有其他一些要考虑的问题:

  • 成本多少?
  • 你的设计团队对它有多少经验?
  • 它够安全吗?

21.3 应用

在前面一节提到过,用于嵌入式系统的操作系统的类型,取决于这个系统要用于什么类型的应用。如果要做的这个应用需要系统在有限的时间段内对事件做出响应,那么通常就会选择用一个 RTOS。这种情况的一个简单的例子是汽车中的防抱死刹车系统,它需要刹车在指定的时间内放开,以避免汽车出现滑动。不过,其他的一些嵌入式应用系统,如果需要实现高性能,而不需要 RTOS 的那种可预期响应时间的,就会需要像 Linux 或 Android 这样的嵌入式操作系统。这类的例子可以是电视机顶盒录像机,它需要实现一个文件系统来做电视节目的录制、视频处理,还需要做用户交互的 GUI。图 21.2 描绘了嵌入式操作系统性能的分级:

图 21.2: 嵌入式操作系统的性能

21.4 多处理器系统

为嵌入式应用选择操作系统可能还取决于系统中的处理器的数量。就像在 Zynq 平台上,系统可以用多核处理器,这样的话就必须决定是用多核运行的单一操作系统,还是在每个核上分别运行一个操作系统。

图 21.1 从操作系统支持的角度介绍了非对称多处理器(AMP)和对称多处理器 (SMP)这两个术语。不过,从系统架构的角度理解这两者的定义也是有用的。

非对称多处理器可以用于要使用多个 CPU 核的系统上,这些 CPU 核可能是异构 的。每个 CPU 或 CPU 核,可以运行自己的操作系统实例,这些操作系统可以是相同的,也可以是完全不同的。这样做的一个例子是在一个 CPU 上运行一个 RTOS 的系统,而另一个 CPU 上运行一个基于 Linux 的 GUI。CPU 核之间的通信是利用共享内存进行的,共享内存实现了某种程度上的软件抽象。

另一方面,对称多处理器需要系统中所有的 CPU 是完全相同的架构的。所有的 CPU 上运行了单个操作系统实例,这个操作系统把进程任务分派到各个 CPU 上,并加以协调。和 AMP一样,在 CPU之间用共享内存来做通信,以及做任务执行的协调。

图21.3描绘了AMP和SMP的不同,以及它们和Zynq平台上的双核ARM架构的对应 关系。

图 21.3: 非对称多处理器 vs. 对称多处理器

21.5 Zynq 操作系统

在介绍了各种类型的操作系统及其相应的用途之后,该从每种类型中找几个操作系统来详细看看了。这主要是为了能仔细看一些操作系统的选择,看看它们能提供的特别的功能,如何以及到哪里能找到它们,是开源的还是商业的,以及每种系统能得到怎样的支持。

和之前的情况一样,这一节会分成两个部分,一个详述各种 Linux 版本,而另 一个讲述 RTOS。

21.5.1 Linux

这一节介绍一些 Zynq 能用的嵌入式 Linux 操作系统和环境。

应该注意的是,并不是所有的驱动都包含在主线内核中,有些只是在 Xilinx 的分支中。表 21.1 标出了那些在主线内核中的驱动。只出现在 Xilinx 分支中的驱动可能是过时的,随时可能被删除。这个内核还支持了 SMP,这样内核就能利用两个 CPU,也可以被配置为只用一个 CPU。Xilinx 的仓库提供了所有的源码,另外在 Xilinx Getting Started 网站还可 以下载到预先编译好的版本。

http://www.wiki.xilinx.com/Getting+Started

Petalogix® - Petalinux

PetaLinux 是以 SDK 的形式提供的,它集成了一个完整功能的嵌入式 Linux 发 行版和一个开发环境,这个开发环境组合了 Xilinx 的硬件设计流 [10]。PetaLinux提供了一个完整的包,里面有用来构建、测试和部署嵌入式 Linux 系统所需的一切。PetaLinux 由三部分组成:

  • 一个为 Xilinx 器件完全定制的嵌入式 Linux 操作系统;
  • 预先构建好的库的二进制映像 (可以直接启动的);
  • PetaLinux SDK

Xillybus - Xillinux

Xillinux 是一款 Linux 桌面发行版,可以在 Zedboard 上运行一个完整的图形 桌面环境,键盘和鼠标可以接在 Zedboard 上的 USB OTG 端口,显示器可以接在板上 的 VGA 端口上 [7]。除了一个完整的 Linux 发布版本,Xillybus 还提供了在 Linux主机和运行在可编程逻辑上的外设之间交互的开发包。在逻辑这边是以 FIFO的形式实现的,而在主机这边就是标准的 Linux 文件操作。这个 Linux 发行版本是基于Ubuntu 12.04 长效支持(LTS)的,它和开发包从 Xillybus 网站可以免费下载 [7]。

21.5.2 RTOS

FreeRTOS FreeRTOS 是一个轻量级的实时操作系统,可以用于很多种器件和处理器架构 上。FreeRTOS 内核的核心只是由 3 个 C 语言文件构成,所以它很简单,具有最小的ROM、RAM 和处理器的额外开销,很多情况下内核映像只有 4 到 9kB[5]。Xilinx 提供了一个已经做好的 FreeRTOS 版本,在 FreeRTOS 的网站可以免费下载 [5]。

21.5.3 其操作系统

还有很多 Xilinx 的合作伙伴提供的操作系统,太多了,本书的篇幅无法一一涉及。表 21.2 给出了所提供的解决方案的列表。所列的任何一个产品的详细资料都可以在 Zync-7000 SoC Ecosystem 网站找到 [11]。

表 21.2: Xilinx 合作伙伴提供的 Zynq 操作系统

21.6 本章回顾

本章介绍了嵌入式操作系统的概念,以及使用这些操作系统背后的理由。我们描述了各种类型的嵌入式操作系统,以及可能的产品和设备的例子应用。还介绍了多处理器系统的概念。下一章,我们会更深入地看看 Linux 操作系统。

21.7 参考文献

注意:所有的 URL 最后被检查过是在 2014 年的 6 月。

[1] ARM, “Real-Time Operating Systems (RTOS)” 网页位于 : http://community.arm.com/docs/DOC-2764

[2] Embedded Linux Wiki, “Android Kernel Features”, 网页位于 : http://elinux.org/Android_Kernel_Features

[3] P. A. Laplante and S. J. Ovaska, “Fundamentals of Real-Time Systems” in Real-Time Systems Design and Analysis:Tools for the Practitioner, 4th Ed. Wiley-IEEE Press, 2012, pp. 1 - 25.

[4] Open Handset Alliance, “Android Overview”, 网页位于 : http://www.openhandsetalliance.com/android_overview.html

[5] Real Time Engineers Ltd, “FreeRTOS”, 网页位于 : http://www.freertos.org/

第三十四篇到此结束,下一篇将带来第三十五篇,Linux 概览等相关内容。欢迎各位大侠一起交流学习,共同进步。

END

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA技术江湖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
媒体处理
媒体处理(Media Processing Service,MPS)是一种云端音视频处理服务。基于腾讯多年音视频领域的深耕,为您提供极致的编码能力,大幅节约存储及带宽成本、实现全平台播放,同时提供视频截图、音视频增强、内容理解、内容审核等能力,满足您在各种场景下对视频的处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档