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

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

3天内不再提示

Linux + Xenomai实时操作系统创建方案

454398 来源:csdn 作者:Huster-ty 2020-12-26 10:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:Huster-ty

Xenomai是一种采用双内核机制的Linux 内核的强实时扩展。由于Linux 内核本身的实现方式和复杂度,使得Linux 本身不能使用于强实时应用。在双内核技术下,存在一个支持强实时的微内核,它与Linux 内核共同运行于硬件平台上,实时内核的优先级高于Linux 内核,它负责处理系统的实时任务,而Linux 则负责处理非实时任务,只有当实时内核不再有实时任务需要处理的时候,Linux内核才能得到运行的机会。所以Xenomai与传统Linux组成双内核以弥补Linux实时性差的缺陷。

准备内容
Linux源码:
Linux-4.9.24版本,下载地址:https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/snapsho...

Xenomai源码:
xenomai-3.0.5版本,下载地址:https://gitlab.denx.de/Xenomai/xenomai/-/archive/master/xenomai-master.zip

3.0.5不是最新版本,读者可以尝试最新版本的xenomai。Xenomail官网:http://www.cs.ru.nl/lab/xenomai/

Ipipe补丁:
ipipe-core-4.9.24版本,下载地址:https://xenomai.org/downloads/ipipe/v4.x/arm/older/

打补丁是系统移植的关键点,所以Ipipe补丁最好与Linux版本号对应,我们在构建的过程中遇到的问题就会少很多。

开发板:
本次移植是基于创龙zynq7020开发板(ARM A9双核+FPGA),但是本教程也适用zynq7000系列的板子,可能某些操作不太一样,这就需要大家来验证了。

除了以上所必须的所需条件外,我们还需要安装Petalinux,(Petalinux是Xilinx公司推出的嵌入式Linux开发工具),这里不在详述Petalinux的安装,请读者自行解决。

以上内容都准好之后,我们就可以进行系统移植了。

在移植之前还要说一点,最好用开发板提供的liunx版本上构建xenomai,这样你就可以省去很多麻烦,比如U-BOOT.BIN文件、devicetree.dtb文件、根文件系统都不需要更新,只需要更新zImage文件就可以,但是前提你能找到和linux源码相对应的补丁。

给Linux源码打补丁
第一步Linux和xenomai源码解压
将他们解压到同一个文件夹中
tar -xzvf linux-xlnx-4.9.24.tar.gz
unzip xenomai-3.0.5.zip

同时我们在这个文件夹下建立一个patch文件夹来存放补丁,并把补丁拷贝进去

至此这个文件夹中有linux-xlnx-4.9.24、xenomai-3.0.5、patch三个文件夹

第二步开始打补丁

先进入xenomai源码目录,再打补丁
./scripts/prepare-kernel.sh --arch=arm --ipipe=../patch/ipipe-core-4.9.24-arm-2.patch --linux=/home/huster/Zynq/linux-4.9.24

其中prepare-kernel.sh为shell脚本,可以将相应版本的xenomai的补丁打到相应版本的内核源码包中,不过此处用的补丁是单独下载的,不是xenomai-3.0.5中自带的,可能有人会问,既然是单独补丁为什么不用 patch -p1

如果没有出现错误说明打补丁成功。

第三步内核配置

内核配置之前我们需要使能环境变量

在Petalinux目录下执行
./source settings.sh

(Petalinux为petalinux安装目录) ,才能使交叉编译工具链生效。使能之后,输入arm-后按两下Tab会出现很多编译工具,如下图

我们进入到linux-4.9.24内核目录,执行以下命令
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig

可能这一步你会失败,因为linux源码中没有xilinx_zynq_defconfig这个配置文件,正常来说买开发板送的linux源码都会有这个文件,直接拷贝过来就可以,有一点需要注意,必须要拷到arch/arm/configs目录中,如果实在没有,我单独拷贝出来供大家下载了,链接: https://pan.baidu.com/s/1aefuY1kFx1AHM7EG5eGiIw

除此之外,我们还需要再menuconfig中进行一些自定义配置,这是个界面配置,在linux源码目录中执行以下命令
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

我们可以看到xenomai的一些额外配置选项,还会看到一些警告

接下来我们要选中CPU Power Management—>CPU Frequence scaling,按下enter进入,按下N键静止这个选项;返回到主界面,选中Kernel Features—>Contiguous Memory Allocator,然后按下N键禁止,最后别忘了选中save进行保存。

Linux补丁内核编译
Linux内核编译

