xenomai

这两天一直在玩xenomai, 这是个开源项目,地址:www.xenomai.org

英文是这么介绍xenomai的:

Xenomai is a real-time development framework cooperating with the Linux kernel, in order to provide a pervasive, interface-agnostic, hard real-time support to user-space applications, seamlessly integrated into the GNU/Linux environment.

这是个可以用来给应用程序提供适时性能的中间层,他的实线的原理就是给应用程序的进程提供高是实行,也就是有先运行该应用程序进程。

这里面的具体实现涉及到中断,进程/线程优先级之类的内容。

核心的理念就是如果该应用程序需要运行,则把该进程设为最优先运行的程序,从而保证了实时性。

实用步骤:

1. 编译xenomai:

先configure:

./configure --host=arm-fsl-linux-gnueabi --enable-arm-mach=mx5 --prefix=/home/xxha/veex/tx300s/psos/xenomai-2.5.6/arm_out
还可以添加 --enable-arm-eabi 选项, 这是针对 arm 架构的。

--prefix 是make install 目录。

x86的可以直接configure, 如下:

./configure
然后是make 或直接 make install, 一般不会报错了。

make
make install
install 之后就会在--prefix指定的目录中, 生成的目标文件,如下:

xenomai-2.5.6/arm_out$ ls -l
total 20
drwxrwxr-x  2 xxha xxha 4096 Oct 12 14:40 bin
drwxrwxr-x 19 xxha xxha 4096 Oct 12 14:40 include
drwxrwxr-x  2 xxha xxha 4096 Oct 12 14:40 lib
drwxrwxr-x  2 xxha xxha 4096 Oct 12 14:40 sbin
drwxr-xr-x  5 xxha xxha 4096 Oct 12 14:24 share
如果没有--prefix指定,那就会默认生成在/ 下,也就是系统rootfs中了。

把这些生成的文件拷到目标板rootfs中,用来运行。

2. 编译内核:

在编译指定内核之前

需要给该内核打patch, xenomai中会给几种它支持的芯片架构,提供与某个linux版本内核对应的patch, 如下:

xenomai-2.5.6$ find -name *.patch
./ksrc/arch/blackfin/patches/adeos-ipipe-2.6.35.9-blackfin-1.16-01.patch
./ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.patch
./ksrc/arch/x86/patches/adeos-ipipe-2.6.37-x86-2.9-00.patch
./ksrc/arch/x86/patches/adeos-ipipe-2.6.34.5-x86-2.7-04.patch
./ksrc/arch/x86/patches/adeos-ipipe-2.6.35.9-x86-2.8-04.patch
./ksrc/arch/powerpc/patches/adeos-ipipe-2.6.35.7-powerpc-2.12-01.patch
./ksrc/arch/powerpc/patches/adeos-ipipe-2.4.25-ppc-DENX-2.2-01.patch
./ksrc/arch/powerpc/patches/adeos-ipipe-2.6.34.4-powerpc-2.10-05.patch
./ksrc/arch/powerpc/patches/adeos-ipipe-2.6.36-powerpc-2.12-03.patch
./ksrc/arch/nios2/patches/adeos-ipipe-2.6.30-nios2-1.2-00.patch
./ksrc/arch/arm/patches/back_adeos-ipipe-2.6.35.9-arm-1.18-01.patch
./ksrc/arch/arm/patches/adeos-ipipe-2.6.31-arm-1.16-02.patch
./ksrc/arch/arm/patches/adeos-ipipe-2.6.33-arm-1.18-02.patch
./ksrc/arch/arm/patches/ipipe-2.6.31-arm-1.16-02-imx51.patch
./ksrc/arch/arm/patches/adeos-ipipe-2.6.35.9-arm-1.18-01.patch
中间的2.6.xx.x 就是内核版本号, 如果你的内核版本号对不上的话,那你就需要merge patch了。现把patch merge进去了,再重新提取该完好的patch, 然后用prepare_kernel.sh 来运行, 这样打patch 才能算成功,要不然只能打上ipipe模块, xenomai 模块打不上。

如果不是运行0prepare_kernel.sh来打完patch, 运行时,会出现如下错误:

root@freescale ~$ clocktest 
Xenomai: /dev/rtheap is missing
(chardev, major=10 minor=254)
root@freescale ~$ mknod /dev/rtheap c 10 254
root@freescale ~$ clocktest 
Xenomai: POSIX skin or CONFIG_XENO_OPT_PERVASIVE disabled.
(modprobe xeno_posix?)
注意:并不是打上这个patch就完事了,必须要用xenomai提供的脚本 prepare_kernel.sh 来打patch,因为他还会拷贝xenomai/ksrc/ 下的很多源代码到 kernel中去。

打patch的命令如下:

./scripts/prepare-kernel.sh --adeos=/home/xxha/veex/tx300s/psos/xenomai-2.5.6/ksrc/arch/arm/patches/adeos-ipipe-2.6.35.9-arm-1.18-01.patch --linux=/home/xxha/veex/tx300s/linux-2.6.35.3
--adeos: 指定需要打得patch

--linux: 指定要编译的内核。

这里我的内核版本号是2.6.35.3, 而patch的内核版本号是2.6.35.9, 只能算相近,直接打打不上,merge了一会才打上的。

编译内核完成后 生成 uImage,拷到目标板上,配合 之前生成的工具,一起使用

3. 目标板上运行

root@freescale ~$ clocktest 
== Tested clock: 0 (CLOCK_REALTIME)
CPU      ToD offset [us] ToD drift [us/s]      warps max delta [us]
--- -------------------- ---------------- ---------- --------------
  0   -952993287391628.1            0.000          0            0.0

root@freescale ~$ cyclictest 
0.00 0.00 0.00 1/43 2628          

T: 0 ( 2628) P:99 I: 1000000 C:      root@freescale ~$ :      12 Avg:      12 Max:      12
等等。






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值