15 RTLinux的获得及配置安装_sonar安装及配置linux

2020-02-27 其他范文 下载本文

15 RTLinux的获得及配置安装由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“sonar安装及配置linux”。

RT-Linux的原理及实现技术

一、标准Linux在很多方面不能满足实时应用的需要

1.核心态进程不可抢占(non-preemptive)Linux下进程的状态分为用户态和核心态,其核心态进程是不能被抢占的。当低优先级进程进行系统调用而进入核心态时,其他的用户态进程即使优先级再高(包括实时进程)也只能等待,这就产生了优先级逆转(Priority Inversion)的问题。同时进程的调度是基于固定时间片的可变优先级调度,这种调度算法试图保证每一用户程序都得到公平的CPU时间分配,不论进程的优先级多低,系统总会在某个时候分配给该进程一个时间片运行,即使此时有可以运行的高优先级进程,也必须等待低优先级进程的时间片用完。这在实时系统中是不能允许的。实时任务要求在任何需要CPU的时刻都能立刻投入运行,即使其他的任务正在占用CPU运行。

2.内存缺页异常

Linux采取了“虚拟内存(Virtual Memory)技术,将硬盘的存储区域开辟为虚拟内存,用户进程运行在一个比实际内存大的虚拟内存空间内,进程运行所需的页面经常被换入、换出实际内存,由于硬盘的机械存储方式,此操作花费的时间不可预测,无法满足实时应用的要求。

3.频繁关闭中断

在Linux系统调用中,为了保护临界区资源,通常采取关中断的方式。如果低优先级的进程关闭了中断,就会导致高优先级实时进程的中断被阻塞而无法立即得到处理。4.时钟粒度过粗

操作系统必须对时钟粒度和中断处理所需的时间开销进行折衷考虑,时钟粒度越细,意味着时钟中断越频繁,花在中断处理上的时闻开销也越多。Linux通过对硬件时钟的编程,将中断定时器的频率设置为100Hz,时钟粒度仅为10ms,远不能满足像数控系统这样对时钟粒度要求苛刻的实时应用的需要。

二、Linux实时性改造的方法

根据实时系统的性能要求和Linux的特点,目前通行的对Linux进行实时化改造的做法有以下两类:

1.对标准Linux内核直接进行修改,增强其实时性能。如Kurt-Linux,Red-Linux,Hard-hat Linux等。

这种方法主要是通过重新编写内核源代码,使内核具备可抢占性,以达到实时的效果。主要的工作有两方面:一是对时钟机制进行改进,提高系统时钟的分辨率,使粗粒度定时器(10ms)转变为细粒度(微秒级别)定时器;二是修改任务调度机制,提高内核的可抢占性和系统的实时响应能力。

1、Kurt-Linux Kurt-Linux由美国堪萨斯大学开发,它将系统分为三种状态:正常态、实时态和混合态。正常态时采用普通linux的进程调度策略,系统不提供实时支持,实时态时只执行实时进程,非实时进程被挂起,而在混合态时实时进程和非实时进程都被执行。

Kurt-Linux细化时钟粒度的方法是将时钟芯片设置为单次触发状态(One-shot Mode),按需要设置一个超时时间,当此时刻到来时,再根据需要为时钟芯片设置下一个超时时间。利用CPU的时钟计数器可以提供与CPU主频相当的时钟粒度。

在对实时进程的调度上,Kurt-Linux采用的是基于时间的静态实时调度算法,实时任务在设计时已经明确的说明了它们将要发生的时间。这对于那些需要循环执行的任务有很好的调度效果。

2.Red-linux Red-Linux是加州大学Irvine分校开发的实时Linux系统。它同时支持三种类型的进程调度算法:TD(Time Driven,基予时间的调度算法)、PD(Priority Driven,基于优先级的调度算法)和SD(Shared Driven,基于CPU使用比例的调度算法)。系统给每个任务增加了以下属性:Priority(优先级)、Start-Time(开始时间)、Finish-Time(完成时间)、Budget(使用资源数),通过调整这些属性的值以及调度程序使用这些属性的先后顺序,可以实现几乎所有的调度算法,从而把这三种调度算法结合起来。

