构建Xenomai的Linux实时系统

一、版本

Linux:Ubuntu 14.04+3.13, 替换内核,内核版本:3.14.17
Xenomai:2.6.4

二、安装步骤

1.预安装软件包

$ sudo apt-get install kernel-package 
$ sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge 
$ sudo apt-get build-dep linux 
$ sudo apt-get install git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev

2.下载软件包

linux-3.14.17       http://www.oschina.net/news/54450/linux-kernel-3-16-1-3-15-10
xenomai-2.6.4       http://xenomai.org/downloads/xenomai/stable/ 
a.把软件移到 /usr/src/
b.解压:tar –xvf (不要一起解压,一个一个来,否则报错)

3.配置编译内核

a.预处理内核,进入xenomai目录

$ cd xenomai-2.6.2
$ ./scripts/prepare-patch.sh --linux=../linux-3.14.17/--adeos=./ksrc/arch/x86/patches/ipipe-core-3.14.17-x86-4.patch

b.进入linux-3.14.17目录

$ make menuconfig     裁减内核,不做设置直接退出(暂时没搞懂要裁剪哪部分)此步会生成一个 .config 的配置文件
 输入以下命令编译内核,并建立安装包,等待约2小时至编译完成:
$ sudo CONCURRENCY_LEVEL=3 fakeroot make-kpkg --initrd --append-to-version
=-xenomai kernel_image kernel_headers
// 这里是生成 两个.deb 的安装包,还可以使用
// $ make bzImage modules   ----- 编译内核与模块
// $ make modules_install     安装模块
// $ make install             安装内核

4.在/etc/modules文件中加入以下内容

xeno_nucleus
xeno_posix
xeno_native
xeno_rtdm

5.修改启动项,从新核启动

在/etc/default/grub文件中加入以下内容:
GRUB_CMDLINE_LINUX="quiet acpi_osi=Linux acpi_backlight=vendor"
把timeout=-1
更新启动项:update-grub

6.安装编译完的内核安装包

进入/usr/src
sudo dpkg -i *.deb

7.重启,从新内核启动,按shift

uname  -r 查看内核是否已经更换
没换就去改改启动项,这里搞了半天,没搞懂Ubuntu的grub是怎么回事 应该是虚拟机VMware的问题,
修改timeout后,关机(Ubuntu),开机,不要用init 6重启。
(补充:grub启动项设置可以查看另一篇blog《Ubuntu grub设置》,之前是在虚拟机上用init 6重启,不会在启动项界面停留)

8.输入以下命令来使能Xenomai的测试脚本from dash to shan

sudo dpkg-reconfigure bash

9.编译Xenomai的测试套件

cd /usr/src /xenomai-2.6.4
sudo ./configure --enable-dlopen-skins
sudo make
sudo make install
至此,完成了Xenomai实时扩展的安装。
此时可进入/usr/xenomai/bin目录下使用自带的测试命令完成测试。

10.修改PATH使系统任意位置可以使用 xenomai的命令

如xeno latency
直接修改/etc/enviroment,修改的是root的PATH,重启

三、Hello World

ex01.c 程序用来创建和运行“demo”的任务,demo任务是用来输出Hello World
程序代码:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/mman.h>
#include <native/task.h>
#include <native/timer.h>
#include  <rtdk.h>
RT_TASK demo_task;

void demo(void *arg)
{
  RT_TASK *curtask;
  RT_TASK_INFO curtaskinfo;

  // hello world
  rt_printf("Hello World!\n");
   // inquire current task
  curtask=rt_task_self();
  rt_task_inquire(curtask,&curtaskinfo);
   // print task name
  rt_printf("Task name : %s \n", curtaskinfo.name);
}

int main(int argc, char* argv[])
{
  char  str[10] ;

  // Perform auto-init of rt_print buffers if the task doesn't do so
  rt_print_auto_init(1);

  // Lock memory : avoid memory swapping for this program
  mlockall(MCL_CURRENT|MCL_FUTURE);

  rt_printf("start task\n");

  /*
   * Arguments: &task,
   *            name,
   *            stack size (0=default),
   *            priority,
   *            mode (FPU, start suspended, ...)
   */
  sprintf(str,"hello");
  rt_task_create(&demo_task, str, 0, 50, 0);

  /*
   * Arguments: &task,
   *            task function,
   *            function argument
   */
  rt_task_start(&demo_task, &demo, 0);
}
编译此程序:
编译头路径和动态库路径
$ xeno-config --xeno-cflags
$ xeno-config --xeno-ldflags
$ export CFLAGS=`xeno-config --xeno-cflags`
$ export LDFLAGS=`xeno-config --xeno-ldflags`
$ gcc $CFLAGS ex01.c $LDFLAGS -lnative -lxenomai -o ex01  //注意顺序,否则会错
运行之前,告诉Linux动态库的位置
$ export LD_LIBRARY_PATH=/usr/xenomai/lib
$ ./ex01

四、遇到的问题

1.版本选择的问题

预处理内核时:
错误:prepare-kernel.sh: cannot read I-pipe patch from /dev/null
原因:之前准备安装Xenomai-3.3.0,结果在安装的时候,配置—adeos时,找不到ipipe的位置。
网上说在./ksrc/arch/x86/patches/目录下,但是3.3.0的没有此目录。
于是换了个2.6.4的版本,同时换了ipipe-core-3.14.17-x86-4.patch对应的Linux 3.14.17的内核,
此时即没问题了。具体原因可查看 参考[3]。
(补充:在参考[9]中得知,3.3.0的ipipe在 kernel/cobalt/arch/<target-arch>/patches目录中)
解决:换版本 Linux-3.14.17  xenomai-2.6.4
ipipe的目录:/usr/src/xenomai-2.6.4/ksrc/arch/x86/patchs/ipipe-core-3.14.17-x86-4.patch

2.PATH设置的问题

错误:安装完成后,必须在/usr/xenomai/bin目录下才能使用xenomai的命令
解决:修改PATH,详见安装第10步。参见 参考[5]

3.启动新内核的问题

查看内核 name –r ,详见安装步骤

五、参考

[1] 安装步骤 http://my.oschina.net/hevakelcj/blog/124290
[2] 安装步骤 http://blog.csdn.net/leshraczs/article/details/8545628
[3] i-pipe错误 http://my.oschina.net/hevakelcj/blog/106280
[4] 修改grub启动项 http://www.metsky.com/archives/675.html
[5] 修改PATH http://blog.csdn.net/snow__fox/article/details/7534592
[6] xenomai编程笔记 http://blog.csdn.net/cyberlabs/article/details/6988811
[7] xenomai使用手册很好,由于版本问题有点错误(gcc那句,正确见上文),要翻墙
http://www.cs.ru.nl/lab/xenomai/exercises/ex01/Exercise-1.html
[8] 利用xenomai API编程时,编译错误的解决方案
http://answers.ros.org/question/11294/a-problem-of-linking-external-libraries/
http://answers.ros.org/question/11294/a-problem-of-linking-external-libraries/
http://comments.gmane.org/gmane.linux.real-time.xenomai.users/16232
[9] https://xenomai.org/installing-xenomai-3-x/

猜你喜欢

转载自blog.csdn.net/thalo1204/article/details/48340091
今日推荐