如今Linux系统正被广泛用于各种嵌入式实时系统中,但由于Linux系统本身不支持硬实时扩展,故限制了其发展。由于Linux + RTAI的双内核方式构成的实时系统方案具有良好性能,本文将简述如何构建这样一个Linux + RTAI的实时系统。
一、准备工作
首先选择一款RTAI的版本,我们这里以RTAI-3.7为例,从官网【www.rtai.org】下载该RTAI压缩包。进入RTAI-3.7的/rtai-3.7/base/arch/i386/patches,查看此版本RTAI支持的内核版本。我们这里选择Linux-2.6.20.21,于是从官网【www.kernel.org】下载该Linux内核压缩包。
登录已安装好的Ubuntu系统,切换到超级用户权限(或直接用超级用户登录)。将前面下载好的Linux内核以及RTAI压缩包复制到/usr/src目录中。
进入/usr/src目录,解压文件。
# tar –jxvf linux-2.6.20.21.tar.bz2
# tar –jxvf rtai-3.7.tar.bz2
解压完成后在/usr/src目录下出现两个文件夹linux-2.6.20.21和rtai-3.7。
注意,如果你想在新安装的Ubuntu系统上进行Linux内核编译与RTAI安装,请连接网络并进行以下操作:
# apt-get update
# apt-get install build-essential
# apt-get install kernel-package
# apt-get install gcc
# apt-get install libncurses5
# apt-get install libncurses5-dev
# apt-get install libqt3-mt-dev
二、打上RTAI补丁
进入Linux源码目录,接下来给内核打上相应的RTAI补丁(首先确保你的Ubuntu系统上已安装patch工具)。
# cd linux-2.6.20.21
# patch –p1 –b < /usr/src/rtai-3.7/base/arch/i386/patches/hal-linux-2.6.20.21-i386-1.12-03.patch
三、配置Linux内核
先执行以下命令,用以清除目录下所有配置文件和以前生成内核时所产生的中间文件。
# make mrproper
在Ubuntu下有多种配置菜单的方式,推荐使用图形化的配置菜单。
# make menuconfig
(方便起见,可以将/usr/src/linux-headers-`uname -r`/.config拷贝到本目录下。)
下面介绍配置菜单中需要修改的一些选项:
(1) General setup àLocal version – append to kernel release = -rtai-3.7
(2) General setup àCreate deprecated sysfs files (NEW) = no
(3) Enable loadable module support àModule versioning support = no
说明:不同的内核在使用同一模块时区别于它原有的模块,此处不选。
(4) Enable loadable module support àModule unloading
说明:这个选项可以卸载不再使用的模块,如果不选将不能卸载任何模块。
(5) Processor type and features àSymmetric multi – processing support(对称多处理器支持)= no
说明:如果有多个CPU或者使用的是多核CPU就选上,此时“EnhancedReal Time Clock Support”选项必须开启,“Advanced Power Management”选项必须关闭。
(6) Processor type and features àInterrupt pipeline = yes
(7) Processor type and features àSubarchitecture Type(子类型架构)= PC – compatible(标准的PC或兼容机)
(8) Processor type and features àProcessor family(处理器系列)= core2 / newer xeon(根据实际CPU选择,例如酷睿双核)
(9) Processor type and features àGeneric x86 support(通用x86支持)= no(若CPU能在上述“Processor family”中找到,则可不选)
(10) Processor type and features àMulti – core scheduler support(针对多核CPU进行调度策略优化)=yes
(11) Processor type and features àPreemption Model(内核抢占模式)àPreemptible Kernel (Low – Latency Desktop)(适用运行实时程序的主动内核抢占)= yes
(12) Power management options (ACPI,APM) àPower Management support(电源管理选项)= no
说明:电源管理有APM和ACPI两种标准且不能同时使用,即使关闭该选项,X86上运行的Linux也会在空闲时发出HLT指令将CPU进入睡眠状态。
(13) Power management options (ACPI,APM) àCPU Frequency scaling(CPU变频控制)àCPU Frequency scaling Power management options = no
说明:CPU变频控制允许在运行中改变CPU主频,达到省电和降温的目的,但是这个驱动不会自动改变CPU的时钟速度,选择no。
四、编译及安装Linux内核
# make-kpkg clean
# make-kpkg –initrd kernel_image kernel_headers
当编译结束后,会在/usr/src目录下生成两个文件,分别是镜像文件和头文件。进入目录,安装镜像文件和头文件。
# dpkg –I linux-headers-2.6.20.21-rtai-3.7_2.6.20.21-rtai-3.7-10.00.Custom_i386.deb
# dpkg –Ilinux-image-2.6.20.21-rtai-3.7_2.6.20.21-rtai-3.7-10.00.Custom_i386.deb
安装后将得到三个非常重要的文件,分别是System.map,config和vmlinuz,可在/boot/目录下找到。接着重启系统,进入新配置的内核环境。
# shutdown –r now
五、编译及安装RTAI
进入RTAI源码目录,进行简单的配置后即可编译和安装。
# cd /usr/src/rtai-3.7
# make menuconfig
General àLinux source trr = /usr/src/linux-2.6.20.21(也可直接创建软链接 #ln –s linux-2.6.20.21 linux)
Machine(x86) àNumber of CPUs (SMP - only) = 2(CPU核数)
# make
# make install
六、测试
# cd /usr/realtime/testsuite/kern/latency
# ./run