J.SUDARSHANREDDY
RTLinux Lab – Introduction
Cpre 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
KernelLoadableModules
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
KernelLoadableModules
RAM
DISK
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
• 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()
Time
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

Rt linux-lab1

  • 1.
    J.SUDARSHANREDDY RTLinux Lab –Introduction Cpre 558 J.SUDARSHANREDDY 01/25/15
  • 2.
    J.SUDARSHANREDDY Contents • Real-Time OperatingSystem (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
  • 3.
    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
  • 4.
    J.SUDARSHANREDDY Can Linux providereal-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
  • 5.
    J.SUDARSHANREDDY Can Linux providereal-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
  • 6.
    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
  • 7.
    J.SUDARSHANREDDY • Open sourceLinux 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
  • 8.
    J.SUDARSHANREDDY Linux Kernel System libraries Devicedrivers Linux kernel Hardware I/O Hardware Interrupts User Processes 01/25/15
  • 9.
    J.SUDARSHANREDDY RTLinux Kernel Hardware System libraries Devicedrivers 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
  • 10.
    J.SUDARSHANREDDY Linux Kernel: codeperspective Linux Monolithic kernel core M1 M2 M3 M4 KernelLoadableModules RAM DISK Module M2 service (system call) User Process M2 THE controller 01/25/15
  • 11.
    J.SUDARSHANREDDY RTLinux Kernel: codeperspective Linux Monolithic kernel core RTM2 RTM3 M1 M2 KernelLoadableModules RAM DISK Load RT core RT Load command RT-Core Module RT core M3 THE controller 01/25/15
  • 12.
    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 • 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
  • 13.
    J.SUDARSHANREDDY So, How dowe 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
  • 14.
    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
  • 15.
    J.SUDARSHANREDDY Lab Policies • Sixassignments 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
  • 16.
    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
  • 17.
    J.SUDARSHANREDDY Handling the harddisk (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
  • 18.
    J.SUDARSHANREDDY Handling the harddisk (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
  • 19.
    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
  • 20.
    J.SUDARSHANREDDY Part 1 • Installthe 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
  • 21.
    J.SUDARSHANREDDY Part 2 • Bootinto 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
  • 22.
    J.SUDARSHANREDDY A kernel moduleVs. 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
  • 23.
    J.SUDARSHANREDDY A typical kernelmodule Init_module() { ……. Perform your module initiation stuff etc.. } Cleanup_module() { ……. Perform cleanup stuff like destroying the threads, freeing memory, etc.. } 01/25/15
  • 24.
    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
  • 25.
    J.SUDARSHANREDDY A typical RTLinuxmodule 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
  • 26.
    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
  • 27.
    J.SUDARSHANREDDY RTL_PRINTF: how doesit work? Rtl_printf printk Printk buffer Kernel ring buffer syslodgconsole Might overflow!! Might overflow!! Log file 01/25/15
  • 28.
    J.SUDARSHANREDDY Other ways ofprinting: 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
  • 29.
    J.SUDARSHANREDDY RTL-FIFO • Creating anddestroying 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
  • 30.
    J.SUDARSHANREDDY Using RTL_FIFO RT Task: my_puttask Linux Task: my_read task RTL FIFO rtf_create() Time rtf_put() open() read() rtf_destroy() 01/25/15
  • 31.
    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
  • 32.