1、 RT-linux的安装详解修订版本号1v编辑时间2017.10编辑者Mercy校验者Leo审核者Limis目的:更简单明了的明白如何安装RT-linux此篇文档针对于Centos 要想重新编译内核 安装RT-linux 首先需要了解一下 RT-linuxRT-Linux开发者并没有针对实时操作系统的特性而重写Linux的内核,因为这样做的工作量非常大,而且要保证兼容性也非常困难。将linux的内核代码做一些修改,将linux本身的任务以及linux内核本身作为一个优先级很低的任务,而实时任务作为优先级最高的任务。即在实时任务存在的情况下运行实时任务,否则才运行linux本身的任务。RT-Li
2、nux能够创建精确运行的符合POSIX.1b标准的实时进程;并且作为一种遵循GPL v2协议的开放软件,可以达GPL v2协议许可范围内自由地、免费地使用、修改和再发生。RT-linux的调度Linux采用标准的UNIX技术使得内核是不可抢占的。采用基于固定时间片的可变优先级调度,不论进程的优先级多么低,Linux总会在某个时候分给该进程一个时间片运行,即使同时有可以运行的高优先级进程,它也必须等待低优先级进程的时间片用完,这对一些要求高优先级进程立即抢占CPU的实时应用是不能满足要求的。如果还是难以理解。看上面我做的图解RTLinux程序其实是运行于用户空间和内核态两个空间。RTLinux提
3、供了应用程序接口。借助这些API函数将实时处理部分编写成内核模块,并装载到RTLinux内核中,运行于RTLinux的内核态。非实时部分的应用程序则在Linux下的用户空间中执行。这样可以发挥Linux对网络和数据库的强大支持功能。安装前的准备:1:下载通过git下载最新的代码http:/git.kernel.org/?p=linux/kernel/git/rostedt/linux-rt.git;a=summary这样下载后的代码不需要打补丁,已经是最新的代码了。2:分别下载内核代码和补丁Kernel:http:/www.kernel.org/pub/linux/kernel/PREEMPT
4、_RT:http:/www.kernel.org/pub/linux/kernel/projects/rt/下载的内核和补丁要对应,如kernel为linux-2.6.33.7.tar.bz2,补丁为patch-2.6.33.7.2-rt30.bz2。注:这里的下载的内核和补丁 与你的linux的内核版本要对应。不然很容易导致编译失败! 我比较推荐使用通过git下载最新的代码 省去了打补丁的步骤 不容易出错。如果不知道自己内核版本可以通过 cat /proc/version 来查看自己的内核版本。接下来就开始正式安装了。1:切换至 / 目录下 /usr/src/ 建立一个rt-preempt-
5、linux文件夹。 2:通过SSH 将下载的 内核补丁包 放入3:解压 压缩包。 利用tar命令 将解压得到的文件 复制到 先前建立的 rt-preempt-linux 下 切换至/usr/src/rt-preempt-linux/linux-rt-3.0/下 一定要切换至linux-rt-3.0下 不然接下来的步骤无法进行 容易导致出错4:配置内核 make menuconfig接下来会出现一个类似于图形界面的东西 找到 Processor type and features 选项 进入后在找到 Preemption Model 选项第三个选项也就是我们所需要的抢占式内核 Rt-linux
6、选择Preemptible Kernel后返回上级菜单找到 Device Dricers 驱动选项进入 找到Staging drivers将它反选。取消勾选。 因为 staging drivers 的开启 会容易导致内核编译失败。所以这里将其反选。 如果staging drivers开启着的话容易导致以下情况。LD M drivers/net/bnx2x.o make: * drivers 错误 2 unanaodebian:/Experiment/linux/linux-2.6.33.7$ make CHK include/linux/version.h CHK include/genera
7、ted/utsrelease.h CALL scripts/checksyscalls.sh CHK include/generated/compile.h VDSOSYM arch/x86/vdso/vdso-syms.lds VDSOSYM arch/x86/vdso/vdso32-int80-syms.lds VDSOSYM arch/x86/vdso/vdso32-syscall-syms.lds VDSOSYM arch/x86/vdso/vdso32-sysenter-syms.lds VDSOSYM arch/x86/vdso/vdso32-syms.lds LD arch/x8
8、6/vdso/built-in.o LD arch/x86/built-in.o LD drivers/staging/built-in.o CC M drivers/staging/comedi/drivers/quatech_daqp_cs.o drivers/staging/comedi/drivers/quatech_daqp_cs.c:70: error: field eoshas incomplete typedrivers/staging/comedi/drivers/quatech_daqp_cs.c: In functiondaqp_interrupt:drivers/sta
9、ging/comedi/drivers/quatech_daqp_cs.c:291: error: implicitdeclaration of function updrivers/staging/comedi/drivers/quatech_daqp_cs.c: In functiondaqp_ai_insn_read:drivers/staging/comedi/drivers/quatech_daqp_cs.c:405: error: implicit declarationof function sema_initdrivers/staging/comedi/drivers/quat
10、ech_daqp_cs.c:418: error: implicitdeclaration of function down_interruptibledrivers/staging/comedi/drivers/quatech_daqp_cs.c: In functiondaqp_cs_attach:drivers/staging/comedi/drivers/quatech_daqp_cs.c:1045: warning: assignmentfrom incompatible pointer typemake4: * drivers/staging/comedi/drivers/quat
11、ech_daqp_cs.o 错误 1make3: * drivers/staging/comedi/drivers 错误 2 make2: * drivers/staging/comedi 错误 2 make1: * drivers/staging 错误 2 make: * drivers 错误 2 返回最上级菜单。选yes 保存 生效。注:这里可能会提示报错信息。查看报错信息会发现有一个ncurses包未安装利用yum命令安装ncurses#yum install ncurses-devel安装完毕后再编译内核 make menuconfig 此时报错信息就不会出现了5:#make -j4注
12、:这里make -j4 是衍生出来的。如果cpu核数多 可以make -j8 或者直接make 也是可以的。但是安装模块的速度 make -j8make -j4make 模块安装完毕。这里可能会显示一些报错信息 不列举。 一般都是几个模块或者一两个模块未能安装成功。对后面的工作没有影响。不必重新安装模块。6.#make modules_install7. #make install这里的报错信息并不用管。因为先前提到过 有些模块未能成功安装 所以这里会显示一些模块未能找到的报错信息。8.# make moudules 这里一般会出现两种情况(1)失败(2)成功至于为什么会有这两种情况,并不清楚
13、。前后的操作几也就隔了10秒 第一次失败,第二次就成功。虚拟机上容易出现这种情况。 在server上 似乎这种情况出现的几率大大减少了。 相同的操作可能在虚拟机上容易出问题。但是在服务器上输入 就没什么问题。前后大约编译了20多次。发现的这个情况。 起初还在找解决方法。 后来方法未找到。回来又试了一次就成功。所以尽量推荐使用实体机编译内核。 虚拟机比较容易出问题。8:#make moudules_install或者执行 #make install 自动化完成。两个命令都是可以的。以下是执行make install的提示信息结束后也就编译成功了。注:提示信息有可能包含错误信息。例如:这些知识提示,对系统的运行并没有什么影响。 经过查阅。这可能是内核和mkinitrd的BUG。 通过给内核打一些补丁,可以解决掉一些提示。9. 重启 #init 6启动后就可以选择你想要进入的内核版本的系统了。那么编译也就完成了。 参考文献:https:/