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

    文章

    11319

    浏览量

    209830
  • Xilinx
    +关注

    关注

    71

    文章

    2168

    浏览量

    121672
  • 实时操作系统

    关注

    1

    文章

    199

    浏览量

    30777
  • Zynq
    +关注

    关注

    10

    文章

    610

    浏览量

    47208
收藏 人收藏

    评论

    相关推荐

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

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

    国产实时操作系统:和RT-Linux,Zephyr的实时性对比

    基于RT-Thread内核,并具备POSIX用户态运行环境的高性能实时操作系统。它类似Linux、Windows的架构,具备用户态和内核态(并相分离),用户态具备全地址空
    的头像 发表于 11-12 01:07 938次阅读
    国产<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>:和RT-<b class='flag-5'>Linux</b>,Zephyr的<b class='flag-5'>实时</b>性对比

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

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

    航电实时测试系统解决方案

    航电实时测试系统主要应用于航空座舱的实时测试。座舱测试过程中,输入和输出信号的实时性至关重要,尤其是在多任务操作时,必须保证
    的头像 发表于 10-23 15:34 289次阅读
    航电<b class='flag-5'>实时</b>测试<b class='flag-5'>系统</b>解决<b class='flag-5'>方案</b>

    linux操作系统安装步骤 linux操作系统的特点及组成

    Linux操作系统安装步骤 Linux操作系统是一种开源的操作系统,它以其稳定性、安全性和灵活性而闻名。以下是安装
    的头像 发表于 10-21 11:24 596次阅读

    面向功能安全应用的汽车开源操作系统解决方案

    在SAE 2024国际汽车安全大会上,Elektrobit的Linux专家王红燕在操作系统与芯片技术的分论坛上为大家带来了“面向功能安全应用的汽车开源操作系统解决方案”主题演讲。
    的头像 发表于 09-27 09:21 492次阅读
    面向功能安全应用的汽车开源<b class='flag-5'>操作系统</b>解决<b class='flag-5'>方案</b>

    简单认识RTOS实时操作系统

    RTOS(Real Time Operating System,实时操作系统)是一种专门设计用于在严格时间限制内处理任务的操作系统。它以其高实时性、多任务处理能力和资源管理能力在工业自
    的头像 发表于 08-20 11:20 2918次阅读

    3568F-翼辉SylixOS国产操作系统演示案例

    与vxWorks一样的实时性,与Unux一样的兼容性。并且SylixO S应用编程接口符合IEEE、IS0、IEC相关操作系统编程接口规范,兼容POSX 1003.1b实 时编程标准,因此基于Linux
    发表于 07-25 15:52

    工业实时操作系统对比:鸿道Intewell跟rt-linux有啥区别

    Intewell和RT-Linux是两种不同的实时操作系统(RTOS),它们具有各自独特的特点和优势。以下是Intewell操作系统的一些关键特性,以及与RT-
    的头像 发表于 07-03 10:00 550次阅读
    工业<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>对比:鸿道Intewell跟rt-<b class='flag-5'>linux</b>有啥区别

    微内核实时操作系统的介绍

    微内核实时操作系统(Microkernel Real-Time Operating System, μRTOS)是一种专为实时设计的操作系统。它采用微内核架构,以提高
    的头像 发表于 05-11 17:13 525次阅读

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

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

    鸿道(Intewell)新型操作系统为CNC数控系统提供国产解决方案

    5us,满足CNC数控系统高精高速的实时操作系统需求。同时,针对智能测量、视觉检测、3D加工轨迹显示、误差补偿、AI智能控制分析等场景,Linux
    的头像 发表于 03-13 16:31 652次阅读
    鸿道(Intewell)新型<b class='flag-5'>操作系统</b>为CNC数控<b class='flag-5'>系统</b>提供国产解决<b class='flag-5'>方案</b>

    鸿道(Intewell)操作系统为运动控制系统提供国产工业软件替代方案

    Intewell操作系统运动控制解决方案,采用Windows或者Linux实时扩展架构,满足在Windows系统或者
    的头像 发表于 03-13 16:12 643次阅读
    鸿道(Intewell)<b class='flag-5'>操作系统</b>为运动控制<b class='flag-5'>系统</b>提供国产工业软件替代<b class='flag-5'>方案</b>

    Linux操作系统上的射频测试模式应用指南

    电子发烧友网站提供《Linux操作系统上的射频测试模式应用指南.pdf》资料免费下载
    发表于 02-19 09:39 0次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>上的射频测试模式应用指南

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

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