安装xenomai的记实

简介:

  我写这篇日志的目的是记录我在CentOS上安装xenomai的过程。

1. 环境准备

    我从www.xenomai.org网站上下载了源码包 xenomai-2.6.2.tar.bz2。下载到本地,然后解压:


tar jvxf xenomai-2.6.2.tar.bz2

    而我本地CentOS内核版本是通过执行uname -a查看的: 


$ uname -a
Linux hevakelcj-notebook 2.6.32-279.19.1.el6.i686 #1 SMP Wed Dec 19 04:30:58 UTC 2012 i686 i686 i386 GNU/Linux

   在本地的 /usr/src/kernel 下没有内核的源码,看xenomai安装说明上说的要重新编译内核。所以必须要安装内核源码包:  


sudo yum install kernel-devel.686

    安装完后,在 /usr/src/kernel 目录下就多了一个内核路径:2.6.32-279.19.1.el6.i686,这就是内核源码。
    配置内核还需要执行make menuconfig命令,而当前系统没有安装ncurses或没有库。执行命令时出错,要求安装一个ncurses-devel.686,于是安装:  


sudo yum install ncurses-devel.i686

 安装完之后,再执行 make menuconfig 就正常了。

2. 开始安装

    在上一节,安装了kernel内核包、ncurses。现在,我们进行解压后了xenomail目录,打开工程下的README.INSTALL文件,我只看如何安装:
    
    大致的意思是说,要将xenomai集成到Linux内核中去,就必须运行上述指令:scripts/prepare-kernel.sh ...
    --linux=<linux-srctree> 参数是用于指定咱们内核源代码的路径。
    --adeos=<adeos-patch>是用来指定与内核源码对应的adeos补丁文件路径,如果补丁已经被安装,则不再需要指定。
    --arch=<target-arch>是用于指定是哪个平台的参数,这里我们指定为x86。

    OK, let me have a try. 我kernel源码安装在目录 /usr/src/kernels/2.6.32-279.19.1.el6.i686 下,所以我执行的命是: 


$ scripts/prepare-kernel.sh --linux=/usr/src/kernels/2.6.32-279.19.1.el6.i686

    结果,在这里卡住了:
    

    说什么,不能从/dev/null读取I-pipe patch?什么情况?怎么解决?

    我在网上看到有人问同样的问题,但最终问题是解决了:
   

    它指定了--adeos与--arch参数,我也来试一下。我查到 ./ksrc/arch/x86/patches/ 目录下也有两个.patch文件:
    ipipe-core-3.2.21-x86-2.patch
    ipipe-core-3.5.3-x86-2.patch
    ipipe-core-3.4.6-x86-2.patch
    我随意选了一个,命令如下: 


sudo scripts/prepare-kernel.sh --linux=/usr/src/kernels/2.6.32-279.19.1.el6.i686 
                               --adeos=./ksrc/arch/x86/patches/ipipe-core-3.2.21-x86-2.patch 
                               --arch=x86

   没有再报上次那个错误了,执行结果如下:
   

    这是成功了还是失败了?好像是失败了。

    我用vim打开了其中的一个.patch文件,查看文件里面的内容:
   
    这好像是以文本的形式描述文件的变更。比如:"-"开头的表示删除这行代码,"+"开头的表示新增这行代码。这么说来,.patch 文件是用于告诉程序我们该如何对kernel源码进行修改。如此说来,不同版本的内核代码必须使用对应版本的.patch文件才正确。
    我们内核的版本是 2.6.32-279.19.1.el6.i686,上面查了的。而我现在随便找的一个 ipipe-core-3.2.21-x86-2.patch 文件,完全牛头不对马嘴!So, 我们必须找到2.6.32对应的.patch文件。

    看来是我下载的xenomai源码的版本与我系统内核的版本不一致引起的。
    由于我下载的xenomai源码路径 xenomai-2.6.2/ksrc/arch/x86/patches 上有3个补丁文件:
    * ipipe-core-3.2.21-x86-2.patch
    * ipipe-core-3.5.3-x86-2.patch
    * ipipe-core-3.4.6-x86-2.patch
    所以,我猜想这个版本的xenomai应该对3.4.6的kernel支持。所以,我在www.kernel.org中下载了 linux-3.4.6.tar.bz2 。
    解压到相前目录下: tar xvf linux-3.4.6.tar.bz2
    然后再次执行:


