Return to Home Page

Advanced Training & Research Labs

Document ID : courses_overview_01.html
Revision ID : 1.00
Date : March 8, 2005
Author : V. Radhakrishnan

----------------------------------------------------------------------------------------------------------------------------------------

ATR-Labs specializes in delivering courses of value to its customers.

This document summarizes the various courses offered. Use it as a sort of reference guide that describes the various courses offered.

ATR-Labs also provides customized course content after discussions with the client.
------------------------------------------------------------
Code Description Duration
------------------------------------------------------------

Systems Programming Series
---------------------------------------------------------------

ATR-001

Linux Kernel Internals

3 days

ATR-002

Linux Device Drivers

3 days

ATR-003

Advanced Linux Kernel Debugging

3 days

ATR-004

Linux Internals + Device Drivers

5 days

ATR-010

PCI programming with Linux

1 day

ATR-011

USB programming with Linux

1 day

ATR-012

Network drivers under Linux

2 days

ATR-030

Advanced Linux Networking

3 days

ATR-040

Realtime Apps with RT-Linux

3 days

ATR-041

Embedded linux

3 days



Administration & Networking Series
----------------------------------------------------------------------------------

ATR-101

Linux System Administration

3 days

ATR-102

Linux Network Services

3 days

ATR-103

Linux System & Network Admin.

5 days

ATR-104

Linux System & Network Security

3 days



Application Development Series
-------------------------------------------------------------------------

ATR-301

Linux Application Development

3 days

ATR-302

Linux Network Programming

3 days

ATR-303

Advanced Unix Programming

3 days




SYSTEMS PROGRAMMING SERIES

ATR-001 : Linux Kernel Internals
----------------------------------------------

This is a 3 day program that covers all the essential topics required to start programming the linux kernel. Starting from scratch, it covers topics like compiling a new kernel, creation of loadable kernel modules, process management, memory management,file systems, Interrupts & ISRs, kernel programming mechanisms & APIs such as timers, task queues, wait-queues etc.

It also dwells on the important topic of kernel synchronization using kernel semaphores, spinlocks, bit-operations, circular buffers etc. The course then goes onto hardware interfacing mechanisms & device management and finally discusses kernel debugging concepts.

This would be an ideal course for entry level systems programmers as well as systems administrators who wish to know what's happening under the "hood". The course would also be ideal for systems programmers coming into contact with linux from other operating environments such as Windows or other Unix flavours.

A basic knowledge of linux ( user-level commands and vi ) and a strong knowledge of 'C' programming is the only pre-requisite for this course.

ATR-002 : Linux Device Drivers
--------------------------------------------

This is a 3 day program that is ideal for those who have dabbled with linux for some time and wish to have a formal introduction to device driver writing under linux. This would be an ideal course for those already familiar with writing device drivers under other environments such as Windows or other flavours of Unix. It is also a great continuation course for those who have completed ATR-001 above.

The course covers loadable kernel modules, Interrupts & ISRs,device management & interfacing,character device drivers, PCI bus interfacing, USB interfacing, network drivers, kernel interfacing with the proc_fs, sysrq, ioctl mechanisms and using a kernel debugger like kdb.

A strong knowledge of 'C' programming is assumed as well as some knowledge of Systems Programming.

ATR-003 : Advanced Linux Kernel Debugging
----------------------------------------------------------------

This is a 3 day program that covers various kernel debugging mechanisms. Starting from simple techniques such as printk, interfacing with the proc_fs, programming the magic SysRq key, ioctl calls etc, it then covers intermediate techniques such as trace toolkits, strace, ksymoops,custom logfiles, klogd and syslogd, debugging loadable kernel modules etc. The course then covers advanced topics such as kdb, kgdb, LKCD ( The Linux Kernel Crash Dump ) and IBM's Dynamic Probes.

This course requires participants to have some knowledge and experience of linux internals and/or drivers. Ideally suited for linux systems programmers with 6 months to 1 year experience.

ATR-004 : Linux Internals + Device Drivers
-----------------------------------------------------------

This is a 5-day program that merges ATR-001 and ATR-002 above, cutting out some redundancy. ATR-002 begins with some topics that is included in ATR-001's concluding sessions such as Loadable Kernel Modules, Interrupts/ISRs, Device Management & Interfacing.

This would be an excellent course for an entire team getting into linux for the first time and who require a complete introduction to internals as well as writing device drivers.

The pre-requisite for this course is a strong knowledge of 'C' programming and some user-level experience with linux such as using a console text editor like vi etc.

ATR-010 : PCI programming with linux
------------------------------------------------------

This is a 1-day program ideally suited for a person who already knows how to write kernel programs under linux, but who wants to know more about PCI device interfacing.

The course covers the PCI Bus Protocol ( PCI 2.2 ) in detail. It then covers the linux pciutils package which covers the lspci, setpci commands and the /proc/pci and /proc/bus/pci/devices interfaces. The course then covers the pci APIs available for dealing with device configuration and uses a RTL-8139 network interface card to show PCI programming in great detail.

ATR-011 : USB programming with linux
-------------------------------------------------------

This is a 1-day program ideally suited for a person who already knows how to write kernel programs under linux, but who wants to know more about USB device interfacing.

The course covers the USB 2.0 protocol and discusses the role of the Host Controller, Root Hub and the USBD interfaces. The course then covers the various transfer types and the way it is dealt with in linux. The usbutils package is covered and the usb.h file is dissected. The various APIs especially the URB mechanism is dealt with in great detail. The program also discusses user mode USB drivers and its architecture.

