|
GNU/Linux Kernel Internals and Device Drivers |
|
|
| Course Length - 5 Days | | | | Course Description This GNU/Linux Kernel Internals and Device Drivers Course is for Software Developers and other Technology Professionals (Network Administrators, Support Personnel, Technicians, Technical Management, etc.) who need to rapidly and thoroughly master how to write, debug, support, and troubleshoot GNU/Linux Device Drivers. A highlight of the course is the afternoon of the final day of class: an optional "friendly competition" in which everyone in the class races to see who can be the first to implement a GNU/Linux device driver that can be built as either embedded into the GNU/Linux kernel or as a kernel module. As a final key benefit for this course, all of the software used is yours to keep, to take back with you to your organization, and to use for your future device driver development. | | | | | | You Will Learn How To Unlike any other course in the world, and using 100% hands-on techniques, you will learn the following key skills: - How to install and configure Linux for an ideal Linux Kernel Internals and Device Drivers software development environment (including setup of kernel debugger)
- How to write User-Mode drivers
- How to write kernel drivers embedded into the kernel source code
- How to configure drivers using the kernel configuration process
- How to write kernel modules
- The /proc interface
- The sysctl interface
- Device registration (character, block, and network)
- Device open/close, device ioctl, device read/write
- Device synchronization (semaphores and spin locks)
- Memory management
- Device hot plug
- Writing PCI bus drivers
- Writing USB bus drivers
- And hardware access (I/O Ports, I/O Memory, Interrupts, and DMA/Bus Mastering)
| | | | | | Course Prerequisites Experience with at least one operating system such as Windows, Netware, or UNIX. |
| | | | Course Topics: | | | Introduction to GNU/Linux Kernel Internals and Device Drivers | | - User-Mode Device Drivers
- Kernel-Mode Device Drivers
- Kernel Version Numbers
| | | Development Environment | | - Installation
- Development Tools
- Debugging Tools
| | | User-Mode Access to Devices | | - open, close, read, write
- ioctl
- ioperm, iopl, inb, outb
- mmap, munmap
| | | Kernel Source Code | | - Installing Kernel Source Code
- Tour of Source Tree
- Header Files
- Driver Source
- Reading an Existing Driver
| | | Building a Driver into the GNU/Linux Kernel | | - Driver Source Code
- Driver Configuration Info
- Kernel Configuration
- Kernel Building
- Testing a New Kernel
| | | Kernel Modules | | - mod utils
- Building
- Installing/Removing
- Parameter Info
- Layered Modules
| | | The /proc Interface | | - Using /proc
- Registration
- Reading from /proc
- Writing to /proc
| | | The sysctl Interface | | - Using sysctl
- Registration
- Reading/Writing
| | | Device Registration | | - Character Device Registration
- Block Device Registration
- Network Device Registration
- Other Registration Options
| | | Device Open/Close | | - struct file_operations
- struct inode
- struct file
- open and release
| | | Device Synchronization | | - Semaphores
- Spin Locks
- Atomic Operations
| | | Device I/O Control | | - ioctl vs /proc vs sysctl
- ioctl Macros
- ioctl function
| | | Time and Timers | | - Time of Day
- jiffies
- Short Delays
- Long Delays
- Kernel Timers
| | | Blocking and Non-Blocking I/O | | - Wait Queues
- Blocking I/O
- Non_Blocking I/O
- SIGIO
| | | Memory Management | | - kmalloc
- get_free_pages
- vmalloc
- kmem_cache
| | | Character Device Read/Write | | - Getting Data from User-Space
- Starting I/O
- Waiting for I/O Completion
- Sending Results to User-Space
| | | Block Device Read/Write | | - Block vs Char Read/Write
- Block Device Global Variables
- Request Handing
- Creating a RAM Disk
| | | PCI Bus | | - PCI Utilities
- Registration
- Configuration
- Hot Plug
| | | USB Bus | | - USB Utilities
- Registration
- Configuration
- Hot Plug
| | | I/O Ports | | - /proc and I/O Ports
- Resource Registration
- Reading/Writing
| | | I/O Memory | | - /proc and I/O Memory
- Resource Registration
- Reading/Writing
| | | Interrupts | | - /proc and interrupts
- Resource Registration
- Interrupt Service Routines
- Tasklets
| | | Direct Memory Access/Bus Mastering | | - Consistent Mapping
- Streaming Mapping
- Scatter/Gather Mapping
| | | | | |