版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/
最近接触实时系统Xenomai,该文章整理记录X86 ubuntu环境下xenomai 内核编译、xenomai应用环境搭建步骤,其他硬件架构(如arm、arm64)类似,先在X86上安装好环境才能更好的开发验证xenomai程序吧,更多信息见文末参考链接,希望对你有所帮助。
一、概要
xenomai是众多inux实时性解决方案中的一种,通过在linux的基础上添加一个RTOS内核cobalt,来提高linux的实时性。实时内核cobalt与非实时内核linux相结合,既能提供工业级RTOS的硬实时性能,又能利用linux操作系统非常出色的网络和图形界面服务,在产品的开发周期和成本控制方面都有巨大优势,结构如下:
主要有3部分,xenomai的移植构建也是围绕这三部分来进行:
用户空间中的实时应用程序库libcobalt;
内核空间中的实时内核Cobalt;
硬件架构与Linux内核版本相关层 ipipe-core;
libcobalt和Cobalt的源码随xenomai更新,位于同一源码包内,ipipe-core则与硬件架构和具体linux版本相关,以补丁的方式提供,需要单独下载;
总的来说,ipipe-core实现必要功能的同时,也是xenomai与硬件架构、linux版本间的解耦层,社区提供了常见架构下各linux版本的补丁,目前提供的最新ipipe-core是基于linux 4.19(2020-04-16)。xenomai的移植步骤如下:
对准备好的linux源码打ipip-core补丁;
打cobalt内核补丁,编译构建内核;
libcobalt库编译安装,设置环境变量。
步骤1中的源码文件也可直接从xenomai维护分支直接拉取,直接对拉取的代码进行步骤2、3即可。
二、环境准备
1.1 安装内核编译工具
编译Linux内核需要的工具包如下,可能不全,可根据编译时的错误提示安装缺少的工具。
sudo apt-get install gcc libncurses-dev flex bison openssl-dev libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev build-dep
1.2 准备内核及补丁文件
内核:下载linux源码,linux内核源码网址:https://www.kernel.org/。
ipipe补丁文件:下载与linux版本对应的ipipe-core补丁,最好先浏览https://xenomai.org/downloads/ipipe/v4.x/看xenomai提供了哪些linux版本的补丁,再去下载对应linux内核源码。
xenomai内核源码包:到xenomai官网 下载最新xenomai源码包。
本文选用以下版本作为示例:
linux kernel:linux-4.19.114.tar.xz
ipip-core:ipipe-core-4.19.114-cip24-x86-12.patch
xenomai:xenomai-3.1.tar.bz2
一般来说,如果没有找到与你使用的内核版本一致的ipipe-core补丁,linux相近版本linux-4.19.zzz,只要版本zzz跨度不大,也可使用相近的补丁代替。
说明:笔者将上面的文件,统一放到了/home/work/xenomai(家目录~)目录下。文中涉及绝对路径时,还请读者注意。
三、内核安装流程
3.1 打ipipe补丁
解压linux内核源码:
$tar -xvf linux-4.19.114.tar.xz
进入linux内核源码目录打ipipe补丁:
$cd linux-4.19.114
$patch -p1 < ../ipipe-core-4.19.114-cip24-x86-12.patch
3.2 添加xenomai内核
解压xenomai源码包:
$tar -xvf xenomai-3.1.tar.bz2
进入xenomai源码目录xenomai-3.1/scripts,使用脚本prepare-kernel.sh对linux内核源码打cobalt内核补丁;
$cd xenomai-3.0.8/scripts
脚本prepare-kernel.sh使用帮助如下:
$ ./prepare-kernel.sh --help
usage: prepare-kernel --linux= --ipipe= [--arch=] [--outpatch= [--filterkvers=y|n] [--filterarch=y|n]] [--forcelink] [--default] [--verbose]
其中主要参数为:
--linux=指定linux源码的绝对路径;
--ipipe=指定ipipe补丁。如果已经手动对linux源码打ipipe补丁,则不需要指定该参数。
--arch=指定硬件架构,x86_64、arm、arm64
outpatch=指定输出xenomai patch(绝对路径)。默认情况下如果不使用该参数,prepare-kernel.sh打