Red-Linux的进程调度程序由两部分组成:调度器(Schedule Dispatcher)和分配器(Schedule Allocator)。分配器在用户态执行,调度器在核心态执行,分配器负责初始化作业的各属性值,调度器最终决定作业的执行顺序。

此外,Red-Linux通过在内核源代码中增加抢占点(preemption point),使得进程在核心态时也能被抢占,从而减小抢占延迟,提高系统的实时性能。

2.对标准Linux内核进行外部实时化扩展,即采用双内核的方法,在原有Linux基础上增加一个实时内核,所有实时进程都由实时内核来处理,而把标准内核作为该实时内核优先级最低的一个进程来运行。如RT-Linux,RTAI等。

对Linux进行外部实时化扩展是Linux实时化改造的另一种手段,目前比较成熟的是双内核(Dual-Kernel)方法。其实质是在原有标准Linux内核的基础上引入一个小而精巧的实时内核,把标准Linux作为一个普通进程来运行,实现由标准Linux内核完成非实时任务、由实时内核完成实时任务的调度。该方法保证了Linux系统的完整性和稳定性,对原有Linux代码改动较小。RT-Linux和RTAI是双内核方法的典型代表。

三、RT-Linux对Linux进行实时化改造

RT-Linux最早是新墨西哥理工学院(New Mexico Institute of Technology)的一个研究项目,是由Victor Yodaiken提出构想,Victor Yodaiken和Michael Barabanov共同开发成功的硬实时操作系统。它以通用Linux操作系统为基础,既实现了严格意义上的实时服务,也提供标准的POSIX服务。它的基本思想是“架空’’Linux内核,在硬件中断和原来的Linux内核之间加入一个小型的实时内核,把Linux内核作为优先级最低的任务来执行,Linux内核随时可以被优先级更高的实时任务抢占,实时任务与Linux内核之间通过特定的通信机制(如实时FIFO管道)进行通信。这样就从根本上解决了原有Linux的核心态进程不可被抢占的问题,减小了Linux内核所带来的延时。RT-Linux是世界上最早的实时Linux系统,其源代码开放,具有十分优秀的稳定性和硬实时能力,到目前为止,已经在很多领域得到应用,从航天飞机的数据采集、科学仪器测控到电影特技图像处理等众多范畴都有成功的范例。采用RT-Linux有以下几个优点: 1.多任务调度能力强,实时性能优越

RT-Linux将任务运行环境分为实时域和非实时域两种,其中实时域任务以内核线程形式实现,非实时域任务以用户进程或用户线程形式实现。利用RT-Linux的基于优先级的可抢占式多任务调度机制和任务通信机制,可以方便的实现实时任务和非实时任务的调度切换,以及二者之间数据的通信。RT-Linux的硬实时性能优越,在一台普通配置的x86 PC上,其最大中断延迟时间(从处理器检测到中断信号到中断处理程序开始运行的时间间隔)不超过15us,最大任务切换延迟(从调度程序开始运行至任务被启动的时间间隔)不超过25us,这已经接近硬件能力的极限。利用RT-Linux提供的API接口,可以编程实现插补、位置控制

等实时任务以微秒级别运行。

2.源代码开放,可免费使用和修改

RT-Linux是自由软件,可通过在互联网上免费下载获得。这无疑大大降低了系统的开发成本。不仅如此,由于RT-Linux遵循GPL发布,其源代码开放,可按需要自由裁剪定制,因此,基于RT-Linux开发系统,可以完全掌握核心技术,以避免受制于国外的技术垄断。

3.数控系统的开放化、模块化更易实现,开发周期大幅缩短

RT-Linux本身在设计时引入了很多新的软件开发理念,具有很强的开放化、模块化的特点,系统结构可扩展,基于此开发的数控系统,结构将更加合理开放,系统重构性强,程序代码的可重用性和软件的模块化程度大大提高,可大幅缩短开发周期。

4.标准Linux的大多数服务仍然可以使用

RT-Linux的基本原理是将一个小型实时内核加入到标准Linux内核中,把标准Linux作为优先级最低的任务来执行。非实时任务运行在标准Linux中,可以使用标准Linux的大多数服务。利用其提供的丰富的图形显示、网络、数据库等功能,可以很方便的实现数控系统的人机交互界面、网络通信、数据库等高级功能。

