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
    +关注

    关注

    87

    文章

    10992

    浏览量

    206744
  • Xilinx
    +关注

    关注

    70

    文章

    2121

    浏览量

    119388
  • 实时操作系统

    关注

    1

    文章

    184

    浏览量

    30524
  • Zynq
    +关注

    关注

    9

    文章

    600

    浏览量

    46643
收藏 人收藏

    评论

    相关推荐

    带你认识实时操作系统(rtos)

    实时操作系统(RTOS)是为嵌入式系统实时应用提供一个稳定、可预测和高效运行环境的操作系统实时
    的头像 发表于 04-16 16:30 139次阅读
    带你认识<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>(rtos)

    Linux操作系统中如何按下PCIe的复位键

    Linux操作系统中,看如何按下PCIe的复位键
    的头像 发表于 01-20 09:31 570次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>中如何按下PCIe的复位键

    详解实时操作系统和非实时操作系统

    实时操作系统,当外界事件和数据产生时,系统能以足够快的速度予以处理,其处理结果能在规定的时间内控制生产结果或对系统做出响应,并控制所有实时
    的头像 发表于 12-26 09:54 1915次阅读
    详解<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>和非<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>

    什么是实时操作系统(RTOS)

    实时操作系统(RTOS)是一种专为实时应用程序设计的操作系统实时应用程序需要在特定时间内做出预测的响应,因此 RTOS 专注于提供对时间约
    的头像 发表于 11-23 17:14 1667次阅读

    linux属于什么操作系统

    Linux属于一种类UNIX操作系统Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX
    的头像 发表于 11-08 11:01 1754次阅读

    实时操作系统的滴答Tick设置多少才合适?

    实时操作系统的滴答Tick设置多少才合适? 介绍实时操作系统中Tick的设置。 在实时操作系统
    的头像 发表于 10-29 16:33 535次阅读

    到底啥是实时操作系统呢?它到底实时实时呢?

    到底啥是实时操作系统呢?它到底实时实时呢? 实时操作系统(Real Time Operatin
    的头像 发表于 10-29 16:33 732次阅读

    实时操作系统(RTOS)和分时操作系统(TSOS)的区别

    大家平时玩单片机基本上对于µC/OS、FreeRTOS、ThreadX这些操作系统非常熟悉了,他们都属于实时操作系统(RTOS),在工业领域比较广泛;然而对于linux这样的基于时间片
    发表于 09-21 10:19 3342次阅读

    linux实时系统还是分时操作系统

    大家平时玩单片机基本上对于µC/OS、FreeRTOS、ThreadX这些操作系统非常熟悉了,他们都属于实时操作系统(RTOS),在工业领域比较广泛;
    的头像 发表于 08-18 09:48 1328次阅读

    云数据中心的linux操作系统有何好处?

    可以在商用服务器上实现低延迟事务和高吞吐量计算。那么云数据中心的linux操作系统有何好处? 在云数据中心使用Linux的一些主要好处如下: 1、灵活的运营模式:Linux的适应性使I
    的头像 发表于 08-02 17:54 337次阅读

    浅谈Linux操作系统的三大部分

    Linux操作系统是一种基于Unix的操作系统,它是由Linus Torvalds在1991年开发的。它是一个自由和开放源代码的操作系统,因此任何人都可以自由地使用、修改和发布它。
    发表于 07-23 12:59 1730次阅读
    浅谈<b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>的三大部分

    FreeRTOS:一个迷你的实时操作系统内核

    ** 1、FreeRTOS** FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器
    的头像 发表于 06-29 17:15 522次阅读
    FreeRTOS:一个迷你的<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>内核

    微控制器实时操作系统实践—实时系统介绍

    实时系统有各种各样的实现方式和使用情况。本书的重点是如何使用实时操作系统(RTOS)在微控制器单元(MCU)上创建
    发表于 06-15 17:21 900次阅读
    微控制器<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>实践—<b class='flag-5'>实时</b><b class='flag-5'>系统</b>介绍

    实时系统Preempt RT与Xenomai之争!谁更主流,谁更实时

    操作系统的比例已超过60%。 从近几年的经验中,我们注意到一些客户对实时性的理解存在偏差和误区。此外,对于实时Linux系统的选择,主要是采
    发表于 06-15 16:42

    Linux与Windows服务器操作系统有什么区别?

    服务器管理员经常接触两种主要的操作系统,即Linux和Windows,那么,我们如何选择适合我们服务器的操作系统呢?当然,首先这两个操作系统的区别!
    的头像 发表于 06-01 15:52 991次阅读