I am now working with the Linux Foundation and no longer offering classes on my own.

See http://training.linuxfoundation.org for details.

We offer comprehensive classes for Linux developers, including:

  • Developing Applications For Linux

    Learn how to develop for and port applications to the Linux environment. Come quickly up to speed with the necessary tools and learn about special features offered by Linux.
  • Developing Linux Device Drivers

    Learn how to develop device drivers for Linux systems. Become familiar with the different kinds of device drivers used under Linux, and know the appropriate API's through which devices interface with the kernel.
  • Linux Kernel Internals and Debugging

    Learn the basic methods the Linux kernel is built upon, grasping the theoretical and practical underpinnings. Get introduced to the important tools that are used for debugging and monitoring the kernel.
  • Embedded Linux Development

    Learn the key steps to developing an embedded Linux product. Gain real world experience through extensive hands-on practice with target devices.
  • Developing with GIT

    Learn the fundamental concepts behind the Git version control system. Practice how to create, manipulate and share Git repositories with hands-on lab exercises.
  • Linux Performance Tuning

    Discover the tools and methods used to resolve problems and enhance performance on Linux systems. Learn the system architecture including the Linux kernel, performance scheduling, memory management, and networking stack, and practice with the tools necessary for tuning performance.

These classes are up to date and ready to be delivered, unlike some others advertised on the internet.

Click here for details and customization options.




Books

394 pages, September 2009
Buy Here or at amazon.com
269 pages, October 2009
Buy Here or at amazon.com

Writing Linux Device Drivers
             a guide with exercises

with the 2.6.31 Linux kernel
Table of Contents:   pdf   html
  • Writing Linux Device Drivers is designed to show experienced programmers how to develop device drivers for Linux systems, and give them a basic understanding and familiarity with the Linux kernel.

  • Upon mastering this material, you will be familiar with the different kinds of device drivers used under Linux, and know the appropriate API's through which devices (both hard and soft) interface with the kernel.

  • You are interested in learning how to write device drivers for the Linux operating system. Maybe you are just doing this for fun, but more likely you have this task as part of your job. The purpose here is to ease your path and perhaps shorten the amount of time it takes to reach a level of basic competence in this endeavor.

  • Our order of presentation is not axiomatic; i.e., we will have some forward referencing and digressions. The purpose is to get you into coding as quickly as possible. Thus we'll tell you early on how to dynamically allocate memory in the simplest way, so you can actually write code, and then later cover the subject more thoroughly. Furthermore, the order of subjects is flexible, so feel free to vary it according to your interests.

  • Each section has exercises, most of which involve writing code, designed to help you gain familiarity with programming for the Linux kernel. Solutions are provided.

  • We are not aiming for an expert audience, but instead for a competent and motivated one.

Download Solutions and Configurations

  • The LAB SOLUTIONS book is a companion volume to Writing Linux Device Drivers, a guide with exercises. While the solutions to the exercises in that volume can be freely downloaded, requests for printed copies of the solutions have been encountered. There is no exposition here, only the statement of the exercises and then the actual code and necessary scripts.

290 pages, December 2009
Buy Here or at amazon.com
237 pages, December 2009
Buy Here or at amazon.com

Linux Program Development
             a guide with exercises

Table of Contents:   pdf   html
  • Linux Program Development is designed to bring experienced programmers up to speed quickly in a Linux environment.

  • You will learn the tools and methods for developing C programs and doing systems programming under Linux, including:

    • Compilers, compiling, linking and loading programs.

    • Building and using both static and shared libraries.

    • Using make and developing Makefiles.

    • Version control.

    • Debugging techniques.

    • How system calls are made and the difference with regular library functions.

    • The structure of Linux filesystems.

    • File I/O functions, using both system-level and standard library calls.

    • Advanced file operations, including directory and stat functions, and file locking.

    • Process management, including forking and execing, exiting, process groups, and waiting.

    • Pipes, unnamed and named (FIFO's).

    • Signal dispatching and handling.

    • Writing multi-threaded applications using the pthreads (Posix Threads) library and API.

    • An introduction to network socket programming.

    • System V and POSIX IPC, including shared memory, semaphores, and message queues.

  • Upon mastering this material, you will have the necessary tools to develop advanced applications on a Linux system.

Download Solutions

  • The LAB SOLUTIONS book is a companion volume to Linux Program Development, a guide with exercises. While the solutions to the exercises in that volume can be freely downloaded, requests for printed copies of the solutions have been encountered. There is no exposition here, only the statement of the exercises and then the actual code and necessary scripts.