ubuntu20.04+x86_64+virtualbox6.7 环境下编译xenomai内核和实时性测试[详解]

本文详细介绍了在Ubuntu20.04+x86_64环境下,如何在VirtualBox6.7上编译Xenomai实时内核,包括升级到Linux5.15内核、安装软件包、下载源码、打补丁、配置内核和安装实时库,以及针对x86和arm架构的安装步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是针对实时系统Xenomai使用的一些记录,实时系统在工业自动化,机器人等智能行业是必需会用到的。

简述

xenomai是众多inux实时性解决方案中的一种,通过在linux的基础上添加一个RTOS内核cobalt,来提高linux的实时性。实时内核cobalt与非实时内核linux相结合,既能提供工业级RTOS的硬实时性能,又能利用linux操作系统非常出色的网络和图形界面服务,在产品的开发周期和成本控制方面都有巨大优势,结构如下:
在这里插入图片描述
主要有3部分,xenomai的移植构建也是围绕这三部分来进行:

  • 用户空间中的实时应用程序库libcobalt;

  • 内核空间中的实时内核Cobalt;

  • 硬件架构与Linux内核版本相关层 ipipe-core或dovetail。

ibcobalt和Cobalt的源码随xenomai更新,位于同一源码包内,ipipe-core和dovetail则与硬件架构和具体linux版本相关,以补丁的方式提供,需要单独下载

由于一些ipipe维护困难的关系,从linux5.4以上版本不再提供ipipe,ipipe由dovetail替代。
所以如果你的linux内核版本在5.4以上版本的话需要使用dovetail。

下面主要基于ubuntu20.04内核编译,由于我安装的ubuntu20.04的内核是5.13版本,而对应的dovetail 5.13版本是未经测试验证的,所以为了编译时少遇到些报错,先将内核升级到5.15.

升级Ubuntu20.04内核到Linux5.15

原来内核:

gary@jxes:~$ uname -a
Linux jxes 5.13.0-40-generic #45~20.04.1-Ubuntu SMP Mon Apr 4 09:38:31 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

查看可升级的内核版本:

gary@jxes:~$ apt list linux-headers-5.15.*-*-generic linux-image-5.15.*-*-generic
[sudo] password for gary: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  dmeventd libaio1 libdevmapper-event1.02.1 liblvm2cmd2.03 libreadline5 thin-provisioning-tools
。。。。。。。。。。。
/etc/kernel/postinst.d/zz-update-grub:
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.0-60-generic
Found initrd image: /boot/initrd.img-5.15.0-60-generic
Found linux image: /boot/vmlinuz-5.13.0-40-generic
Found initrd image: /boot/initrd.img-5.13.0-40-generic
Found linux image: /boot/vmlinuz-5.13.0-30-generic
Found initrd image: /boot/initrd.img-5.13.0-30-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done

升级安装内核版本到5.15.0-60:

sudo apt install linux-headers-5.15.0-60-generic linux-image-5.15.0-60-generic

重启生效:

sudo reboot

检查升级后内核版本:

gary@jxes:~$ uname -a
Linux jxes 5.15.0-60-generic #66~20.04.1-Ubuntu SMP Wed Jan 25 09:41:30 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

可以把不需要的软件删除(之前旧内核及其软件包):

gary@jxes:~$ sudo apt autoremove

还可把内核升级为低延时lowlatency(工业级嵌入式系统):

gary@jxes:~$ apt list linux-headers-5.15.*-*-lowlatency linux-image-5.15.*-*-lowlatency
Listing... Done
linux-headers-5.15.0-33-lowlatency/focal-updates,focal-security 5.15.0-33.34~20.04.1 amd64

由于默认ubuntu20.04的GCC版本比较新,这里需要降到GCC7,具体安装方法如下:

gary@jxes:~$ sudo apt update
gary@jxes:~$ sudo apt install build-essential
gary@jxes:~$ sudo apt install gcc-7 g++-7
gary@jxes:~$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9
gary@jxes:~$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7 --slave /usr/bin/gcov gcov /usr/bin/gcov-7
gary@jxes:~$ sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path            Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-9   90        auto mode
  1            /usr/bin/gcc-7   70        manual mode
  2            /usr/bin/gcc-9   90        manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
gary@jxes:~$ gcc --version
gcc (Ubuntu 7.5.0-6ubuntu2) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

安装软件包和下载对应linux5.15内核源码、dovetail补丁和xenomai实时内核

1、安装软件包

sudo apt-get install gcc libncurses-dev flex bison openssl-dev libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev build-dep zstd

这里建议将证书先禁用,否则在编译时会报错,具体禁用方法如下,否则会编译中途报错,前功尽弃。

gary@jxes:~/Xenomai/linux-dovetail-v5.15.y-dovetail$sudo scripts/config --disable SYSTEM_TRUSTED_KEYS
gary@jxes:~/Xenomai/linux-dovetail-v5.15.y-dovetail$ sudo scripts/config --disable SYSTEM_REVOCATION_KEYS

2、下载

linux-5.15.60.tar.xz
patch-5.15.51-dovetail1.patch.bz2(linux-dovetail-v5.15.y-dovetail.tar.gz这是打好补丁的Linux内核源)
xenomai-v3.2.1.tar.gz

3、给linux5.15内核打补丁

gary@jxes:~/Xenomai/linux-5.15.60$ sudo patch -p1 < ../patch-5.15.51-dovetail1.patch 

最好下载dovetail源码直接编译,因为打补丁,可能会存在版本不匹配,比如上面下载到的内核是5.15.60,而补丁只有5.15.51,貌似差不多,将就用,但最终编译时难免不遇到问题,比如如下报错,最后是直接基于linux-dovetail-v5.15.y-d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JXES智能生态系统

如文章对你有用,请作者喝个咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值