综上所述,RT-Linux所具有的强大功能、优良的实时性和稳定性,使其成为开发系统的理想的软件平台。

RT-Linux的结构框图。

为了解决Linux的关中断闯题,RT-Linux采用软件技术来模拟硬件的中断控制器,在Linux和中断控制器之间加入一个中断控制的仿真层,原来的cli,sti,iret指令被相应的汇编宏S-CLI,S-STI,S-IRET所代替。当Linux系统要关闭CPU的中断时,RT-Linux实时内核会截取到这个请求并记录下来,而实际上并不真正关闭硬件中断,这样就避免了由于关中断造成的系统一段时间没有响应的情况,达到了真正的硬实时效果。

硬件中断到来时,RT-Linux实时内核截取该中断,并判断是交由实时内核处理还是标准Linux内核处理。如图3.5所示。

为了解决分时Linux中时钟粒度过粗的问题,RT-Linux通过将系统的实时时钟设置为单次触发状态,可以提供十几个微秒级的调度单位,满足了实时应用的要求。3.1 RT-Linux的任务调度策略

一个实时调度器必须满足3个条件:第一,进程的优先级可以通过API指定,这在Linux中已经实现;第二,调度器必须遵从实时优先级,即总是选择具有最高优先级的进程执行,而不考虑别的因素;第三,调度器在一个固定的时间周期里选择和执行最高优先级的进程。RT-Linux默认情况下采用根据实时应用要求设计的基于任务优先级的抢占式调度策略。周期任务按照周期到达的时间安排任务就绪,然后参加按优先级抢占的调度,优先级最高的任务可以中断当前运行的程序(即使是中断任务)抢占CPU,而不必等到当前运行任务执行完成,优先级较低的任务只有在所有优先级比它高的任务都运行完成后才能投入运行。如果周期任务在周期到达时由于某种原因没有激活运行,则延迟一个周期参加下一次的优先级抢占调度。标准Linux作为实时任务调度的最低优先级任务处于就绪状态等待调度。采用这种调度方法的响应时间最快可达到几微秒(随CPU主频不同而有所差异),这也是为什么RT-Linux在要求严格的硬实时场合得到广泛应用的原因。

3.2 RT-Linux的任务状态

RTLinux中的实时任务在运行过程当中总是处于以下三种状态之一:

1.等待(Waiting)态:也叫睡眠状态或阻塞状态,是指正在执某些事件而无法得到执行,放弃CPU而处于暂停状态。此时任务处于等待队列中,待资源有效时唤醒,也可由其他任务通过信号(SINgal)定时中断唤醒,唤醒后进入就绪队列并立即引起调度程序运行。2.就绪(READY)态:就是除CPU以外其它运行条件都已具备,只是因为有更高优先级的任务正在使用CPU而不能投入运行,任务处于等待CPU的状态,处于就绪队列中,一旦获得CPU便立即投入运行。

3.运行(RUNNING)态:就是任务正在CPU上运行,在单CPU的计算机系统中,任一时刻只有一个任务处于运行状态。

以上三种状态是指进程运行时的状态,另外还有停止时状态即挂起状态:即由于某种原因调度程序将正在执行或没有执行的任务挂起,使之处于静止状态。将正在执行的任务暂停执行,就绪的任务将暂时不能接受调度,而等待的任务,即使引起阻塞的事件消失也不能被调度。一个任务或是活动的或是静止的(即被挂起的),未被挂起的就绪状态和等待状态分别称为“活动就绪“和“活动等待”。处于挂起状态的任务要先经过解除挂起才能恢复到挂起前的状态。

3.3 RT-Linux的调度核心

RT-Linux调度核心由时钟中断服务程序和任务调度程序组成,它决定哪个任务获得CPU,并监控各任务状态。根据调度策略和各任务状态,调度核心对任务的投入运行的时刻和运行时间实行管理,系统中各任务只有通过调度核心才能运行或停止运行。调度核心管理多任务的原则是:在时钟中断时无论任务是否运行都应返回调度核心进行重新调度,任务之间不能绕过调度程序而直接相互转入。

