当前位置: 首页 > news >正文

双内核架构 Xenomai 4 安装教程

Xenomai 4是一种双内核架构, 继承了Xenomai系列的特点,通过在Linux内核中嵌入一个辅助核心(companion core),来提供实时能力。这个辅助核心专门处理那些需要极低且有界响应时间的任务。
本文将在官网教程(https://evlproject.org/core/build-steps/)的基础上, 更详细地介绍如何编译和构建双内核 Xenomai 4.

概述

我是在vmware 的ubuntu 24.04的虚拟机上安装该内核的, 别的版本没测试过, 22.04 应该也行. 再之前的版本可能构建工具链太老, 会出现一些问题.

  • vmware workstation pro 17
  • ubuntu 24.04 (8核, 8G内存, 80G硬盘)
    这里需要注意的是需要保证硬盘空间大于50G, 之前设置为40G时,编译到一半空间不足.

安装该双内核架构, 大体上分为两个步骤, 一个是常规的编译内核的部分, 这个步骤和编译其他的linux内核差不多. 另一个是编译libevl这个库,用来测试双内核是否安装成功.

0. 前置依赖软件

大体上是这些, 如果哪里有报错缺什么包, 再补充.

sudo apt update
sudo apt install cmake make git flex bison libncurses5-dev gcc exuberant-ctags bc libssl-dev meson ninja-build libelf-dev libbpf-dev

1. 编译内核

获取内核源码

git clone https://git.xenomai.org/xenomai4/linux-evl.git

禁用两个config, 以防后面make 报错 (来源于:https://askubuntu.com/questions/1329538/compiling-kernel-5-11-11-and-later)

cd linux-evl
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS

然后设置开启evl-core,

make menuconfig

选择`Processor type and features

在这里插入图片描述
选中 EVL real-time core
在这里插入图片描述
然后选择save 后退出, 开始make, 需要注意的是make -j 会把所有核都拿去编译, 造成系统卡死, make一半就退出了, 建议留几个核, 比如:

make -j4 

然后等待一段时间后, 安装内核

sudo make modules_install install

更新grub, 这样可以在开机时按shift+tab或者shift 进入boot, 选择新的双内核启动

sudo update-grub2

至此, 带有evl功能的内核就安装好了.

2. 编译libevl

获取libevl

git clone https://git.xenomai.org/xenomai4/libevl.git

使用meson一套来进行编译:

mkdir libevl_build 
# meson setup -Duapi=[刚刚安装的内核源码目录] $builddir $srcdir
meson setup -Duapi=./linux-evl ./libevl_build ./libevl
cd libevl_build
meson compile
ninja install

由于默认把libevl 动态库安装到了/usr/local/lib/x86_64-linux-gnu/ 目录下, 我们需要做些额外工作来让evl 能找到这个共享库
所以需要做如下操作:

sudo vim  /etc/ld.so.conf.d/custom_libs.conf

将下面这行添加到/etc/ld.so.conf.d/custom_libs.conf

/usr/local/lib/x86_64-linux-gnu/

然后保存退出,再执行如下命令:

sudo ldconfig

3. 验证evl core的安装

重启虚拟机, 在开启时进入boot (按shift),选择内核linux 6.11 进入
在这里插入图片描述
运行命令 sudo evl test ,如果出现如下结果说明安装成功了.
在这里插入图片描述
中间可能会出现这样的错误, 但是官网(https://evlproject.org/core/testing/)说是正常的,不用紧张.

../libevl/tests/sched-quota-accuracy.c:213: FAILED: evl_control_sched(44, &p, &q, test_cpu) (=Operation not supported)
sched-quota-accuracy: no kernel support
../libevl/tests/sched-tp-accuracy.c:222: FAILED: evl_control_sched(45, p, ((void *)0), test_cpu) (=Operation not supported)
sched-tp-accuracy: no kernel support
../libevl/tests/sched-tp-overrun.c:220: FAILED: evl_control_sched(45, p, ((void *)0), test_cpu) (=Operation not supported)

参考链接:

  • https://evlproject.org/core/
http://www.lryc.cn/news/506714.html

相关文章:

  • 【redis的使用、账号流程、游戏服Handler的反射调用】1.自增id 2.全局用户名这样子名字唯一 3.
  • neo4j 图表数据导入到 TuGraph
  • 启动报错java.lang.NoClassDefFoundError: ch/qos/logback/core/status/WarnStatus
  • 【ubuntu18.04】ubuntu18.04挂在硬盘出现 Wrong diagnostic page; asked for 1 got 8解决方案
  • kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装
  • 游戏何如防抓包
  • 【LeetCode】每日一题 2024_12_19 找到稳定山的下标(模拟)
  • 运维 mysql、redis 、RocketMQ性能排查
  • [SAP ABAP] 将内表数据转换为HTML格式
  • LLM大语言模型私有化部署-使用Dify与Qwen2.5打造专属知识库
  • 使用C语言连接MySQL
  • PyTorch 2.0 以下版本中设置默认使用 GPU 的方法
  • 信号槽【QT】
  • 【UE5 C++课程系列笔记】10——动态单播/多播的基本使用
  • 点击展示大图预览
  • 【C++】分书问题:深入解析、回溯法高级应用与理论拓展
  • java开发入门学习五-流程控制
  • 【FFmpeg 教程 一】截图
  • 北邮,成电计算机考研怎么选?
  • 深入了解京东API接口:如何高效获取商品详情与SKU信息
  • C++常见内存泄漏案例分析以及解决方案
  • [LeetCode-Python版]206. 反转链表(迭代+递归两种解法)
  • 70 mysql 中事务的隔离级别
  • C语言二叉树
  • 智能工厂的设计软件 三种处理单元(NPU/GPU/CPU)及其在深度学习框架中的作用 之1
  • iOS swift开发系列--如何给swiftui内容视图添加背景图片显示
  • jmeter后端监视器
  • 服务器数据恢复—RAIDZ离线硬盘数超过热备盘数导致阵列崩溃的数据恢复案例
  • 面试题整理4----lvs,nginx,haproxy区别和使用场景
  • iOS - 超好用的隐私清单修复脚本(持续更新)