CprE 458/558: Real-Time Systems (G. Manimaran)1 RTLinux Lab – Introduction Cpre 558 Anil...

33
CprE 458/558: Real-Time Systems (G. Manimaran) 1 RTLinux Lab – Introduction Cpre 558 Anil [email protected]

Transcript of CprE 458/558: Real-Time Systems (G. Manimaran)1 RTLinux Lab – Introduction Cpre 558 Anil...

CprE 458/558: Real-Time Systems (G. Manimaran) 1

RTLinux Lab – IntroductionCpre 558

Anil

[email protected]

CprE 458/558: Real-Time Systems (G. Manimaran) 2

Contents• Real-Time Operating System (RTOS) Vs. General Purpose OS

(GPOS)

• Can Linux provide real-time guarantees?

• Commercial RTOSs

• RTLinux Vs. Linux: Architectural comparison

• RTLinux Vs. Linux: Code perspective

• Get the RTLinux setup ready

• Things to Issue and Handling the hard disk

• Lab #1: Detailed discussion

CprE 458/558: Real-Time Systems (G. Manimaran) 3

RTOS Vs. GPOS

• RTOS– needs deterministic timing behavior

– Works under worst case assumptions

• GPOS– high throughput and fairness

– Optimizes for the average case

• Hence, the design objectives of the OSs are different

CprE 458/558: Real-Time Systems (G. Manimaran) 4

Can Linux provide real-time guarantees?-- No!!

• Linux– non-preemptible kernel

• A system call might take long time to complete

– Coarse timer resolution• Tasks can be released only with 10ms precision

– Virtual memory• Introduces unpredictable amount of delays

– Variable priority• Each task is assigned a priority which varies over the time;

this is to achieve fairness

CprE 458/558: Real-Time Systems (G. Manimaran) 5

Can Linux provide real-time guarantees?-- No!! (contd..)

• Linux– Linux will batch several operations for efficient use of H/W delaying

all tasks

– Linux also reorders requests from multiple processes for H/W efficiency

– Linux does not preempt low priority task in a system call, instead queues the high priority task

– Linux makes high priority tasks to wait for low priority tasks to release resources

Therefore, Linux cannot provide real-time guarantees

CprE 458/558: Real-Time Systems (G. Manimaran) 6

Commercial RTOS• RTLinux – Monolithic kernel with loadable modules

• QNX – Microkernel approach

• VxWorks – Monolithic kernel

• LynxOS – Microkernel

• ARTS, Spring, KURT, RTAI, etc….

CprE 458/558: Real-Time Systems (G. Manimaran) 7

• Open source Linux project

• Supports x86, PowerPC, Alpha

• Available as a patch to the regular Linux kernel

• Provides an RT API for developers

• Runs Linux kernel as lowest priority process

RTLinux: Overview

CprE 458/558: Real-Time Systems (G. Manimaran) 8

Linux Kernel

System libraries

Device drivers Linux kernel

Hardware

I/O Hardware Interrupts

User Processes

CprE 458/558: Real-Time Systems (G. Manimaran) 9

RTLinux Kernel

Hardware

System libraries

Device drivers Linux kernel

I/O Software Interrupts

User Processes

RTLinux Plug-in

Real Time Tasks

RT-Scheduler

I/O Hardware Interrupts

Linux is executed in the background

Direct h/w access

CprE 458/558: Real-Time Systems (G. Manimaran) 10

Linux Kernel: code perspective

Linux Monolithic kernel core

M1

M2

M3

M4

Kernel Loadable M

odules

RAM DISK

Module M2 service (system call)

User

Process

M2

THE controller

CprE 458/558: Real-Time Systems (G. Manimaran) 11

RTLinux Kernel: code perspective

Linux Monolithic kernel core

RTM2

RTM3

M1

M2

Kernel Loadable M

odules

RAMDISK

Load RT core

RT Load command

RT-Core Module

RT core

M3

THE controller

CprE 458/558: Real-Time Systems (G. Manimaran) 12

Getting RTLinux ready• Configure and compile a fresh Linux kernel (2.4.29)

– Download the kernel from

http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.29.tar.gz

• Patch the RTLinux to the Linux kernel

• Recompile the kernel and reboot the system into the new kernel

• Configure the RTLinux kernel and compile it

CprE 458/558: Real-Time Systems (G. Manimaran) 13

So, How do we run a RT-application program ?

• Step 1: Write the RT-application program as a kernel module – (You are still in Linux)

• Step 2: Compile the module and check for errors– (You are still in Linux)

• Step 3: Load the RT-Core (or RT Scheduler, etc..) and the RT-application program module– (After this we will be in RTLinux)

• Step 4: Now you are in RTLinux!!!!

CprE 458/558: Real-Time Systems (G. Manimaran) 14

Homework

• Submission 1: – Give a ten line write-up comparing RTLinux with

Linux with at least five differences along with the references.

• Submission 2: – Give a ten line write-up comparing RTLinux with

two other commercial RTOSs with at least five differences for each of them along with the references.

CprE 458/558: Real-Time Systems (G. Manimaran) 15

Lab Policies

• Six assignments in total

• First three assignments are mandatory

• One of the last three assignments is mandatory

• You will be working with a removable hard disk which can be issued from CSG

CprE 458/558: Real-Time Systems (G. Manimaran) 16

Things to Issue

• Issue the following from the CSG– Hard disk (one per group)– Key (one per group)– RHEL – WS3 installation DVD (one per group)

