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

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

下面是针对实时系统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

### 下载 若不想编译,可从 ZLMediaKit 官方发布页下载预编译包(如 .tar.gz 或 .deb/.rpm)。对于 Ubuntu 系统,可下载 .deb 包,以下是下载最新版 .deb 包(需替换为实际版本号)的命令: ```bash wget https://github.com/ZLMediaKit/ZLMediaKit/releases/download/v1.12.0/ZLMediaKit_1.12.0_amd64.deb ``` 也可以通过克隆代码的方式获取: ```bash # 国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit # 千万不要忘记执行这句命令 git submodule update --init ``` 还可以使用以下克隆代码的方式: ```bash mkdir -p /workspace cd /workspace # 克隆代码,如果连不上多试几次 git clone -b 6.0 https://github.com/ZLMediaKit/ZLMediaKit.git cd ZLMediaKit/ # 克隆子模块 git submodule update --init ``` ### 安装 #### 预编译包安装 ```bash # 安装 sudo dpkg -i ZLMediaKit_1.12.0_amd64.deb sudo apt --fix-broken install # 解决依赖 ``` #### 编译安装 安装需要的 openssl 开发库 ffmpeg: ```bash # openssl sudo apt-get install openssl libssl-dev -y ``` 在某些情况下,如编译环境ubuntu20,部署环境是 16,部署环境里 `/usr/lib/x86_64-linux-gnu/libstdc++.so.6` 的版本太低,需要在 zlmediakit 根目录的 CMakeList 文件中添加静态编译: ```cmake # 解决version `GLIBCXX_3.4.26' not found问题 set(CMAKE_EXE_LINKER_FLAGS " -static-libstdc++") ``` ### 使用 关于使用指南,引用内容未提及相关信息,可查阅 ZLMediaKit 的官方文档获取详细的使用说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JXES智能生态系统

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

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

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

打赏作者

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

抵扣说明:

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

余额充值