1.时钟中断处理程序:RT-Linux中时钟中断的频率不是固定的,系统会根据其中的所有实时任务的频率选择一个合适的值。当时钟中断发生时,首先对被挂起的任务进行现场保护及协处理器数据保护,然后使所有定时任务的计数器开始计时,若某任务定时时间到则设置该任务的允许标志,使其进入就绪队列。中断结束时,使用IRET将调度程序的CS(Code Segment,代码段寄存器)、IP(Instruction Pointer,指令指针)弹出堆栈,转向调度程序。

2.任务调度程序:任务调度程序将检查就绪队列和阻塞队列中各个任务的状态,并据此进行调度。时钟中断处理并不是调度程序运行的唯一时机,实时任务可以通过调用一些函数强制调度程序运行。

3.4 RT-Linux的调度过程

RT-Linux中任务的状态转换过程是:运行态任务经系统调度进入等待态,等待态任务经唤醒进入就绪态,就绪态任务经调度获得CPU及相关资源进入运行态,如果挂起,则任务进入暂停状态。例如,当正在运行的任务A变为等待状态后,调度程序立即把CPU分配给另外一个就绪任务,因此,当使任务A等待的事件消失后,任务A不会立即恢复到运行状态,而是转入就绪状态,重新等待获得CPU。任务的各种状态之间不能直接相互转入,某一状态必须通过调度程序的调度才能进入另一状态。如图3-6所示。

RT-Linux实时任务的调度是通过实时任务本身和RT-Linux的调度程序合作实现的,实时任务可以利用RT-Linux提供的API对自己的运行状态进行控制,但是这种控制最终还是通过RT-Linux调度程序才能起作用。调度程序的工作实际上是采用某种调度算法从就绪队

列中挑选出一个任务投入运行,RT-Linux实时内核的调度程序采用纯粹的基于优先级时间驱动的调度策略,也就是说在RT-Linux中永远是优先级最高的就绪任务投入运行,直到它将自己挂起或者有更高优先级任务就绪。如果数个任务具有相同的优先级,且他们都是就绪队列中优先级最高的任务,RT-Linux调度器按先入先出(Fifo)的策略进行调度。

3.5 基予RT-Linux的实时应用软件开发关键技术 在基予RT-Linux的实时应用软件中,实时部分是作为内核的模块存在的。模块是内核的一部分,它没有被编译到内核中去,可以用insmod命令动态插入到内核中去,当不需要时,又可将其从内核中卸载掉,这样就便得内核的配置变得非常灵活。内核态的主体程序有两种实现方式:中断处理和周期实时线程方式。中断处理方式可以对外部突发事件作出及时响应,因而适用于处理一些要求与硬件信号精确网步的实时任务,以及对实时性要求很高的紧急任务。周期实时线程可以精确指定线程的执行周期(精度为纳秒级),因而适合处理一些周期运行的高精度定时任务。

1中断处理

中断是一种系统机制,它使得系统中的进程(或线程)可以在非主动等待或查询的情况下,对外部的中断信号迅速作出响应,暂停当前工作,改变当前状态或执行事先设定的中断处理子程序。对于任何实时软件来说,中断机制都是非常重要的。按照中断源的不同,中断可分为硬中断和软中断。如果中断信号来自硬件(在PC中为8259中断控制器),则称为硬中断;如果中断来自系统中另一个运行的进程(或线程),则称为软中断。在传统的MS—DOS等操作系统中,对硬中断和软中断的处理需要用汇编语言完成中断向量等的设定工作,非常麻烦。面在RT-Linux中,硬中断和软中断均由系统提供的特定API实现,实时软件开发者只需简单调用相关API,即可高效稳定地完成中断申请、中断释放等操作。

1)硬中断API RT-Linux提供的硬中断操作API主要有rtl_request_irq()和rtl_free__irq0,其函数原型(在rtl_core.h 声明)如下:

im rtl_request_irq(unsigned int irq,unsigned int(*handler)(unsigned int irq,struct pt_regs*)); ∥为某个硬件IRQ号设定一个中断处理函数