scripts/prepare-kernel.sh --linux=../kernel/linux-3.4.6 
                          --adeos=./ksrc/arch/x86/patches/ipipe-core-3.6.4-x86-2.patch 
                          --arch=x86

    这次,很顺利!  


目录
相关文章
|
5天前
|
缓存 负载均衡 Linux
深入理解Linux内核调度器
本文探讨了Linux操作系统核心组件之一——内核调度器的工作原理和设计哲学。不同于常规的技术文章,本摘要旨在提供一种全新的视角来审视Linux内核的调度机制,通过分析其对系统性能的影响以及在多核处理器环境下的表现,揭示调度器如何平衡公平性和效率。文章进一步讨论了完全公平调度器(CFS)的设计细节,包括它如何处理不同优先级的任务、如何进行负载均衡以及它是如何适应现代多核架构的挑战。此外,本文还简要概述了Linux调度器的未来发展方向,包括对实时任务支持的改进和对异构计算环境的适应性。
23 6
|
6月前
|
Linux 测试技术 API
xenomai内核解析之xenomai初探
本文是关于Xenomai实时操作系统的初探,Xenomai是一个实时性增强的Linux系统,它通过实时内核和用户空间库提供硬实时性能。Xenomai 3主要由实时内核Cobalt、实时驱动模型RTDM、用户空间库libcobalt等组成,支持两种构建实时系统的方式:Cobalt和Mercury。Cobalt在内核空间与标准Linux内核并存,通过I-Pipe处理中断,确保实时任务的执行。Mercury则是通过修改Linux内核实现。
510 0
xenomai内核解析之xenomai初探
|
6月前
|
安全 Linux 调度
xenomai+linux双内核下的时钟管理机制
clock是操作系统正常运行的发动机,系统利用时钟中断维持系统时间、促使任务调度,以保证所有进程共享CPU资源;可以说,“时钟中断”是整个操作系统的脉搏。那你是否好奇xenomai cobalt内核和Linux内核双内核共存的情况下,时间子系统是如何工作的?一个硬件时钟如何为两个操作系统提供服务的?本文将揭开xenomai双核系统时间机制
133 0
xenomai+linux双内核下的时钟管理机制
|
6月前
|
存储 Ubuntu Linux
xenomai3+linux构建linux实时操作系统-基于X86_64和arm
Xenomai是一个实时性解决方案,通过在Linux上添加实时内核Cobalt来增强实时性能。它有三个主要部分:libcobalt(用户空间实时库)、Cobalt(内核空间实时内核)和硬件架构特定层(ipipe-core或dovetail)。ipipe-core适用于Linux 5.4以下版本,而dovetail用于5.4及以上版本。本文介绍了在X86 Ubuntu环境下,如何编译Xenomai内核,搭建应用环境,包括配置、编译、安装和实时性测试。对于其他硬件架构,如ARM和ARM64,步骤类似。文章还提到了Xenomai与Linux内核版本的兼容性和实时性测试结果。
460 0
xenomai3+linux构建linux实时操作系统-基于X86_64和arm
|
6月前
|
API 调度
xenomai内核解析--双核系统调用(三)--如何为xenomai添加一个系统调用
本文介绍了如何在Xenomai中添加自定义系统调用`get_timer_hits()`,该调用用于获取CPU定时器中断次数。首先,在`syscall.h`中定义127号系统调用,并在`clock.h`和`clock.c`中声明和实现该函数。接着,更新libcobalt库以包含新接口。最后,提供了一个示例应用,演示如何在实时任务中使用此系统调用。编译内核和库后,运行示例程序显示定时器中断次数,体现了Xenomai的tickless特性。
84 1
|
Linux API
如何来实现一个Linux内核的系统调用(基于tiny4412开发板)
如何来实现一个Linux内核的系统调用(基于tiny4412开发板)
98 0
|
存储 缓存 Linux
Linux内核21-Linux内核的中断处理过程
Linux内核21-Linux内核的中断处理过程
|
存储 Linux 开发者
Linux内核23-工作队列
Linux内核23-工作队列