Finally, a USB-to-USB host bridge example is used as a case study that uses the Prolific Technologies chipset PL-2301.

ATR-012 : Network drivers under linux
-----------------------------------------------------

This is a 2-day program ideally suited for a person who already knows how to write kernel programs under linux, but who wants to know more about network device interfacing.

The course discusses the network driver structure, important kernel data structures such as socket buffers, struct net_device, struct net_device_stats etc. The course then deals with packet reception and transmission and uses the RTL-8139C chipset for a code walkthrough. The course also covers usbnet.o which is a network driver on top of a USB host-to-host bridge.

ATR-030 : Advanced Linux Networking
------------------------------------------------------

This is a 3-day advanced course in linux networking. The course gives a complete and detailed treatment of the TCP/IP layer inside linux. Starting from basic socket programming, it then covers advanced socket internals, special socket communication protocols such as Netlink Sockets and RT_Netlink sockets, IP architecture inside linux such as Forwarding Information Base (FIBs), Neighbour Tables, routing caches, manipulation of routing tables, Ethernet layer and driver interfacing mechanisms. The course uses the RTL-8139C chipset and the PL-2301 USB chipset as a vehicle to teach advanced networking concepts.

ATR-040 : Realtime Apps with RT-Linux
-------------------------------------------------------

This is a 3-day program that discusses Realtime concepts, Hard Realtime versus Soft Realtime,Priority Inversion Problem and the Priority Inheritance Protocol, Ceiling Priority Protocol,Mutexes and Kernel Synchronization problems and their resolutions associated with realtime applications. The course discusses how to use standard linux and RT-Linux together, the RT-Linux POSIX pthread interface APIs and some case studies.

ATR-041 : Embedded linux
-------------------------------------

This is a 3-day program that teaches how to build a complete embedded application using standard GNU Linux. The program begins by an explanation of how to build a small footprint kernel,static and dynamic libraries, linux loading sequence and boot loaders, building custom shells,linux initialization scripts, root file system, ram disks, compressed root file systems, downloading from development to target systems using a variety of mechanisms, debugging target images ( kernel as well as applications ) etc.

The course uses an IDE to Compactflash adaptor to boot linux from an 8 MB boot device.


ADMINISTRATION & NETWORKING SERIES

ATR-101 : Linux System Administration
-------------------------------------------------------

This is a 3-day program that covers basic installing linux, basic linux administration, vi, shell programming, user and group management, basic linux commands, backup & restore operations, productivity tools like automating tasks, logfiles,initialization and startup scripts etc.

The course is ideal for Windows administrators coming into linux for the first time.

ATR-102 : Linux Network Services
------------------------------------------------

This is a 3-day program that is meant for a beginner linux administrator or someone who has already dabbled with linux for some time.

The course mainly concentrates on setting up various linux networking services such as DNS using BIND, DHCP, NFS, NIS, Samba, OpenLDAP, Apache, Squid, vsftpd, telnet/rlogin, sendmail, imap & pop3 services.

ATR-103 : Linux System & Network Administration
-----------------------------------------------------------------------

This is a 5-day program that merges courses ATR-101 and ATR-102 above. Ideally meant as a complete and comprehensive introduction to Systems Administration as well as Network Services under linux.

ATR-104 : Linux System & Network Security
-------------------------------------------------------------

This is a 3-day advanced course for seasoned administrators who wish to make their servers more secure. Starting from scratch on Network Security, it covers packet filtering mechanisms using iptables, stateless and stateful firewalls, creating de-militarized zones, hardening basic network services such as webservers, ftp-servers, mailservers etc. The course covers Intruder Detection Systems such as tripwire, Port Scanners such as Nessus, log file attacks, Denial Of Service attacks, IP Spoofing, Trojans, Viruses, Buffer Overflow problems etc.

The course will also be valuable for administrators of other systems since many of the problems discussed are quite generic. However, tools for tackling the problems will be linux based.


APPLICATION DEVELOPMENT SERIES

ATR-301 : Linux Application Development
-----------------------------------------------------------

This is a 3-day program that provides a detailed treatment of how to develop and debug applications under linux. The course covers the GNU compiler collection gcc, the GNU 'C' compiler, assembler,mixed language programming considerations, system calls, linker/loader and the linker scripts,tools like objdump, nm, strip etc. The course then covers building and managing static archives using the ar tool, and building dynamic libraries and the concept of SONAMEs.

The course covers gdb and indicates how to use gdb effectively for debugging core dumps as well as by attaching to running processes. It discusses issues relating to debugging multi-threaded applications.

The course covers the POSIX pthread library and mutexes, semaphores and condition variables.

ATR-302 : Linux Network Programming
-------------------------------------------------------

This is a 3-day program that covers basic socket programming APIs such as socket, bind, listen, read, write, sendto, recvfrom, close etc. It covers Unix Domain Sockets (AF_UNIX) as well as AF_INET families. The course teaches how to build UDP as well as TCP applications and discusses the underlying protocols in detail.

ATR-303 : Advanced Unix Programming
--------------------------------------------------------

This is a 3-day program meant for advanced developers. This covers important concepts like system calls, basic and advanced file and directory handling calls, signals and handlers, IPC mechanisms ( both 4.3 BSD as well as Sys V IPC mechanisms ) such as pipes, named pipes, message queues, semaphores and shared memory, brief discussion on unix domain sockets as a means of IPC, terminal and pseudo-terminals, process management & daemon processes.


Return to Home Page