int rtl_freeirq(ungned int irq);∥撤销该硬件IRQ号所对应的中断处理函数 对于实时任务使用的硬中断以及编写所使用硬件设备驱动程序时,必须在内核模块入口init_module0 中使用以上两个函数为硬件获取和释放中断。

2)软中断API RT-Linux提供的软中断操作API主要有rtl_get_soft irq(),rtl_global_pend_irq()和 Rtl_free_soft_irq(),其函数原型(在rtl_core.h中声明)如下:

rtl_get_soft_irq(void(*handler)(int,void*,struct pt_regs*),const char*devname);//申请一个软中断irQ号,并为其安装对应的中断处理函数

void rtl_global_pend_irq(int irq);∥触发软中断

void rtl_free_sofl_irq(int irq);∥撤销软中断IRQ号对应中断处理函数 3.6 内核实时线程编程

在多线程技术没有被引入到Linux之前,Linux中的应用程序都是用进程来实现的。所谓进程(proce),是指操作系统中运行的程序,像Linux这样的多任务操作系统可以同时运行多个程序,即具备多进程能力;所谓线程(thread),则是指在一个程序中的多个执行部分,即一个程序可以完成几个任务,Linux在1996年首次加入了多线程的支持,基于Linux Thread库实现。二者相比,线程的优势在于每个线程与创建该线程的进程共享地址空间,同时进程

内部同时运行的多个线程并不被操作系统视为独立的应用程序,因而不需要进行与进程类似的调度、资源管理等操作,节约了系统资源开销,在线程之间切换也比在进程间切换简单许多。

RT-Linux实时内核是一个小而简单的内核,只提供基本的实时服务,实时任务仅完成实时性要求高、任务简单的工作。实时任务运行在内核空间中,因此实时任务的编程必须使用内核编程技术。内核编程与一般的在操作系统平台上进行的用户空间编程相比,有很多不同之处。内核程序是按内核模块的方式编写的,C程序的入口不再是main(),而是init_module(),程序的结尾则相应变成了cleanup_module(),程序代码编写完成后,用linux提供的gcc编译器编译成扩展名为.o的目标内核模块,然后使用insmod命令把目标模块插入内核中,作为一个内核模块在内核中运行,使用rmmod命令则可以将内核模块卸载。当内核模块被插入内核空间运行时,init_module完成资源的创建、分配和初始化操作,内核模块卸载时,cleanup_module被调用,完成已使用资源的释放。

由于线程的优越性,RT-Linux中实时任务以内核实时线程的形式实现。从RT-LinuxV2.0版本开始,RT-Linux开始提供兼容POSIX标准的内核实时线程编程API,主要有以下几个(在rtl_sched.h中声明):

int pthread_create(pthread_t*thread, pthread_attrt*attr, void*(*start_routine)(void*),void*arg,struct module*mod);

//创建一个实时线程

int pthread_delete_np(pthread_t thread);//删除一个实时线程.

int pthread_make__periodie__np(pthread_t P,hrtime_t start_time,hrtime_t period);//设定一个周期性实时线程 int pthread_ suspend_np(pthread t thread); ∥挂起一个线程.

int pthread wakeup_np(pthread t thread);

int pthread_wait_np(void);∥将周期线程挂起,下一周期开始时被挂起的周期线程将由 系统唤醒

采用线程互斥锁来实现线程间的互斥,主要API如下(在rtl_mutex.h中声明): int pthread_mutex_lock(pthread_mutex_t*mutex);//linux 将 线程锁定并挂起. im pthread_mutex_unlock(pthread_ mutex_t*mutex);//将互斥锁解开

RT-Linux以内核实时线程的形式实现实时任务,最大程度地保证了实时性。实时任务在内核中运行,可以方便地实现对硬件端翻的访问。但这样做的代价是可使用的函数资源有限,Linux的许多用户空间蘧数库的飚数不能被内核程痔安全调用。为了使内核空间的程序获得更多的Linux服务的支持,内核空间的实时任务与用户空间的非实时任务必须进行数据信息的交换,因此,线程问通信是一个必须解决的关键问题。

3.7 线程间通信

