A comprehensive expert level course covering all aspects of system programming like
Linux Programming, Kernel Programming, Embedded Linux , Network Programming,
Linux Device Drivers
Linux Driver and Embedded Developer Course Highlights
1. Linux Driver and
Embedded Developer
Course Highlights
The flagship training program from Veda Solutions, successfully being conducted from
the past 10 years
A comprehensive expert level course covering all aspects of system programming like
Linux Programming, Kernel Programming, Embedded Linux , Network Programming,
Linux Device Drivers
Most attended and recommended by working professionals (from over 100 companies
and 8 nations)
From corporate trainers to over 20 major technology and embedded companies
Available in regular, full-time, weekend workshops, audio-video and online training
modes
301, Prashanthiram Towers, Saradhi Studio Lane, Ameerpet, Hyderabad
Ph:040-66100265 Email: info@techveda.org
www.techveda.org
1
2. Who should attend?
Working professionals expecting projects/work assignments on Embedded Linux, Linux
kernel programming, Device Drivers or other core system development requirements
Working professionals looking to upgrade their system development skills on Linux
Programmers from Windows OS platform interested to add/migrate to Linux and
Embedded Systems
Microcontroller based embedded developers who are willing to upgrade their skills and
enhance their career positions
Course pre-requisites
Proficiency in C programming
Knowledge of basic Linux commands
What you will learn?
Linux programming essentials, for understanding the key Linux; issues, concepts and
finer nuances of programming to get a proper grounding before getting deeper into
core system development
Linux Kernel Programming and Internals for getting a complete grip on core OS concepts
and module programming
Linux Device Drivers and Embedded Drivers enabling you to start writing Driver
programs for embedded and GPOS targets
Practical Embedded Linux enablement skills for any target hardware like ARM and so on.
Course Duration
Regular mode – 3 months (1.5 hrs. per day, five days a week)
Also available in Full time, Weekend Workshops, Audio-Video and Online mode (refer
website/counselor for details)
Why Veda Solutions?
Most recommended training organization by working professionals
10 years of training experience in Embedded Linux and Linux system programming
Delivered corporate training to over 20 technology majors including Sasken, NCR, UTCFS, Xilinx and so on
First institute in Asia to start online courses on Linux Kernel, Device Drivers and
Embedded Linux
Participants from over 8 nations and 100 companies
2
3. Course Contents
This course is divided into three logical modules to enable easy and effective understanding of
the entire course
Linux Programming Essentials
Gnu compiler distribution
Process management
Understanding compile & build process
Introduction to program loading
Tool chain
Process, defined
Object file analysis
Understanding process address space.
Executable Images
Kernel process descriptor.
Binary Portability
Accessing kernel process descriptor
information
Exploring object files
Introduction to Linux Process scheduler
Need for understanding object files
Scheduling policies & priorities
Introduction to the Binary File Formats
Process scheduling for multi/many
(ELF, COFF, XCOFF).
core systems
Understanding ELF file format
Process affinity
Inspecting object files
Linux process privileges
Extracting sections from object files
Introduction to process resource limits
Converting executable to other
Use cases & standard practices
formats (srec, ihex, binary)
Use cases
Stack Analysis
Introduction to stack
Exploring Linkers and Build process
Understanding how stack grows and
Build process defined
shrinks
Role of Build scripts in build process
Understanding how function
Build script syntax
parameters are passed.
Need to modify Build scripts
Understanding how stack frames are
Use cases & standard practices
created and destroyed.
Libraries
Introduction to libraries
Creating Static Libraries
Creating Shared Libraries
Using Libraries
Managing dynamic libraries
Use cases & standard practices
Application prg. Interfaces (API)
Understanding need of Api
API vs system calls
User mode/ kernel mode transitions
Unix common API standards (Posix,
BsD , SYS V)
APIs and application portability
API design practices
Use cases and standard practices
3
4. Managing process address space
Introduction to virtual address space
Stack allocations
Heap/Data segment management
Memory maps
Dynamic memory allocation & deallocation routines
Choosing right memory allocation
mechanism
Manipulating memory blocks
Swapping Memory Areas
Memory locking
Use cases & standard practices
Linux I/O architecture
Introduction to components of I/O
architecture
Objectives of Linux I/O model
Virtual file system
File system services
I/O cache
Understanding file descriptors & inode
structures
File I/O operations
Introduction to common file APIs
Accessing file attributes
Standard I/O operations
File control operations(fcntl())
Alternate File I/O models
Huge file I/O
Monitoring File and directory events
Use cases
I/O operations of special files
Handling Device Files
Handling Pipe files
/proc file system
/sys file system
I/O multiplexing
Need for Multiplexed I/O
Standard methods
Linux support for I/O multiplexing
Use cases & standard practices
Signal management
Introduction to Signals
Linux signal types & categories
Signal generation and delivery
Linux signal management datastructures
Switching signal dispositions
Writing async signal handlers
Using signals for process
communication
Blocking & Unblocking signal delivery
Use cases & standard Practices
Concurrent application designs
Introduction to concurrent applications
Understanding need for concurrent
apps
Standard Concurrency models
Comparative analysis of concurrency
models
Use cases & standard Practices
Process creation calls
Process creation calls (fork, vfork,
execve)
Monitoring child process
Linux kernel process creation routines
Copy-on-write resources
Handling child process termination
events
Linux threads interface (clone)
Use cases & standard Practices
4
5. Posix Threads
Introduction to posix thread interface
Thread creation and management
Thread attributes
Detecting Race conditions
Atomic operations
Mutual exclusions methods (mutex,
semaphores, spinlocks)
Detecting and handling deadlock
events
Choosing right Mutual exclusion
method
Designing scalable critical sections
Exploring Thread synchronization
methods (signals, condition
variables...)
Choosing correct Thread
synchronization method
Thread local data
Thread cancellations & exit handlers
Linux Native posix threading support
(NPTL)
Time keeping & Timers
Calendar Time
Time conversion routines
Software time keeping
Process time
BSD Interval Timers for running
periodic tasks
Accuracy of timers
Posix clocks
Posix interval timers
Linux interval timer interface
Use cases & standard practices
Inter-process communication
Introduction to IPC subsystem
Linux kernel IPC resources
IPC communication resources (pipes,
msgqs., shared memory)
IPC synchronization resources
(semaphores)
Comparative analysis of SYSV and
POSIX IPC Implementations
IPC kernel data structures
Use cases & standard Practices
Network programming
Introduction to networking
Categories of Network Applications
Network communication application
designs
Understanding Protocol stacks
Understanding TCP/IP networks
Exploring Linux kernel network
subsystem
Linux socket abstraction layer
Introduction to socket layer
Overview of socket APIs
Programming TCP/IP apps using socket
APIs
Programming UDP/IP apps using socket
APIs
Exploring socket data structures
Understanding socket attributes
Introduction to Raw sockets
Programming apps using Raw sockets
Alternate models for implementing
network apps
(Without using Socket APIs)
Use cases & standard Practices
5
6. Process communication with UNIX domain
sockets
Stream sockets in Unix domain
Datagram sockets in Unix domain
Abstract socket namespace
Build automation tools
Introduction to build automation
Make tool & Makefiles
Make syntax
Make default rules
Use cases
Linux Kernel Internals and Device Drivers
Linux kernel programming
Essentials of Linux kernel architecture
Understanding need for kernel
programming
Kernel programming models
Modifying kernel sources
Kernel configuration and compilation
Introduction to kernel modules
Kernel modules vs. Applications
Exploring kernel module architecture
Modules programming basics
Building blocks of a kernel module
Building kernel module binary
Tools for module management
Tracking module dependency
Module parameters
Kernel symbol table
Exporting Module symbols
Kernel message logging infrastructure
Need for kernel message logging
Kernel message ring buffer
Kernel message Log priorities
Message Ring buffer management
Accessing messages from user mode
apps
Linux message logging daemons
Linux driver architecture
Device Drivers defined
Linux Driver model
Types of Linux drivers
Driver stacks
Synchronous driver model
Synchronous drivers defined
Driver registration and de-registration
Driver file interface
Device file operations
Driver data structures
Device Configuration ops
Wait Queues & polling
Memory mapping
Use cases
Concurrency and Race Conditions
UP vs. SMP Issues
Combating Race Conditions
Atomic Operations
Semaphores
Spin Locks
6
7. Memory allocations
Linux kernel memory subsystem
Memory representation data
structures
Memory Allocators
Allocating Boot memory
Page Tables and Address Translation
DMA mappings
Need for DMA
Linux DMA mappings
Use cases
Hardware access
Device Addresses
Port mapped I/O
Interacting with port mapped devices
Memory Mapped I/O
Reserving address space MMIO
MMIO Access
Device Access side effects
Device access from u-space
Linux net device subsystem
Network driver model
Types of network drivers
Driver hands-on
Block driver subsystem
Block device model
ramdisk driver hands-on
PCI device drivers
PCI basics
Linux PCI bus stack
PCI device access
USB
USB basics
Linux USB bus stack
USB driver classes
Interacting with USB devices from
drivers
Driver hands-on
Interrupt handling
Understanding Interrupts
Linux Interrupt handlers
Implementing Driver ISR
Need for deferred routines
Linux Deferred Routines
Interrupt event management
Time measurement & Delays
Need for time measurement
Kernel tick
Need for delays
Introducing delays
Use cases
7
8. Embedded Linux
Introduction to embedded Linux
Benefits of using Linux and open
source tools for embedded systems
SOC overview
Embedded Linux system architecture
Software components for embedded
development
Kernel
Cross-compiler tool-chains
Need for cross tool-chain
Different tool-chains’ build procedures
Using pre-build cross tool-chain
Building our own cross tool-chain
Embedded Drivers
Linux Driver stack for embedded
devices
Platform devices Stack
I2C stack
SPI stack
MTD stack
Machine emulator and virtualizer
Why emulator
Installing emulator
Using emulator for ARM
Linux booting process
Linux booting sequence
Components of Linux booting
Tweaks and changes
Use cases
U-boot
Introduction to u-boot
Overview of U-boot source
Building U-boot for target
Booting target with U-boot
Understanding U-boot environment
Transferring images to target using Uboot
Supported hardware architectures
Using predefined config files
Cross-compiling the kernel for target
Understanding kernel boot arguments
Understanding NAND/NOR flash
File system for flash
File system
Understanding Unix File system
hierarchy
Creating file system
Porting application
Mounting file system as initrd
Integrating file system and kernel
image
Cross-compiling applications and
libraries
Creating jffs2 file system
Flashing Images
Flashing kernel image
Flashing file system
301, Prashanthiram Towers, Saradhi Studio Lane, Ameerpet, Hyderabad
Ph:040-66100265 Email: info@techveda.org
www.techveda.org
8