在ubuntu下安装安装xenomai试试系统。
背景:
1、全新的ubuntu系统,我安装了一些必要的软件比如gcc g++等等
2、版本信息为:
hello@hello-Lenovo:~$ cat /etc/issue
Ubuntu 14.04.4 LTS \n \l
hello@hello-Lenovo:~$ uname -a
Linux hello-Lenovo 3.19.0-58-generic #64~14.04.1-Ubuntu SMP Fri Mar 18 19:05:42 UTC 2016 i686 i686 i686 GNU/Linux
由于xenomai没有针对3.19的补丁xenomai仅支持特定版本的几个内核因此,我们需要修改ubuntu的内核到指定的版本。因此我们需要做两件事情:
1、给ubuntu换新的内核
2、安装xenomai2.6
首先就需要下载xenomai源码了,为了和其他的程序兼容我们选择xenomai2.6
下载网址在:http://git.xenomai.org/xenomai-2.6.git/
这里就选择2.6.4
hello@hello-Lenovo:~/work/ubuntu$ wget http://download.gna.org/xenomai/stable/xenomai-2.6.4.tar.bz2
下载完毕之后就可以解压了:
hello@hello-Lenovo:~/work/ubuntu$ tar -xf xenomai-2.6.4.tar.bz2
解压完毕进入xenomai源码:
hello@hello-Lenovo:~/work/ubuntu/xenomai-2.6.4$ cd xenomai-2.6.4
此时我们需要一些工具,进行安装:
hello@hello-Lenovo:~/work/ubuntu/xenomai-2.6.4$ sudo apt-get install devscripts devscripts debhelper dh-kpatches findutils autotools-dev autoconf automake libtool
安装完毕之后,就可以做个安装包了:
安装完毕之后,就可以进行编译了,我们使用默认的配置的就可以了,假如在其他的平台上使用就需要./configure 来进行对应的配置了。
接下来我们编译
hello@hello-Lenovo:~/work/ubuntu/xenomai-2.6.4$ make
完成之后安装
hello@hello-Lenovo:~/work/ubuntu/xenomai-2.6.4$ make install
xenomai暂时完毕接下来开始编译内核。
下面开始编译内核,此时也需要安装几个工具:
hello@hello-Lenovo:~/work/ubuntu/xenomai-2.6.4$ sudo apt-get install kernel-package libncurses-dev fakeroot zlib1g-dev
接下来下载源码包然后解压:
hello@hello-Lenovo:~/work/ubuntu$ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.17.tar.xz && tar -xf linux-3.14.17.tar.xz
等待解压完毕进入内核目录:
hello@hello-Lenovo:~/work/ubuntu$ cd linux-3.14.17/
然后就可以打补丁了
hello@hello-Lenovo:~/work/ubuntu/linux-3.14.17$ ../xenomai-2.6.4/scripts/prepare-kernel.sh --arch=amd64 --linux=. --adeos=../xenomai-2.6.4/ksrc/arch/x86/patches/ipipe-core-3.14.17-x86-4.patch
接下来配置下。
这里我为了方便,直接把之前的配置拷贝到当前的目录下,这样做是简单,但是可能会出错,不过就算出错也是有些不该配置的地方配置了,此时只要根据提示修改即可,拷贝命令如下:
hello@hello-Lenovo:~/work/ubuntu/linux-3.14.17$ cp /boot/config-$(uname -r) ./
接下来需要配置一些宣讲
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)
可选项 (RECOMMENDED):
* General setup
--> Local version - append to kernel release: -xenomai-2.6.5
--> Timers subsystem
--> High Resolution Timer Support (Verify you have HRT ON)
* Pocessor type and features
--> Processor family
--> SMT (Hyperthreading) scheduler support (Disable)
--> Preemption Model
--> Voluntary Kernel Preemption (Desktop)
* Power management and ACPI options
--> Memory power savings
--> Intel chipset idle memory power saving driver
配置完毕之后就可以进行编译了,执行:
hello@hello-Lenovo:~/work/ubuntu/xenomai-2.6.4$ make bzImage -j4
编译完成之后就可以进行安装了:
hello@hello-Lenovo:~/work/ubuntu/xenomai-2.6.4$ make install
假如需要编译安装模块的话,需要
hello@hello-Lenovo:~/work/ubuntu/xenomai-2.6.4$ make modules -j4
装模块
hello@hello-Lenovo:~/work/ubuntu/xenomai-2.6.4$ make modules_install
到此为止就安装完成了,其实在make install完毕之后就可以通过执行update-grub还查看启动项了。
比如:
hello@hello-Lenovo:/usr$ sudo update-grub
[sudo] password for hello:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.19.0-58-generic
Found initrd image: /boot/initrd.img-3.19.0-58-generic
Found linux image: /boot/vmlinuz-3.19.0-25-generic
Found initrd image: /boot/initrd.img-3.19.0-25-generic
Found linux image: /boot/vmlinuz-3.14.17
Found initrd image: /boot/initrd.img-3.14.17
Found linux image: /boot/vmlinuz-3.14.17.old
Found initrd image: /boot/initrd.img-3.14.17
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Found Windows Vista (loader) on /dev/sda1
Done
看到上面就出现vmlinuz-3.14.17了,说明已经成功了。
接下来hello@hello-Lenovo:/usr$ sudo reboot now
再启动界面上选择ubuntu 高级选项
然后选择对应的版本号就可以了。
接下来进入系统之后进行测试:
hello@hello-Lenovo:/usr$ sudo xeno latency
== Sampling period: 100 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT| 00:00:01 (periodic user-mode task, 100 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| -2.446| 0.371| 4.774| 0| 0| -2.446| 4.774
RTD| -2.144| 0.276| 4.826| 0| 0| -2.446| 4.826
RTD| -2.348| 0.344| 4.762| 0| 0| -2.446| 4.826
RTD| -2.756| 0.273| 4.682| 0| 0| -2.756| 4.826
RTD| -2.376| 0.338| 5.793| 0| 0| -2.756| 5.793
RTD| -2.549| 0.296| 4.411| 0| 0| -2.756| 5.793
RTD| -2.356| 0.340| 6.218| 0| 0| -2.756| 6.218
RTD| -2.248| 0.271| 4.756| 0| 0| -2.756| 6.218
RTD| -2.557| 0.341| 4.789| 0| 0| -2.756| 6.218
RTD| -2.359| 0.284| 9.107| 0| 0| -2.756| 9.107
RTD| -2.603| 0.341| 4.778| 0| 0| -2.756| 9.107
RTD| -1.402| 0.268| 4.723| 0| 0| -2.756| 9.107
RTD| -2.418| 0.328| 4.774| 0| 0| -2.756| 9.107
RTD| -1.074| 0.268| 5.534| 0| 0| -2.756| 9.107
RTD| -1.060| 0.337| 5.480| 0| 0| -2.756| 9.107
RTD| -1.682| 0.271| 5.514| 0| 0| -2.756| 9.107
RTD| -2.531| 0.336| 4.742| 0| 0| -2.756| 9.107
RTD| -2.490| 0.263| 4.741| 0| 0| -2.756| 9.107
RTD| -2.575| 0.340| 5.598| 0| 0| -2.756| 9.107
RTD| -2.319| 0.265| 4.718| 0| 0| -2.756| 9.107
RTD| -2.484| 0.335| 4.978| 0| 0| -2.756| 9.107
RTT| 00:00:22 (periodic user-mode task, 100 us period, priority 99)