LINUX操作系统嵌入Xenomai实时核

来源:互联网 发布:新浪微博下载mac版 编辑:程序博客网 时间:2024/06/05 16:46

由于linux系统的实时响应达不到更高要求,所以要嵌入Xenomai实时核(可以去官网看看适不适合你的硬件处理器)。

一:下载linux核及Xenomai实时核。

本人下载linux-3.18.12版本的内核,及Xenomai-3.0.3实时核。这里要注意,嵌入Xenomai实时核需要一个adeos的补丁,而且这个补丁需要和你的linux版本对应,但是不是所有linux都有对应的这个补丁,所以要先去这个补丁下载官网(http://download.gna.org/adeos/patches/)看有哪些版本的,再选择你的linux内核。

在某个文件夹解压所下载的两个内核后,注意要先看看xenomai的文件目录下面xenomai3.0.3/kernel/cobalt/arch/arm/patches有没有对应的linux版本的adeos补丁,若没有,需要下载然后复制进上面这个文件夹。每次注意复制进来的文件要和文件夹里面的文件的权限可能要一样,这个具体情况具体分析。两个核解压后且安装完补丁后,下面开始嵌入。

我的xenomai解压在/usr/src文件夹下,打开文件夹cd /usr/src/xenomai-3.0.2执行指令scripts/prepare-kernel.sh --linux=/usr/src/linux-3.18.12 --arch=arm

 --adeos=/usr/src/xenomai3.0.3/kernel/cobalt/arch/arm/patches/ipipe-core-3.18.12-arm-1.patch,进行打补丁设置,解释一下指令,这个指令的意思是将Xenomai构建为linux的一部分,即嵌入进linux,并且打了补丁,而文件scripts/prepare.sh是/usr/src/xenomai-3.0.2目录下,是一个脚本文件,作用就是这个。

--linux=/usr/src/linux-3.18.12用来指定目标核路径,--arch=arm目标平台,--adeos=/usr/src/xenomai3.0.3/kernel/cobalt/arch/arm/patches/ipipe-core-3.18.12-arm-1.patch指定补丁文件目录,执行完此指令,会有各种checking file.....直到结束。到这仅仅是将两个内核联系到一起,还需要编译linux内核。

编译内核前,需要进行内核配置,执行make menuconfig指令,出现了下面这个错误,

fatal error: curses.h: 没有那个文件或目录,

解决办法:安装套件sudo apt-get install libncurses5-dev解决问题,还会出现错误:can not open file "arch/x86/xenomai/kconfig",这个原因是系统源码未添加对arm的支持,修改文件Makefile 里面 arch ?= arm可以解决问题。
首先我的开发板是AM335x系列的,所以把开发板给的源码/usr/src/kernel-3.2/arch/arm/configs/ok335xs_evm_linux_defconfig配置文件加入到我的新内核配置里面,应该是相关的ARM配置,这样就减少了我的配置(方法是加载这个文件所在的目录),然后配置其他的选项。这里可以看到XENOMAI相关的配置项,根据冲突提示解决冲突配置,然后自己在网上找了一些配置项,

然后自己根据情况有配置些可能,不记得了,(此处的配置不一定后面没问题,现在主要是了解这个过程),配置结束后选择保存项保存为.config 文件然后退出。
然后是编译,编译之前要做的事:安装交叉编译器  和  添加ARM支持和编译器支持
具体需要修改/etc/profile 在文件结尾加上export PATH=/opt/ti-sdk-am335x-evm-08.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin(这是自己的编译器所在路径):$PATH 保存退出 执行指令source /etc/profile使得修改有效,然后进入linux目录编辑Makefile文件,arch ?=arm,CROSS_COMPILE=arm-linux-gnueabi-(注意此处的写法取决于你的编译器的bin文件夹里面的东西的形式,如你的bin文件夹里面是arm-linux-gnueabi- c++类似的这些文件的头都是arm-linux-gnueabi-这个形式,如果是其他形式就照写,否则等执行make zImage时候会提示找不到编译器指令)修改前的样子如图
  现在就可以编译了。
 然后打开linux目录执行make zImage可能会有找不到arm-linux-gnueabi- gcc 的编译器指令,解决办法,打开一个新终端,执行sudo -s 然后输入密码 执行PATH=/opt/ti-sdk-am335x-evm-08.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin(就是上面添加编译器路径的部分去掉export)然后在这个终端里打开linux目录再执行Make zImage就可以了。编译过程中遇到以下错误   
这是由于我用的低版本的交叉编译器编译高版本的内核所致,本来我以为交叉编译器只是需要bin文件里面的内容,经过我的仅仅替换bin文件实验发现,不仅仅是需要bin文件进行编译,还需要bin文件外面的一些文件支持,如下图所示的那些文件,所以需要完整的高版本的交叉编译器,这需要从TI的官网(http://softwaredl.ti.com/sitara_linux/esd/AM335xSDK/latest/index_FDS.html)下载对应产品的交叉编译器am335x-arm-linux系列的。我下载了一个.bin包,如图
里面东西很多很好,在终端./xx.bin   就相当于一个压缩包,执行完后里面东西可以用了,其中交叉编译器就在里面,需要自己看哪个部分是交叉编译器,我的交叉编译器如图
然后上面的路径什么的都需要重新设置修改。 
又有一个错误:
这是因为缺少am335x-pm-firmware.bin固件文件,有的内核带有的不带,所以我从kernel-3.2里面复制到我的新内核/firmware文件夹里面,然后再编译。编译成功!!!
以上编译都是在虚拟机Ubuntu里面完成的,问题很多,但是一点点解决还是很爽的。
注:菜鸟一个,学习学习学习,请大神指导!
                                                                                                  



1 0