RT-Linux系统中,实时任务以内核线程形式实现,非实时任务以用户线程形式实现(当然也可以每个非实时任务用单一用户进程来实现,但将互相关联的非实时任务用同一进程的多个线程来实现显然更加合理和高效),RT-Linux的实时任务并不能直接进行系统调用,它必须通过特定的方法和Linux线程进行通信。RT-Linux提供的通信方法主要有以下几种:

1.共享内存 在RT-Linux启动的时候,通过指定给内核一个mem参数决定内核可以使用的内存大小,空出来的内存空间用予实时任务和Linux线程进行通信的共享内存。在RT-Linux任务中通过/dev/mem设备在这段内存中寻址,Linux线程也通过读取这段内存的数据获得实时任务提供的信息,这样就完成了实时任务和Linux线程之间的通信。

共享内存在RT-Linux中以驱动程序的形式存在,称为mbuff。它是由Tomasz Mo提供的一个使用共享内存的驱动程序,用来实现核心内存和用户内存空间之间的共享。通过使用mbuff提供的mubff_alloc()函数给申请的内存起一个名字,mbuff驱动程序使用一个链表通过这个名字来管理al这些申请的内存。通过这个驱动程序可在包括RT-Linux任务的Linux内核内存空间和用户内存空间之间共享内存。

要使用共享内存通信,需要在内核中插入mbuff.o模块,可以使用mubff_alloc()和mbuff_fre()函数申请和释放共享内存,其函数原型如下(在mbuff.h 中声明):

Void*mbuff_alloc(char*name,int size);//申请一块指定大小和名称的共享内存区

void mbuff_free(char*name,void*mbuf);//释放申请的共享内存区 2.实时FIFO(First In First Out)实时FIFO是能够被内核实时线程和用户空间线程访问的先入先出队列,又称命名管道(pipe),按先入先出的方式工作,即第一个写入的数据将首先被读出。它是一种单向的通讯机制,通过在/dev下面创建FIFO的字符设备,实时任务可以向这个字符设备写数据,非实时任务可以从这个设备读取数据,对FIFO设备的读写是不同步的,非实时任务对设备的读操作并不会影响实时任务对它的写操作。通过两路实时FIFO,可以构成双向的数据交换通道(双缓冲),如图3.7所示。

这种机制是在RT-Linux中实时内核线程之间以及实时内核线程与用户线程之间最主要的通信手段,FIFO的作用是以串行数据流的方式完成两个线程之间的数据传输。例如在数据采集任务中,实时任务将数据采集并进行处理,然后写到FIFO设备中,通过一个在X Window环境中的图形界面程序读取FIFO的数据,然后显示在X WindOW窗口中。这样,既保证了对数据的实时处理,又提供了友好的监控界面。

RT-Linux提供的操作实时FIFO的API主要有(在rtl_fifo.h中声明): int rtf_create(unsigned int fifo, int size);/创建指定大小的FIFO int rtf_destroy(unsigned int fifo); //删除指定的FIFO int rtf_get(unsigned int fifo,void*buf, int count); //从FIFO读count字节的数据 int rtf_put(unsigned im fifo,void*buf, int count); ∥向FIFO写count字节的数据 除了rtf_get0和rtf__put()函数以外,实时内核线程和用户空间线程也可以用标准的open、close、read、write系统调用对实时FIFO进行访问和控制。

四、安装RT-Linux的方法和步骤

RT-Linux是针对Linux官方原版内核发布的,因此在RT-Linux官方网站上给出的安装方法只适用于Linux原版内核,在Red Hat Linux 9(内核版本2.4.20-8)环境下安装RT-Linux3.1,实践表明是成功的。

1.下载RT-Linux完整的源代码tar包,存放在/usr/src目录下。RT-Linux的免费版本可以从http://www.daodoc.com 获得,文件名为linux-2.4.20.tar.tgz 3.将Linux源代码右键解压至/usr/src目录,解压后会出现/usr/src/linux-2.4.20目录;

4.在Shell终端中输入命令,切换至src目录:

#cd/usr/src 建立指向文件夹Iinux 2.4.20的符号连接,以简化后续命令输入:

