rt linux-lab1

32
J.SUDARSHANREDDY RTLinux Lab – Introduction Cpre 558 J.SUDARSHANREDDY 01/25/15

Upload: jollusudarshanreddy

Post on 17-Jul-2015

193 views

Category:

Education


8 download

TRANSCRIPT

J.SUDARSHANREDDY

RTLinux Lab – IntroductionCpre 558

J.SUDARSHANREDDY

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

Commercial RTOS• RTLinux – Monolithic kernel with loadable modules

• QNX – Microkernel approach

• VxWorks – Monolithic kernel

• LynxOS – Microkernel

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

01/25/15

J.SUDARSHANREDDY

• 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

01/25/15

J.SUDARSHANREDDY

Linux Kernel

System libraries

Device drivers Linux kernel

Hardware

I/O Hardware Interrupts

User Processes

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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!!!!

01/25/15

J.SUDARSHANREDDY

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.

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

Lab 1: Objectives

• Part 1:– Getting the RTLinux lab setup ready

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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)

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

A typical kernel module

Init_module()

{

…….

Perform your module initiation stuff etc..

}

Cleanup_module()

{

…….

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

}

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

RTL_PRINTF: how does it work?

Rtl_printf printk

Printk buffer

Kernel ring buffer

syslodgconsole

Might overflow!!

Might overflow!!Log file

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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

01/25/15

J.SUDARSHANREDDY

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()

01/25/15

J.SUDARSHANREDDY

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.

01/25/15

J.SUDARSHANREDDY

Thank You!!

01/25/15