一、版本
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/