In-S linux-2.4.20 linux 5.解压rtlinux-3.1.tar.gz至/usr/src目录,解压后会出现/src/usr/rtlinux3.1目录,下的在patches目录下找到与内核版本相对应的patch文件,如kernel_patch-2.4.20-rtl,并将其拷贝至/usr/src目录下,为简化后续命令输入,可将其改名为rtlinux-patch;

6。在Shell终端中输入命令,切换至linux源代码目录,并patch内核: #cd/usr/src/linux #patch –pl

#make config或make menuconfig或make xconfig 此步骤中配置的是RT-Linux系统的子内核,Linux提供给RT-Linttx的所有支持必须在此步骤中进行配置。其中,make config是传统的以字符提示模式进行内核配置的命令,make menuconfig是菜单形式进行内核配置的交互式命令,make xconfig是在X Window下以窗口形式进行内核配置的命令,这里推荐采用make xconfig,其操作简洁易懂,配置界面如图3-8所示。

其中,较为重要的选项有以下几个:Proceor Type and features,按照本机的处理器类型选择即可,在单CPU的微机上,一定要禁止“多CPU支持选项’’,否则RT-Linux不能正常运行;Networking options,完成对网络功能的配置;USB support,完成对USB设备的支持;为了后续开发人机交互界面的需要,需要打开对Frambuffer的支持,首先启动Code maturity level options的服务,然后在Console drivers选项卡下选择“支持Framebuffer“即可;此外,在实时系统中,高级电源管理功能是不需要的,需取消APM BlOS support选项。

8.建立依赖关系:

#make dep 9编译内核及内核模块,并进行安装: #make bzlmage

#make modules #make modules_install 10.安装新内核,将/arch/i386/boot目录下刚编译得到的bzlmage文件拷贝至/boot目录下,并更名至rtlinuz:

#cp arch/i386/boot/zlmage boot/rtlinuz 11.配置Grub,编辑/boot/grub/grub conf加上RT Linux启动选项.例如: title RT_Linux //设置RT-Liaux系统启动时的提示字符

root(hd l,5)//设置RT-Linux启动时挂载位置

kernel/boot/rtlinuz ro root=/dev/hdb6 //设置RT-Linux系统引导时所使用的内核 12.重新启动计算机: #reboot或shutdown-r now 13.计算机重新启动后,在Grub启动菜单中选择”RT-Linux”,回车后进入RT-Linux系统:

14.在Shell终端中输入命令,进入RT-Linux源代码包所在目录: #cd/usr/src/rtlinux_3.1 15.配置RT-Linux:

#make config或make menuconfig或make xconfig 此处可按缺省配置即可:

16.建立依赖关系(可选,如跳过则后面的make命令会自动建立依赖关系): #make dep 17 编译RT-Linux内核及实时模块,并进行安装:

#make #make install 该命令会在/usr目录下创建RT Linux-xx(xx指RTLinux的版本号)目录,其中包括RT-Linux运行所需的头文件及相关文档等;

18.测试RT-Linux内核及实时模块是否能正常工作(可选): #make regreion 如果RT-Linux没有正确配置和编译,运行此命令会令系统挂起,正常的情况下会输出测试通过的“oK"信息;

19.最后,启动RT-Linux内核模块:

#rtlinux start 该命令会将/usr/src/RTLinux_xx/Modules目录下的RT-Linux内核模块加载到内核中运行,这些模块包括rtl.o ,rtl_fifo.o、mbuff.o、psc.O、rtl_posicio.o、rtl_sched.o、rtl_time.o等。控制终端会输出模块加载成功或失败的提示信息,例如:

(+)rt1.o(+)rtl_fifo.o(+)mbuff.o …

其中(+)表示相应的模块加载成功,(-)表示模块加载失败。20.如果要终止RT-Linux的运行,可使用以下命令:

#rtlinux stop 它会从内核中卸载RT-Linux模块,同样地,在控制终端会有以下的提示信息输出:(-)rt1.o(-)rtl_fifo.o

(-)mbuff.o

《15 RTLinux的获得及配置安装.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
15 RTLinux的获得及配置安装
点击下载文档
相关专题 sonar安装及配置linux RTLinux sonar安装及配置linux RTLinux
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文