http://www.omniscient-intl.com/devicedriver.html Course Highlights: This course examines the design of Device Drivers for embedded applications. It deals with issues important to engineers who need to structure and write drivers for input, output and network interfacing hardware devices. Rather than focusing on the device driver requirements for a specific real-time operating system (RTOS), this course examines features and design similarities that are shared by device drivers in a variety of environments including those without an RTOS. The course begins with a presentation of the basic structure of device drivers and device I/O supervisors. This is followed by an in-depth discussion of fundamental issues in the design of device driver software or firmware, such as mutual exclusion, and synchronous vs. asynchronous execution. High-level design of device drivers is presented with emphasis on tailoring the structure of the driver to the characteristics of specific hardware devices and the nature of the data they carry. Interrupts, exception handling and DMA are discussed in detail. Objective of the course The primary goal of this course is to provide the participant with the knowledge and skills needed to design and develop device drivers for use with custom application specific hardware. This is a very practical, results-oriented course that will provide knowledge and skills that can be applied immediately. This course covers the concepts and principles shared by device drivers in a wide variety of environments. Who Should Attend: This course is intended for real-time software development engineers, software system architects, project managers, and technical consultants who have the responsibility for designing and implementing device driver software for real- time and embedded systems running on custom hardware containing application-specific I/O and network interfaces. While the class will be most useful for engineers who need to design and code device drivers, it will also be very helpful for application software engineers who want to have a better understanding of underlying firmware and how it relates to their application software. Course participants are expected to have a thorough familiarity with the C programming language and some software- hardware interface programming experience. Knowledge of at least one real-time operating system (RTOS) kernel is recommended. [This knowledge can also be gained by attending one of the prerequisite introductory courses "Introduction to Embedded Systems and Software" or "Introduction to Real-Time Operating Systems".] Course Outline: Device I/O Driver Design - Basic Issues What is a Device Driver ? Low-Level "Bit-Bashing" Code ? Device Driver API Design Device I/O Supervisors Mutual Exclusion Requirements Synchronous vs. Asynchronous Drivers Device Driver Interactions with Operating Systems Quick Review: What you Get in an RTOS, and What you Don't Get Mutual Exclusion Options: Semaphores, Mutexes, ... Message Queueing for Device Drivers Driver Memory Buffer Management Some Device Driver Design Models Synchronous Driver Models Asynchronous Input Driver Models Asynchronous Output Driver Models Input Data Spoolers Zero-Copy Spoolers Output Data Spoolers: "Priming the Pump" Device Interrupt Handling Overview of Interrupts and Exceptions Interrupts and Exceptions – Who Deals with What? (RTOS, Driver, Application) DMA: Direct Memory Access Detailed Design Extended Examples Example: Synchronous Driver for Interrupt-Driven Input Device Example: Printer Spooler Driver - Detailed Design Device Driver Performance Analysis Interrupt Latency Basic Queueing Theory for Device Driver Developers Queue Length and Delay Calculations for Sporadic Devices Example: Printer Spooler Queue Length and Delay Calculations Driver Responsiveness: Performance Analysis for Periodic and Sporadic Device Drivers Final Examination. |