执行以下命令对补丁过的Linux内核进行编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage

(zImage中第二个单词字母为大写形式的i)

编译完成后,在Linux内核源码安装目录的”arch/arm/boot”路径下,会生成内核镜像文件zImage。

这个过程会很漫长,需要我们耐心等待,或者你可以打一局王者或吃把鸡。

设备树编译

如果你用的linux源码、xenomai源码、补丁以及开发板都和我的一样,那么这一步你可以不做,直接用开发板提供的devicetree.dtb就可以,否则你需要执行以下操作。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

编译完成后,在linux内核安装目录的“arch/arm/boot/dts/”路径下,会生成很多的设备树文件,找到和你开发板相对应的即可。

U-BOOT编译

一般U-BOOT.BIN文件各个开发板公司已经提供好了,不需要我们自己去制作,这里只说下基本思路。首先要将U-BOOT源码解压,其次清理U-Boot,然后使能环境变量,然后配置U-Boot,然后编译U-Boot,最后基于Petalinux将编译生成的u-boot.elf和一级引导Bootloader程序zynq_fsbl.elf合并生成BOOT.BIN。

Xenomai安装
我们现在需要创建我们的Linux系统需要运行的Xenomai库和工具,先回到Xenomai源代码树,我们需要执行以下命令
./scripts/bootstrap

这将使Xenomai源准备好构建我们的工具和库,如果以上过程中提示要安装一些软件和库,我们只需要按照提示要求安装即可。

接下来进入xenomai源码目录,执行以下命令
./configure CFLAGS="-march=armv7-a -mfpu=vfp3 -mfloat-abi=hard" LDFLAGS="-march=armv7-a" --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi --with-core=cobalt --enable-smp --enable-tls CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld

继续执行命令
make DESTDIR=/home/huster/Zynq/xenomai-3.0.5/ install

编译完成后,会在xenomai源目录usr/xenomai中找到我们需要的bin工具文件夹和lib库文件。

注意上一条命令中,install前面有一个空格,而且install是命令不是文件夹,我之前在这里卡了好久,一直没有生成bin和lib文件夹。

然后直接将bin和lib目录中的文件直接拷贝到Linux根文件系统中的bin和lib目录下。如果你想直接将xenomai文件夹直接拷贝到linux根文件系统中的usr中也可以,只不过需要将
export LD_LIBRARY_PATH=/usr/xenomai/lib:$LD_LIBRARY_PATH

添加到~/.bashrc文件中
source ~/.bashrc

然后执行生效
echo $LD_LIBRARY_PATH

查看是否成功

xenomai运行测试
至此,我们已经得到linux镜像zImage文件、U-BOOT.BIN启动引导文件、rootfs根文件系统、devicetree.dtb设备树文件、FPGA的Z-7020.bit文件、以及lib库和工具。将上述文件拷到SD卡相应的存储区,按照烧写教程进行烧写,这里不在详述。

启动开发板,会发现与普通linux系统启动稍有不同。

系统启动之后,执行以下工具,运行延迟测试
./usr/xenomai/bin/latency

会打印出有关系统延迟的一些统计信息

说明xenomai系统移植成功,但是由于某种原因,我们的延迟是负的,这是令人困惑的,而且这是不正确的。后续将继续解决这个问题。

