Ubuntu 14.04.05上安装xenomai 2.6.4实时核

本文是在笔者实践下书写,每一步都经过实际操作,亲测有效,参考几个链接,基本雷同但是有作者思想所在,一为留下日后参考,二为想在该方向发展但找不到教程的人提供一点方向。

操作系统:Ubuntu 14.04.05,内核版本:4.4.0-31-generic
Xenomai版本:2.6.4

初次安装系统,需要执行update和upgrade,此处注意要把update执行到底,笔者安装的前几个系统就是因为网络问题,update时有几个链接不能更新,导致以后软件依赖关系不能解决,从而出现意想不到的错误。命令如下:

sudo apt-get update
sudo apt-get upgrade

接下来需要更新内核和安装一些软件依赖,命令如下:

sudo apt-get install linux-image-generic-lts-trusty // 更新内核
sudo apt-get install xserver-xorg-lts-trusty // 更新Xorg

/* 更新GCC,注释掉的四行是参考链接中的,但是笔者操作的时候,这四行是没有必要的 */
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.8 g++-4.8
// sudo update-alternatives --remove-all gcc
// sudo update-alternatives --remove-all g++
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 20
// sudo update-alternatives --config gcc
// sudo update-alternatives --config g++

解决软件依赖:

sudo apt-get install fakeroot kernel-package makedumpfile build-essential crash kexec-tools kernel-wedge git-core libncurses5 libncurses5-dev libelf-dev binutils-dev asciidoc devscripts debhelper dh-kpatches autotools-dev autoconf automake libtool

sudo apt-get build-dep linux

// 重启
sudo reboot

以上几步做了配置内核前的基本操作,接下来进行xenomai的配置,首先下载Linux 3.14.17和xenomai 2.6.4的源码:

cd /usr/src

sudo wget http://download.gna.org/xenomai/stable/xenomai-2.6.4.tar.bz2
sudo tar xfv xenomai-2.6.4.tar.bz2

sudo wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.17.tar.xz
sudo tar xfv linux-3.14.17.tar.xz

sudo ln -s /usr/src/linux-3.14.17 /usr/src/linux
sudo cp -vi /boot/config-`uname -r` linux/.config

此处需要自行下载补丁ipipe-core-3.14.17-x86-4.patch,并将其用特权模式拷贝到/usr/src/xenomai-2.6.4/ksrc/arch/x86/patches/下,补丁官方下载地址为:
https://xenomai.org/downloads/ipipe/v3.x/x86/older/

然后执行:

sudo xenomai-2.6.4/scripts/prepare-kernel.sh --arch=x86_64 --adeos=/usr/src/xenomai-2.6.4/ksrc/arch/x86/patches/ipipe-core-3.14.17-x86-4.patch --linux=/usr/src/linux-3.14.17

接下来配置内核:

cd linux
sudo make menuconfig  

配置选项如下:
* Real-time sub-system
–> Xenomai (Enable)
–> Nucleus (Enable)
* Power management and ACPI options
–> Run-time PM core functionality (Disable)
–> ACPI (Advanced Configuration and Power Interface) Support
–> Processor (Disable)
–> CPU Frequency scaling
–> CPU Frequency scaling (Disable)
–> CPU idle
–> CPU idle PM support (Disable)
* Pocessor type and features
–> Processor family
–> Core 2/newer Xeon (if \”cat /proc/cpuinfo | grep family\” returns 6, set as Generic otherwise) // 此处需要根据自己的CPU配置
* Real-time sub-system
–> Number of registry slots
–> 4096
–> Size of the system heap
–> 2048 Kb
–> Size of the private stack pool
–> 1024 Kb
–> Size of private semaphores heap
–> 48 Kb
–> Size of global semaphores heap
–> 48 Kb

接下来编译内核(该步耗时较长):

sudo make-kpkg --bzimage --initrd --append-to-version=-xenomai-2.6.4 -j8 kernel-image kernel-headers modules

编译成功后安装内核:

cd ..

sudo dpkg -i linux-image-*.deb
sudo dpkg -i linux-headers-*.deb
sudo update-initramfs -c -k "3.14.17-xenomai-2.6.4"

sudo update-grub

// 重启
sudo reboot

笔者进行到此步,先检查了此时的内核版本,命令是uname -r,若不是期待的内核就进行卸载,卸载内核命令sudo apt-get remove linux-image-4.4.0-31-generic,这是我当前的内核版本,需要根据实际情况修改,然后更新grub,命令sudo update-grub,重启后再次查看内核版本,一直卸载到内核Linux 3.14.17-xenomai-2.6.4

接下来build-xenomai:

cd /usr/src
sudo mkdir build_xenomai-2.6.4
cd build_xenomai-2.6.4

sudo ../xenomai-2.6.4/configure --enable-shared --enable-smp --enable-x86-sep

sudo make -j8
sudo make install

cd /etc/ld.so.conf.d/
sudo touch xenomai.conf 
sudo sh -c "echo '/usr/xenomai/lib' >> xenomai.conf"
sudo ldconfig

echo "export PATH=$PATH:/usr/xenomai/bin:/usr/xenomai/lib:/usr/xenomai/include" >> ~/.bashrc

sudo su
echo "export PATH=$PATH:/usr/xenomai/bin:/usr/xenomai/lib:/usr/xenomai/include" >> ~/.bashrc
exit

sudo addgroup xenomai       // 此处观察xenomai GID是不是1001,影响接下来的步骤操作
sudo addgroup root xenomai
sudo usermod -a -G xenomai `whoami`

XenoGID=`cat /etc/group | sed -nr "s/xenomai:.:([0-9]+):.*/\1/p"`
sudo sh -c "echo $XenoGID > /sys/module/xeno_nucleus/parameters/xenomai_gid"

sudo nano /etc/default/grub
// 修改如下:
GRUB_CMDLINE_LINUX_DEFAULT="xeno_nucleus.xenomai_gid=1001"

sudo update-grub

// 重启
sudo reboot

到此为止,xenomai的基本安装配置就已经结束了,下面就行基本的测试:
创建ex01.c文件,程序代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include  
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
sudo ./ex01

若输出
start task
Hello World!
Task name: hello
则配置成功,其他基本测试可以在/usr/xenomai/bin下进行,sudo ./latency和sudo ./switchtest等。

编译其他实时程序的时候,建议也按照这个编译过程执行。

这是笔者综合了三篇文章加上自己的实际操作所写的,在物理机和虚拟机都是可以运行并能做测试的,如果出现侵权或者不尊重原作的行为,请作者看到后及时通知,定马上删除。

参考链接:

https://gist.github.com/cfpperche/2e68ac44a081aaa0628b
http://rtt-lwr.readthedocs.io/en/latest/rtpc/xenomai.html
http://www.itdadao.com/articles/c15a668841p0.html

你可能感兴趣的:(Ubuntu 14.04.05上安装xenomai 2.6.4实时核)