我写这篇日志的目的是记录我在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
这次,很顺利!