编辑:hfy


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

    关注

    88

    文章

    11628

    浏览量

    217965
  • Xilinx
    +关注

    关注

    73

    文章

    2192

    浏览量

    129926
  • 实时操作系统

    关注

    1

    文章

    206

    浏览量

    31793
  • Zynq
    +关注

    关注

    10

    文章

    625

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    技术分享 | RK3588增加Xenomai3实时补丁

    Xenomai是一套为嵌入式系统设计的实时开发框架,通过“双内核”架构,让Linux既能处理复杂的通用任务,又能可靠地完成那些对响应时间有极端要求的任务,广泛用于工业自动化、机器人、航
    的头像 发表于 11-27 17:29 1075次阅读
    技术分享 | RK3588增加<b class='flag-5'>Xenomai</b>3<b class='flag-5'>实时</b>补丁

    单片机的操作系统

    Linux网络协议栈和文件系统(如JFFS2),但实时性较弱,需外扩存储器。 ‌ ‌ VxWorks ‌:高效实时操作系统,广泛应用于通信
    发表于 11-14 06:18

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

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

    Jtti Linux操作系统最常见的10大优势

    Linux操作系统的十大优势 Linux操作系统作为一种开源、自由的系统,已经广泛应用于个人计算机、服务器、嵌入式设备等多个领域。它的多样化
    的头像 发表于 11-06 15:32 127次阅读

    瑞芯微RK35XX系列Linux实时性详细测试对比( PREEMPT_RT和Xenomai

    工业控制、工业网关、轨道交通、能源电力等场景,都需要一个运行稳定、可靠的“实时操作系统”。RT-Linux作为一款开源实时操作系统,拥有
    的头像 发表于 09-30 16:37 1533次阅读
    瑞芯微RK35XX系列<b class='flag-5'>Linux</b><b class='flag-5'>实时</b>性详细测试对比( PREEMPT_RT和<b class='flag-5'>Xenomai</b> )

    RK3506开发板Xenomai内核RT-Linux实时系统适配教程与性能实测,实测仅7μs稳定延时

    本文基于触觉智能RK3506核心板/开发板,介绍Xenomai内核RT-Linux实时系统适配,并附性能实测。简介与实测数据Xenomai
    的头像 发表于 09-18 14:21 884次阅读
    RK3506开发板<b class='flag-5'>Xenomai</b>内核RT-<b class='flag-5'>Linux</b><b class='flag-5'>实时</b>性<b class='flag-5'>系统</b>适配教程与性能实测,实测仅7μs稳定延时

    如何选择合适的实时操作系统

    选择合适的实时操作系统(RTOS,Real-Time Operating System)可能会影响你在不同行业的职业发展路径。
    的头像 发表于 09-09 14:47 801次阅读

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

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

    迅为RK3568支持国产实时操作系统(翼辉),Preemption、Xenomai实时系统AMP双系统,流畅运行Android12和11版本

    与邮票孔两种版本,双路千兆以太网、SATA3.0、PCIE3.0、MIPI、HDMI、MIPI、CAMERA、4G、5G等接口一应俱全。 支持国产实时操作系统(翼辉),Preemption
    发表于 04-07 11:02

    实时操作系统RTOS选型指南及实例分析

    鸿道Intewell操作系统是由科东软件自主研发的新型工业操作系统,历经30多年研发积累,采用微内核架构和自主研发的Hypervisor虚拟化技术,保证系统实时性、高可靠性。鸿道In
    的头像 发表于 02-27 15:21 1022次阅读

    鸿道Intewell操作系统Linux实时拓展方案

    鸿道Intewell操作系统是科东软件自主研发的新型工业实时操作系统,历经30多年研发积累,采用业界领先的微内核架构,具备高实时、高安全及强扩展的特性,是目前国内唯一通过汽车、工业控制
    的头像 发表于 02-27 10:08 616次阅读
    鸿道Intewell<b class='flag-5'>操作系统</b>的<b class='flag-5'>Linux</b><b class='flag-5'>实时</b>拓展<b class='flag-5'>方案</b>

    鸿道Intewell操作系统为半导体行业打造高可靠实时控制系统

    方案使用鸿道Intewell操作系统实时扩展架构,该架构利用多核处理器,实现Windows/Linux应用和实时应用的并行运行,且Windo
    的头像 发表于 02-08 16:13 786次阅读
    鸿道Intewell<b class='flag-5'>操作系统</b>为半导体行业打造高可靠<b class='flag-5'>实时</b>控制<b class='flag-5'>系统</b>

    迅为RK3588开发板实时系统编译-Preemption系统/ Xenomai系统编译-获取Linux源码包

    3.1 Preemption 系统/ Xenomai 系统编译 3.1.1 获取 Linux 源码包 编译环境说明: 本手册使用的是迅为提供的编译环境 ubuntu20.04,在网盘资
    发表于 01-09 11:03

    鸿道Intewell操作系统的Windows实时拓展方案

    鸿道Intewell操作系统的Windows实时拓展方案,即鸿道Intewell-Win构型,是一款专为工业控制领域设计的国产操作系统,支持Windows
    的头像 发表于 12-24 17:40 834次阅读
    鸿道Intewell<b class='flag-5'>操作系统</b>的Windows<b class='flag-5'>实时</b>拓展<b class='flag-5'>方案</b>

    deepin操作系统介绍

    希望从自己的能力和对桌面操作系统的理解,能给 Linux 的用户与开发者更多的选择。我们也相信 deepin 能够得到更多用户的认可与喜爱,成为开源世界的最佳选择。  一、 deepin 操作系统 先说
    的头像 发表于 12-23 09:08 3223次阅读
    deepin<b class='flag-5'>操作系统</b>介绍