• You need to download the lab01 tar file (lab01.tgz) from the course website.

• The RTLinux lab is in Coover - 1331C

CprE 458/558: Real-Time Systems (G. Manimaran) 17

Handling the hard disk (1)

• Shutdown the PC

• After the power is off, unlock the existing hard disk and take it out

• Insert the hard disk given to you and lock it

• Restart the comp

• Follow the manual you have downloaded from the course website

CprE 458/558: Real-Time Systems (G. Manimaran) 18

Handling the hard disk (2)

• After you are done with the lab:– Shutdown the PC– After the power is off, unlock the hard disk

and remove it– Insert the original hard disk and lock it– Leave the Lab

CprE 458/558: Real-Time Systems (G. Manimaran) 19

RTLinux Lab# 1Cpre 558

[email protected]

CprE 458/558: Real-Time Systems (G. Manimaran) 20

Lab 1: Objectives

• Part 1:– Getting the RTLinux lab setup ready

• Part 2:– Run a few simple hello-world modules

CprE 458/558: Real-Time Systems (G. Manimaran) 21

Part 1

• Install the RHEL-WS3 using the DVD given to you– Go for the auto-partitioning option– Rest everything is straightforward

• Configure and compile fresh Linux kernel (2.4.29)• Patch the RTLinux to the Linux kernel• Recompile the kernel and reboot the system into the

new kernel• Load RT-modules• Instructions are provided in the Lab manual

CprE 458/558: Real-Time Systems (G. Manimaran) 22

Part 2

• Boot into the RTLinux kernel compiled in part-1

• The objectives of the part 2 are:

– Understanding a simple RTLinux kernel module• With one thread (hello-1) and two threads (hello-2)

– Printing from a RTLinux module• rtl_printf (hello-3)• Using rtf_put (RT-FIFO) (hello-4)

CprE 458/558: Real-Time Systems (G. Manimaran) 23

A kernel module Vs. Program• All RT-Tasks are kernel modules. Therefore, we write kernel

modules in this lab.

• A user program runs in user space and the kernel module runs in the kernel space

• A user program starts running at its “main” function

• A kernel module starts running at the “init_module” function and exits via “cleanup_module” function

• Therefore, for a kernel module “init_module” and ‘cleanup_module” are as necessary as “main” is necessary for a C program

CprE 458/558: Real-Time Systems (G. Manimaran) 24

A typical kernel module

Init_module()

{

…….

Perform your module initiation stuff etc..

}

Cleanup_module()

{

…….

Perform cleanup stuff like destroying the threads, freeing memory, etc..

}

CprE 458/558: Real-Time Systems (G. Manimaran) 25

Hello world Module

• Go through the hello world module

• Realize the importance of init_module and cleanup_module

• Notice the way the thread is created and how it is made periodic

• Understand the “pthread_make_periodic” and “pthread_wait” and other interfacing functions

CprE 458/558: Real-Time Systems (G. Manimaran) 26

A typical RTLinux module

Init_module() {

For each thread:Choose the priority function//pthread_set_priority(..);

Assign the “task_function” to the thread

Create the thread

//pthread_create(.., task_function,..); }

Task_function()

{

Pthread_make_periodic_np(p);

while(1)

{

Pthread_wait_np();

//perform the task function

//for this instance

}

}

Cleanup_module(){…….Delete the thread//pthread_delete_np(..);}

This function tells the scheduler that

I am a periodic task with period

“p”

This function tells the scheduler that I am done for this

instance and schedule me after “p” units of time

CprE 458/558: Real-Time Systems (G. Manimaran) 27

Hello World 2

• This module creates two threads using a nice “thread_struct” structure to make the initialization easy and compact.

• Once again go through the interfacing funcitons

• This time put more “rtl_printf” statements and open “/var/log/messages” file to find your output

CprE 458/558: Real-Time Systems (G. Manimaran) 28

RTL_PRINTF: how does it work?

Rtl_printf printk

Printk buffer

Kernel ring buffer

syslodgconsole

Might overflow!!

Might overflow!!Log file

CprE 458/558: Real-Time Systems (G. Manimaran) 29

Other ways of printing: RTL-FIFO

• RTLinux FIFO provides communication mechanisms between RTL threads and Linux task.

• A linux process creates the RTL-FIFO buffer which the RTL threads access and write and read from them

CprE 458/558: Real-Time Systems (G. Manimaran) 30

RTL-FIFO

• Creating and destroying FIFOS:– Using functions: rtf_create and rtf_destroy– These functions are called from linux

process: open(), read(), write();

• Accessing FIFOs from RTL threads– using functions: rtf_put and rtf_get

CprE 458/558: Real-Time Systems (G. Manimaran) 31

Using RTL_FIFO

RT Task: my_put task

Linux Task: my_read task

RTL FIFO

rtf_create()

Tim

e

rtf_put()

open()

read()

rtf_destroy()

CprE 458/558: Real-Time Systems (G. Manimaran) 32

Submissions

• Submission 1:– Submit a five line write-up explaining the working of

the two RTL interfacing functions including:• Pthread_make_periodic_np• Pthread_wait_np• Rtf_create,rtf_destroy, rtf_put, rtf_get

• Submission 2: – Submit a five line write-up giving at least five

differences between a kernel module and a user program.

CprE 458/558: Real-Time Systems (G. Manimaran) 33

Thank You!!