Home Page Icon
Home Page
Table of Contents for
Index
Close
Index
by Greg Kroah-Hartman, Alessandro Rubini, Jonathan Corbet
Linux Device Drivers, 3rd Edition
Linux Device Drivers, 3rd Edition
A Note Regarding Supplemental Files
Preface
Jon's Introduction
Alessandro's Introduction
Greg's Introduction
Audience for This Book
Organization of the Material
Background Information
Online Version and License
Conventions Used in This Book
Using Code Examples
We'd Like to Hear from You
Safari Enabled
Acknowledgments
Jon
Alessandro
Greg
1. An Introduction to Device Drivers
1.1. The Role of the Device Driver
1.2. Splitting the Kernel
1.2.1. Loadable Modules
1.3. Classes of Devices and Modules
1.4. Security Issues
1.5. Version Numbering
1.6. License Terms
1.7. Joining the Kernel Development Community
1.8. Overview of the Book
2. Building and Running Modules
2.1. Setting Up Your Test System
2.2. The Hello World Module
2.3. Kernel Modules Versus Applications
2.3.1. User Space and Kernel Space
2.3.2. Concurrency in the Kernel
2.3.3. The Current Process
2.3.4. A Few Other Details
2.4. Compiling and Loading
2.4.1. Compiling Modules
2.4.2. Loading and Unloading Modules
2.4.3. Version Dependency
2.4.4. Platform Dependency
2.5. The Kernel Symbol Table
2.6. Preliminaries
2.7. Initialization and Shutdown
2.7.1. The Cleanup Function
2.7.2. Error Handling During Initialization
2.7.3. Module-Loading Races
2.8. Module Parameters
2.9. Doing It in User Space
2.10. Quick Reference
3. Char Drivers
3.1. The Design of scull
3.2. Major and Minor Numbers
3.2.1. The Internal Representation of Device Numbers
3.2.2. Allocating and Freeing Device Numbers
3.2.3. Dynamic Allocation of Major Numbers
3.3. Some Important Data Structures
3.3.1. File Operations
3.3.2. The file Structure
3.3.3. The inode Structure
3.4. Char Device Registration
3.4.1. Device Registration in scull
3.4.2. The Older Way
3.5. open and release
3.5.1. The open Method
3.5.2. The release Method
3.6. scull's Memory Usage
3.7. read and write
3.7.1. The read Method
3.7.2. The write Method
3.7.3. readv and writev
3.8. Playing with the New Devices
3.9. Quick Reference
4. Debugging Techniques
4.1. Debugging Support in the Kernel
4.2. Debugging by Printing
4.2.1. printk
4.2.2. Redirecting Console Messages
4.2.3. How Messages Get Logged
4.2.4. Turning the Messages On and Off
4.2.5. Rate Limiting
4.2.6. Printing Device Numbers
4.3. Debugging by Querying
4.3.1. Using the /proc Filesystem
4.3.1.1. Implementing files in /proc
4.3.1.2. An older interface
4.3.1.3. Creating your /proc file
4.3.1.4. The seq_file interface
4.3.2. The ioctl Method
4.4. Debugging by Watching
4.5. Debugging System Faults
4.5.1. Oops Messages
4.5.2. System Hangs
4.6. Debuggers and Related Tools
4.6.1. Using gdb
4.6.2. The kdb Kernel Debugger
4.6.3. The kgdb Patches
4.6.4. The User-Mode Linux Port
4.6.5. The Linux Trace Toolkit
4.6.6. Dynamic Probes
5. Concurrency and Race Conditions
5.1. Pitfalls in scull
5.2. Concurrency and Its Management
5.3. Semaphores and Mutexes
5.3.1. The Linux Semaphore Implementation
5.3.2. Using Semaphores in scull
5.3.3. Reader/Writer Semaphores
5.4. Completions
5.5. Spinlocks
5.5.1. Introduction to the Spinlock API
5.5.2. Spinlocks and Atomic Context
5.5.3. The Spinlock Functions
5.5.4. Reader/Writer Spinlocks
5.6. Locking Traps
5.6.1. Ambiguous Rules
5.6.2. Lock Ordering Rules
5.6.3. Fine- Versus Coarse-Grained Locking
5.7. Alternatives to Locking
5.7.1. Lock-Free Algorithms
5.7.2. Atomic Variables
5.7.3. Bit Operations
5.7.4. seqlocks
5.7.5. Read-Copy-Update
5.8. Quick Reference
6. Advanced Char Driver Operations
6.1. ioctl
6.1.1. Choosing the ioctl Commands
6.1.2. The Return Value
6.1.3. The Predefined Commands
6.1.4. Using the ioctl Argument
6.1.5. Capabilities and Restricted Operations
6.1.6. The Implementation of the ioctl Commands
6.1.7. Device Control Without ioctl
6.2. Blocking I/O
6.2.1. Introduction to Sleeping
6.2.2. Simple Sleeping
6.2.3. Blocking and Nonblocking Operations
6.2.4. A Blocking I/O Example
6.2.5. Advanced Sleeping
6.2.5.1. How a process sleeps
6.2.5.2. Manual sleeps
6.2.5.3. Exclusive waits
6.2.5.4. The details of waking up
6.2.5.5. Ancient history: sleep_on
6.2.6. Testing the Scullpipe Driver
6.3. poll and select
6.3.1. Interaction with read and write
6.3.1.1. Reading data from the device
6.3.1.2. Writing to the device
6.3.1.3. Flushing pending output
6.3.2. The Underlying Data Structure
6.4. Asynchronous Notification
6.4.1. The Driver's Point of View
6.5. Seeking a Device
6.5.1. The llseek Implementation
6.6. Access Control on a Device File
6.6.1. Single-Open Devices
6.6.2. Restricting Access to a Single User at a Time
6.6.3. Blocking open as an Alternative to EBUSY
6.6.4. Cloning the Device on open
6.7. Quick Reference
7. Time, Delays, and Deferred Work
7.1. Measuring Time Lapses
7.1.1. Using the jiffies Counter
7.1.2. Processor-Specific Registers
7.2. Knowing the Current Time
7.3. Delaying Execution
7.3.1. Long Delays
7.3.1.1. Busy waiting
7.3.1.2. Yielding the processor
7.3.1.3. Timeouts
7.3.2. Short Delays
7.4. Kernel Timers
7.4.1. The Timer API
7.4.2. The Implementation of Kernel Timers
7.5. Tasklets
7.6. Workqueues
7.6.1. The Shared Queue
7.7. Quick Reference
7.7.1. Timekeeping
7.7.2. Delays
7.7.3. Kernel Timers
7.7.4. Tasklets
7.7.5. Workqueues
8. Allocating Memory
8.1. The Real Story of kmalloc
8.1.1. The Flags Argument
8.1.1.1. Memory zones
8.1.2. The Size Argument
8.2. Lookaside Caches
8.2.1. A scull Based on the Slab Caches: scullc
8.2.2. Memory Pools
8.3. get_free_page and Friends
8.3.1. A scull Using Whole Pages: scullp
8.3.2. The alloc_pages Interface
8.4. vmalloc and Friends
8.4.1. A scull Using Virtual Addresses: scullv
8.5. Per-CPU Variables
8.6. Obtaining Large Buffers
8.6.1. Acquiring a Dedicated Buffer at Boot Time
8.7. Quick Reference
9. Communicating with Hardware
9.1. I/O Ports and I/O Memory
9.1.1. I/O Registers and Conventional Memory
9.2. Using I/O Ports
9.2.1. I/O Port Allocation
9.2.2. Manipulating I/O ports
9.2.3. I/O Port Access from User Space
9.2.4. String Operations
9.2.5. Pausing I/O
9.2.6. Platform Dependencies
9.3. An I/O Port Example
9.3.1. An Overview of the Parallel Port
9.3.2. A Sample Driver
9.4. Using I/O Memory
9.4.1. I/O Memory Allocation and Mapping
9.4.2. Accessing I/O Memory
9.4.3. Ports as I/O Memory
9.4.4. Reusing short for I/O Memory
9.4.5. ISA Memory Below 1 MB
9.4.6. isa_readb and Friends
9.5. Quick Reference
10. Interrupt Handling
10.1. Preparing the Parallel Port
10.2. Installing an Interrupt Handler
10.2.1. The /proc Interface
10.2.2. Autodetecting the IRQ Number
10.2.2.1. Kernel-assisted probing
10.2.2.2. Do-it-yourself probing
10.2.3. Fast and Slow Handlers
10.2.3.1. The internals of interrupt handling on the x86
10.3. Implementing a Handler
10.3.1. Handler Arguments and Return Value
10.3.2. Enabling and Disabling Interrupts
10.3.2.1. Disabling a single interrupt
10.3.2.2. Disabling all interrupts
10.4. Top and Bottom Halves
10.4.1. Tasklets
10.4.2. Workqueues
10.5. Interrupt Sharing
10.5.1. Installing a Shared Handler
10.5.2. Running the Handler
10.5.3. The /proc Interface and Shared Interrupts
10.6. Interrupt-Driven I/O
10.6.1. A Write-Buffering Example
10.7. Quick Reference
11. Data Types in the Kernel
11.1. Use of Standard C Types
11.2. Assigning an Explicit Size to Data Items
11.3. Interface-Specific Types
11.4. Other Portability Issues
11.4.1. Time Intervals
11.4.2. Page Size
11.4.3. Byte Order
11.4.4. Data Alignment
11.4.5. Pointers and Error Values
11.5. Linked Lists
11.6. Quick Reference
12. PCI Drivers
12.1. The PCI Interface
12.1.1. PCI Addressing
12.1.2. Boot Time
12.1.3. Configuration Registers and Initialization
12.1.4. MODULE_DEVICE_TABLE
12.1.5. Registering a PCI Driver
12.1.6. Old-Style PCI Probing
12.1.7. Enabling the PCI Device
12.1.8. Accessing the Configuration Space
12.1.9. Accessing the I/O and Memory Spaces
12.1.10. PCI Interrupts
12.1.11. Hardware Abstractions
12.2. A Look Back: ISA
12.2.1. Hardware Resources
12.2.2. ISA Programming
12.2.3. The Plug-and-Play Specification
12.3. PC/104 and PC/104+
12.4. Other PC Buses
12.4.1. MCA
12.4.2. EISA
12.4.3. VLB
12.5. SBus
12.6. NuBus
12.7. External Buses
12.8. Quick Reference
13. USB Drivers
13.1. USB Device Basics
13.1.1. Endpoints
13.1.2. Interfaces
13.1.3. Configurations
13.2. USB and Sysfs
13.3. USB Urbs
13.3.1. struct urb
13.3.2. Creating and Destroying Urbs
13.3.2.1. Interrupt urbs
13.3.2.2. Bulk urbs
13.3.2.3. Control urbs
13.3.2.4. Isochronous urbs
13.3.3. Submitting Urbs
13.3.4. Completing Urbs: The Completion Callback Handler
13.3.5. Canceling Urbs
13.4. Writing a USB Driver
13.4.1. What Devices Does the Driver Support?
13.4.2. Registering a USB Driver
13.4.3. probe and disconnect in Detail
13.4.4. Submitting and Controlling a Urb
13.5. USB Transfers Without Urbs
13.5.1. usb_bulk_msg
13.5.2. usb_control_msg
13.5.3. Other USB Data Functions
13.6. Quick Reference
14. The Linux Device Model
14.1. Kobjects, Ksets, and Subsystems
14.1.1. Kobject Basics
14.1.1.1. Embedding kobjects
14.1.1.2. Kobject initialization
14.1.1.3. Reference count manipulation
14.1.1.4. Release functions and kobject types
14.1.2. Kobject Hierarchies, Ksets, and Subsystems
14.1.2.1. Ksets
14.1.2.2. Operations on ksets
14.1.2.3. Subsystems
14.2. Low-Level Sysfs Operations
14.2.1. Default Attributes
14.2.2. Nondefault Attributes
14.2.3. Binary Attributes
14.2.4. Symbolic Links
14.3. Hotplug Event Generation
14.3.1. Hotplug Operations
14.4. Buses, Devices, and Drivers
14.4.1. Buses
14.4.1.1. Bus registration
14.4.1.2. Bus methods
14.4.1.3. Iterating over devices and drivers
14.4.1.4. Bus attributes
14.4.2. Devices
14.4.2.1. Device registration
14.4.2.2. Device attributes
14.4.2.3. Device structure embedding
14.4.3. Device Drivers
14.4.3.1. Driver structure embedding
14.5. Classes
14.5.1. The class_simple Interface
14.5.2. The Full Class Interface
14.5.2.1. Managing classes
14.5.2.2. Class devices
14.5.2.3. Class interfaces
14.6. Putting It All Together
14.6.1. Add a Device
14.6.2. Remove a Device
14.6.3. Add a Driver
14.6.4. Remove a Driver
14.7. Hotplug
14.7.1. Dynamic Devices
14.7.2. The /sbin/hotplug Utility
14.7.2.1. IEEE1394 (FireWire)
14.7.2.2. Networking
14.7.2.3. PCI
14.7.2.4. Input
14.7.2.5. USB
14.7.2.6. SCSI
14.7.2.7. Laptop docking stations
14.7.2.8. S/390 and zSeries
14.7.3. Using /sbin/hotplug
14.7.3.1. Linux hotplug scripts
14.7.3.2. udev
14.8. Dealing with Firmware
14.8.1. The Kernel Firmware Interface
14.8.2. How It Works
14.9. Quick Reference
14.9.1. Kobjects
14.9.2. Sysfs Operations
14.9.3. Buses, Devices, and Drivers
14.9.4. Classes
14.9.5. Firmware
15. Memory Mapping and DMA
15.1. Memory Management in Linux
15.1.1. Address Types
15.1.2. Physical Addresses and Pages
15.1.3. High and Low Memory
15.1.4. The Memory Map and Struct Page
15.1.5. Page Tables
15.1.6. Virtual Memory Areas
15.1.6.1. The vm_area_struct structure
15.1.7. The Process Memory Map
15.2. The mmap Device Operation
15.2.1. Using remap_pfn_range
15.2.2. A Simple Implementation
15.2.3. Adding VMA Operations
15.2.4. Mapping Memory with nopage
15.2.5. Remapping Specific I/O Regions
15.2.6. Remapping RAM
15.2.6.1. Remapping RAM with the nopage method
15.2.7. Remapping Kernel Virtual Addresses
15.3. Performing Direct I/O
15.3.1. Asynchronous I/O
15.3.1.1. An asynchronous I/O example
15.4. Direct Memory Access
15.4.1. Overview of a DMA Data Transfer
15.4.2. Allocating the DMA Buffer
15.4.2.1. Do-it-yourself allocation
15.4.3. Bus Addresses
15.4.4. The Generic DMA Layer
15.4.4.1. Dealing with difficult hardware
15.4.4.2. DMA mappings
15.4.4.3. Setting up coherent DMA mappings
15.4.4.4. DMA pools
15.4.4.5. Setting up streaming DMA mappings
15.4.4.6. Single-page streaming mappings
15.4.4.7. Scatter/gather mappings
15.4.4.8. PCI double-address cycle mappings
15.4.4.9. A simple PCI DMA example
15.4.5. DMA for ISA Devices
15.4.5.1. Registering DMA usage
15.4.5.2. Talking to the DMA controller
15.5. Quick Reference
15.5.1. Introductory Material
15.5.2. Implementing mmap
15.5.3. Implementing Direct I/O
15.5.4. Direct Memory Access
16. Block Drivers
16.1. Registration
16.1.1. Block Driver Registration
16.1.2. Disk Registration
16.1.2.1. Block device operations
16.1.2.2. The gendisk structure
16.1.3. Initialization in sbull
16.1.4. A Note on Sector Sizes
16.2. The Block Device Operations
16.2.1. The open and release Methods
16.2.2. Supporting Removable Media
16.2.3. The ioctl Method
16.3. Request Processing
16.3.1. Introduction to the request Method
16.3.2. A Simple request Method
16.3.3. Request Queues
16.3.3.1. Queue creation and deletion
16.3.3.2. Queueing functions
16.3.3.3. Queue control functions
16.3.4. The Anatomy of a Request
16.3.4.1. The bio structure
16.3.4.2. Request structure fields
16.3.4.3. Barrier requests
16.3.4.4. Nonretryable requests
16.3.5. Request Completion Functions
16.3.5.1. Working with bios
16.3.5.2. Block requests and DMA
16.3.5.3. Doing without a request queue
16.4. Some Other Details
16.4.1. Command Pre-Preparation
16.4.2. Tagged Command Queueing
16.5. Quick Reference
17. Network Drivers
17.1. How snull Is Designed
17.1.1. Assigning IP Numbers
17.1.2. The Physical Transport of Packets
17.2. Connecting to the Kernel
17.2.1. Device Registration
17.2.2. Initializing Each Device
17.2.3. Module Unloading
17.3. The net_device Structure in Detail
17.3.1. Global Information
17.3.2. Hardware Information
17.3.3. Interface Information
17.3.4. The Device Methods
17.3.5. Utility Fields
17.4. Opening and Closing
17.5. Packet Transmission
17.5.1. Controlling Transmission Concurrency
17.5.2. Transmission Timeouts
17.5.3. Scatter/Gather I/O
17.6. Packet Reception
17.7. The Interrupt Handler
17.8. Receive Interrupt Mitigation
17.9. Changes in Link State
17.10. The Socket Buffers
17.10.1. The Important Fields
17.10.2. Functions Acting on Socket Buffers
17.11. MAC Address Resolution
17.11.1. Using ARP with Ethernet
17.11.2. Overriding ARP
17.11.3. Non-Ethernet Headers
17.12. Custom ioctl Commands
17.13. Statistical Information
17.14. Multicast
17.14.1. Kernel Support for Multicasting
17.14.2. A Typical Implementation
17.15. A Few Other Details
17.15.1. Media Independent Interface Support
17.15.2. Ethtool Support
17.15.3. Netpoll
17.16. Quick Reference
18. TTY Drivers
18.1. A Small TTY Driver
18.1.1. struct termios
18.2. tty_driver Function Pointers
18.2.1. open and close
18.2.2. Flow of Data
18.2.3. Other Buffering Functions
18.2.4. No read Function?
18.3. TTY Line Settings
18.3.1. set_termios
18.3.2. tiocmget and tiocmset
18.4. ioctls
18.5. proc and sysfs Handling of TTY Devices
18.6. The tty_driver Structure in Detail
18.7. The tty_operations Structure in Detail
18.8. The tty_struct Structure in Detail
18.9. Quick Reference
19. Bibliography
19.1. Books
19.1.1. Linux Kernel
19.1.2. Unix Design and Internals
19.2. Web Sites
Index
About the Authors
Copyright
Search in book...
Toggle Font Controls
Playlists
Add To
Create new playlist
Name your new playlist
Playlist description (optional)
Cancel
Create playlist
Sign In
Email address
Password
Forgot Password?
Create account
Login
or
Continue with Facebook
Continue with Google
Sign Up
Full Name
Email address
Confirm Email Address
Password
Login
Create account
or
Continue with Facebook
Continue with Google
Prev
Previous Chapter
Index
Next
Next Chapter
Index
M
M68k architecture (porting and),
Platform Dependencies
MAC (medium access control) addresses,
Initializing Each Device
,
Interface Information
,
The Device Methods
,
MAC Address Resolution
–
Non-Ethernet Headers
resolution of,
MAC Address Resolution
–
Non-Ethernet Headers
set_mac_address method and,
The Device Methods
macros,
The Hello World Module
,
Version Dependency
,
The Kernel Symbol Table
,
The Internal Representation of Device Numbers
,
Quick Reference
,
printk
,
printk
,
printk
,
printk
,
printk
,
printk
,
printk
,
printk
,
Completions
,
Simple Sleeping
,
Manual sleeps
,
Quick Reference
,
Tasklets
,
Linked Lists
,
Linked Lists
,
Linked Lists
,
Configuration Registers and Initialization
,
Configuration Registers and Initialization
,
MODULE_DEVICE_TABLE
,
What Devices Does the Driver Support?
,
What Devices Does the Driver Support?
,
What Devices Does the Driver Support?
,
What Devices Does the Driver Support?
,
Bus attributes
,
Driver structure embedding
,
Physical Addresses and Pages
,
The Memory Map and Struct Page
,
Scatter/gather mappings
,
Scatter/gather mappings
,
set_termios
BUS_ATTR,
Bus attributes
completion,
Completions
DECLARE_TASKLET,
Tasklets
DIVER_ATTR,
Driver structure embedding
hello world module,
The Hello World Module
INIT_LIST_HEAD,
Linked Lists
internal representation of device numbers,
The Internal Representation of Device Numbers
ioctl commands (creating),
Quick Reference
KERN_ALERT,
printk
KERN_CRIT,
printk
KERN_DEBUG,
printk
KERN_EMERG,
printk
KERN_ERR,
printk
KERN_INFO,
printk
KERN_NOTICE,
printk
KERN_WARNING,
printk
list_entry,
Linked Lists
list_for_each,
Linked Lists
MINOR,
Quick Reference
MODULE_DEVICE_TABLE,
MODULE_DEVICE_TABLE
page_address,
The Memory Map and Struct Page
PAGE_SHIFT,
Physical Addresses and Pages
PCI_DEVICE,
Configuration Registers and Initialization
PCI_DEVICE_CLASS,
Configuration Registers and Initialization
RELEVANT_IFLAG,
set_termios
sg_dma_address,
Scatter/gather mappings
sg_dma_len,
Scatter/gather mappings
symbols,
The Kernel Symbol Table
UBS_DEVICE_VER,
What Devices Does the Driver Support?
USB_DEVICE,
What Devices Does the Driver Support?
USB_DEVICE_INFO,
What Devices Does the Driver Support?
USB_INTERFACE_INFO,
What Devices Does the Driver Support?
version dependency,
Version Dependency
wait queues,
Manual sleeps
wait-event,
Simple Sleeping
magic SysRq key,
System Hangs
mailing list, linux-kernel,
Joining the Kernel Development Community
mainline kernels, installation of,
Setting Up Your Test System
major device numbers,
Major and Minor Numbers
MAJOR macro,
Quick Reference
major numbers,
Major and Minor Numbers
–
Dynamic Allocation of Major Numbers
,
Dynamic Allocation of Major Numbers
char drivers,
Major and Minor Numbers
–
Dynamic Allocation of Major Numbers
dynamic allocation of,
Dynamic Allocation of Major Numbers
make command,
Compiling Modules
makefiles,
Compiling Modules
,
Turning the Messages On and Off
printk function,
Turning the Messages On and Off
management,
Splitting the Kernel
,
Splitting the Kernel
,
Splitting the Kernel
,
Splitting the Kernel
,
Splitting the Kernel
,
Security Issues
,
scull's Memory Usage
–
scull's Memory Usage
,
Pitfalls in scull
,
Concurrency and Its Management
–
Concurrency and Its Management
,
Locking Traps
–
Fine- Versus Coarse-Grained Locking
,
Alternatives to Locking
–
Read-Copy-Update
,
Tasklets
–
Tasklets
,
The Size Argument
,
I/O Ports and I/O Memory
–
isa_readb and Friends
,
Quick Reference
,
The Linux Device Model
,
Managing classes
,
Memory Management in Linux
–
High and Low Memory
,
The Memory Map and Struct Page
–
The Memory Map and Struct Page
,
Page Tables
,
Virtual Memory Areas
–
The vm_area_struct structure
,
The Process Memory Map
,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
,
Performing Direct I/O
–
An asynchronous I/O example
,
Direct Memory Access
–
Talking to the DMA controller
,
Do-it-yourself allocation
,
Direct Memory Access
classes,
Managing classes
concurrency,
Concurrency and Its Management
–
Concurrency and Its Management
,
Locking Traps
–
Fine- Versus Coarse-Grained Locking
,
Alternatives to Locking
–
Read-Copy-Update
alternatives to locking,
Alternatives to Locking
–
Read-Copy-Update
locking traps,
Locking Traps
–
Fine- Versus Coarse-Grained Locking
fragmentation,
Do-it-yourself allocation
hardware (I/O ports and I/O memory),
I/O Ports and I/O Memory
–
isa_readb and Friends
interrupt handlers,
Quick Reference
memory,
Splitting the Kernel
,
scull's Memory Usage
–
scull's Memory Usage
,
Pitfalls in scull
,
Memory Management in Linux
–
High and Low Memory
,
The Memory Map and Struct Page
–
The Memory Map and Struct Page
,
Page Tables
,
Virtual Memory Areas
–
The vm_area_struct structure
,
The Process Memory Map
,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
,
Performing Direct I/O
–
An asynchronous I/O example
,
Direct Memory Access
–
Talking to the DMA controller
,
Direct Memory Access
direct I/O,
Performing Direct I/O
–
An asynchronous I/O example
DMA,
Direct Memory Access
–
Talking to the DMA controller
,
Direct Memory Access
mapping,
The Memory Map and Struct Page
–
The Memory Map and Struct Page
mmap device operations,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
page tables,
Page Tables
process memory maps,
The Process Memory Map
scull,
scull's Memory Usage
–
scull's Memory Usage
,
Pitfalls in scull
VMAs,
Virtual Memory Areas
–
The vm_area_struct structure
networks,
Splitting the Kernel
physical memory,
The Size Argument
power,
The Linux Device Model
process,
Splitting the Kernel
,
Splitting the Kernel
security,
Security Issues
tasklets,
Tasklets
–
Tasklets
manual sleeps,
Manual sleeps
mapper program,
Remapping RAM
mapping,
I/O Memory Allocation and Mapping
,
I/O Memory Allocation and Mapping
,
Quick Reference
,
The Memory Map and Struct Page
–
The Memory Map and Struct Page
,
The Process Memory Map
,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
,
The mmap Device Operation
,
DMA mappings
,
DMA mappings
,
Setting up streaming DMA mappings
,
Setting up streaming DMA mappings
,
Single-page streaming mappings
,
Scatter/gather mappings
,
Scatter/gather mappings
,
Scatter/gather mappings
,
PCI double-address cycle mappings
deleting,
Setting up streaming DMA mappings
DMA,
DMA mappings
I/O,
I/O Memory Allocation and Mapping
,
Quick Reference
memory,
The Memory Map and Struct Page
–
The Memory Map and Struct Page
,
The Process Memory Map
,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
mmap device operations,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
process memory maps,
The Process Memory Map
PCI double-address cycle,
PCI double-address cycle mappings
registers,
DMA mappings
,
Scatter/gather mappings
scatter-gather DMA,
Scatter/gather mappings
scatterlists and,
Scatter/gather mappings
single-page streaming,
Single-page streaming mappings
software-mapped memory,
I/O Memory Allocation and Mapping
streaming DMA configuration,
Setting up streaming DMA mappings
video memory,
The mmap Device Operation
match function (buses),
Bus methods
MCA (Micro Channel Architecture),
MCA
mdelay,
Short Delays
measurement of time lapses,
Measuring Time Lapses
–
Processor-Specific Registers
Media Independent Interface (MII),
Media Independent Interface Support
media_changed method,
Supporting Removable Media
memory,
Splitting the Kernel
,
Loading and Unloading Modules
,
The Design of scull
,
The Design of scull
,
The Design of scull
,
scull's Memory Usage
–
scull's Memory Usage
,
Pitfalls in scull
,
Semaphores and Mutexes
,
Using the ioctl Argument
,
The Real Story of kmalloc
–
The Size Argument
,
The Flags Argument
,
Memory zones
,
Lookaside Caches
–
The alloc_pages Interface
,
Lookaside Caches
,
Memory Pools
,
get_free_page and Friends
,
get_free_page and Friends
,
vmalloc and Friends
–
A scull Using Virtual Addresses: scullv
,
Per-CPU Variables
–
Per-CPU Variables
,
Obtaining Large Buffers
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
I/O Ports and I/O Memory
–
isa_readb and Friends
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
I/O Memory Allocation and Mapping
,
I/O Memory Allocation and Mapping
,
ISA Memory Below 1 MB
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Page Size
,
PCI Addressing
,
Accessing the I/O and Memory Spaces
,
Memory Mapping and DMA
,
Memory Management in Linux
–
High and Low Memory
,
High and Low Memory
,
High and Low Memory
,
High and Low Memory
,
The Memory Map and Struct Page
–
The Memory Map and Struct Page
,
Page Tables
,
Virtual Memory Areas
–
The vm_area_struct structure
,
The Process Memory Map
,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
,
Remapping RAM
,
Performing Direct I/O
–
An asynchronous I/O example
,
Performing Direct I/O
,
Direct Memory Access
–
Talking to the DMA controller
,
Do-it-yourself allocation
,
Direct Memory Access
,
Initialization in sbull
,
Hardware Information
allocation,
The Real Story of kmalloc
–
The Size Argument
,
The Flags Argument
,
Lookaside Caches
–
The alloc_pages Interface
,
Lookaside Caches
,
get_free_page and Friends
,
get_free_page and Friends
,
vmalloc and Friends
–
A scull Using Virtual Addresses: scullv
,
Per-CPU Variables
–
Per-CPU Variables
,
Obtaining Large Buffers
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
I/O Memory Allocation and Mapping
,
Quick Reference
boot time,
Obtaining Large Buffers
,
Quick Reference
flags,
The Flags Argument
,
Lookaside Caches
,
Quick Reference
I/O,
I/O Memory Allocation and Mapping
,
Quick Reference
kmalloc allocation engine,
The Real Story of kmalloc
–
The Size Argument
lookaside caches,
Lookaside Caches
–
The alloc_pages Interface
,
Quick Reference
by page,
get_free_page and Friends
per-CPU variables,
Per-CPU Variables
–
Per-CPU Variables
performance degradation issues,
get_free_page and Friends
vmalloc allocation function,
vmalloc and Friends
–
A scull Using Virtual Addresses: scullv
barriers,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
Quick Reference
block drivers,
Initialization in sbull
DMA,
Memory Mapping and DMA
(see DMA)
global areas,
The Design of scull
hardware,
Hardware Information
high,
High and Low Memory
I/O,
I/O Ports and I/O Memory
–
isa_readb and Friends
,
Quick Reference
ISA,
ISA Memory Below 1 MB
access,
ISA Memory Below 1 MB
limitations on,
High and Low Memory
locking,
Semaphores and Mutexes
low,
High and Low Memory
management,
Splitting the Kernel
,
Memory Management in Linux
–
High and Low Memory
,
The Memory Map and Struct Page
–
The Memory Map and Struct Page
,
Page Tables
,
Virtual Memory Areas
–
The vm_area_struct structure
,
The Process Memory Map
,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
,
Performing Direct I/O
–
An asynchronous I/O example
,
Direct Memory Access
–
Talking to the DMA controller
,
Do-it-yourself allocation
,
Direct Memory Access
direct I/O,
Performing Direct I/O
–
An asynchronous I/O example
DMA,
Direct Memory Access
–
Talking to the DMA controller
,
Direct Memory Access
fragmentation,
Do-it-yourself allocation
mapping,
The Memory Map and Struct Page
–
The Memory Map and Struct Page
mmap device operations,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
page tables,
Page Tables
process memory maps,
The Process Memory Map
VMAs,
Virtual Memory Areas
–
The vm_area_struct structure
modules (loading),
Loading and Unloading Modules
page size and portability,
Page Size
PCI,
PCI Addressing
,
Accessing the I/O and Memory Spaces
persistence,
The Design of scull
pools,
Memory Pools
,
Quick Reference
remapping RAM,
Remapping RAM
scull,
The Design of scull
,
scull's Memory Usage
–
scull's Memory Usage
,
Pitfalls in scull
design of,
The Design of scull
troubleshooting,
Pitfalls in scull
usage,
scull's Memory Usage
–
scull's Memory Usage
software-mapped (and ioremap function),
I/O Memory Allocation and Mapping
user space,
Performing Direct I/O
verifying user-space addresses,
Using the ioctl Argument
versus I/O registers,
I/O Registers and Conventional Memory
zones,
Memory zones
memory management,
The Process Memory Map
,
The Process Memory Map
theory of,
The Process Memory Map
VMAs,
The Process Memory Map
messages,
The Hello World Module
,
The Hello World Module
,
printk
,
Redirecting Console Messages
,
How Messages Get Logged
,
Turning the Messages On and Off
,
Turning the Messages On and Off
,
Rate Limiting
,
Oops Messages
–
Oops Messages
consoles,
Redirecting Console Messages
debug,
Turning the Messages On and Off
,
Rate Limiting
disabling,
Turning the Messages On and Off
limitation of (printk function),
Rate Limiting
globally enabling/disabling,
Turning the Messages On and Off
kernels,
The Hello World Module
logging,
How Messages Get Logged
oops,
Oops Messages
–
Oops Messages
priorities (loglevels) of,
The Hello World Module
,
printk
methods,
File Operations
–
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
File Operations
,
The file Structure
,
The file Structure
,
The file Structure
,
The open Method
–
The open Method
,
The release Method
,
The release Method
,
The release Method
,
The release Method
,
read and write
,
read and write
,
read and write
,
read and write
,
read and write
,
The read Method
,
The read Method
,
The write Method
,
The write Method
,
readv and writev
,
readv and writev
,
Implementing files in /proc
,
The seq_file interface
,
The seq_file interface
,
The seq_file interface
,
The seq_file interface
,
The ioctl Method
,
Debugging by Watching
,
Debugging by Watching
,
Oops Messages
,
Oops Messages
,
System Hangs
,
The Spinlock Functions
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
ioctl
–
Device Control Without ioctl
,
ioctl
,
Blocking and Nonblocking Operations
,
poll and select
–
The Underlying Data Structure
,
poll and select
–
The Underlying Data Structure
,
Reading data from the device
,
Writing to the device
,
Flushing pending output
,
Flushing pending output
,
Seeking a Device
,
Single-Open Devices
,
Restricting Access to a Single User at a Time
,
Blocking open as an Alternative to EBUSY
,
Blocking open as an Alternative to EBUSY
,
Cloning the Device on open
,
String Operations
,
Quick Reference
,
Release functions and kobject types
,
Default Attributes
,
Default Attributes
,
Hotplug Operations
,
Hotplug Operations
,
Bus methods
,
The vm_area_struct structure
,
The vm_area_struct structure
,
The vm_area_struct structure
,
The vm_area_struct structure
,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
,
Mapping Memory with nopage
,
Remapping RAM with the nopage method
,
Asynchronous I/O
,
Registering DMA usage
,
Talking to the DMA controller
,
Block device operations
,
The open and release Methods
,
The open and release Methods
,
Supporting Removable Media
,
Supporting Removable Media
,
The ioctl Method
,
The ioctl Method
,
Interface Information
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
The Device Methods
,
Packet Transmission
,
Packet Transmission
,
Using ARP with Ethernet
,
Custom ioctl Commands
,
Custom ioctl Commands
,
Statistical Information
,
Kernel Support for Multicasting
,
Netpoll
block_fsync,
Flushing pending output
buses,
Bus methods
change_mtu,
The Device Methods
check_flags,
File Operations
close,
The release Method
,
The vm_area_struct structure
devices,
The Device Methods
*dir_notify,
File Operations
do_ioctl,
The Device Methods
,
Custom ioctl Commands
fasync,
File Operations
flush,
File Operations
,
The release Method
fsync,
File Operations
,
Flushing pending output
get_stats,
The Device Methods
,
Statistical Information
hard_header,
The Device Methods
,
Using ARP with Ethernet
hard_start_transmit,
Packet Transmission
hard_start_xmit,
The Device Methods
,
Packet Transmission
header_cache,
The Device Methods
header_cache_update,
The Device Methods
ioctl,
File Operations
,
The ioctl Method
,
ioctl
–
Device Control Without ioctl
,
ioctl
,
The ioctl Method
,
Custom ioctl Commands
block drivers,
The ioctl Method
customizing for networking,
Custom ioctl Commands
debugging with,
The ioctl Method
inode pointer in,
ioctl
llseek,
File Operations
,
Seeking a Device
lock,
File Operations
media_changed,
Supporting Removable Media
mmap,
File Operations
next,
The seq_file interface
nopage,
The vm_area_struct structure
,
Mapping Memory with nopage
,
Remapping RAM with the nopage method
open,
File Operations
,
The file Structure
,
The open Method
–
The open Method
,
Single-Open Devices
,
Restricting Access to a Single User at a Time
,
Blocking open as an Alternative to EBUSY
,
The vm_area_struct structure
,
Registering DMA usage
,
The open and release Methods
,
The Device Methods
block drivers,
The open and release Methods
blocking,
Blocking open as an Alternative to EBUSY
for network devices,
The Device Methods
private_data and,
The file Structure
requesting DMA channels,
Registering DMA usage
restricting simultaneous users and,
Restricting Access to a Single User at a Time
for single-open devices,
Single-Open Devices
vm_operations_struct structure,
The vm_area_struct structure
operations,
File Operations
–
File Operations
,
File Operations
,
readv and writev
,
System Hangs
,
The Spinlock Functions
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Atomic Variables
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
Bit Operations
,
Blocking and Nonblocking Operations
,
String Operations
,
Quick Reference
,
Hotplug Operations
,
Hotplug Operations
,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
,
Asynchronous I/O
,
Block device operations
,
The Device Methods
aio_fsync,
Asynchronous I/O
atomic_add,
Atomic Variables
atomic_dec,
Atomic Variables
atomic_dec_and_test,
Atomic Variables
atomic_inc,
Atomic Variables
atomic_inc_and_test,
Atomic Variables
atomic_read,
Atomic Variables
atomic_set,
Atomic Variables
atomic_sub,
Atomic Variables
atomic_sub_and_test,
Atomic Variables
bit,
Bit Operations
block drivers,
Block device operations
blocking/nonblocking,
Blocking and Nonblocking Operations
change_bit,
Bit Operations
clear_bit,
Bit Operations
devices,
The Device Methods
files,
File Operations
–
File Operations
filter hotplug,
Hotplug Operations
flush,
File Operations
hotplugs,
Hotplug Operations
mmap devices,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
set_bit,
Bit Operations
spinlocks,
The Spinlock Functions
string,
String Operations
,
Quick Reference
sysrq,
System Hangs
test_and_change_bit,
Bit Operations
test_and_clear_bit,
Bit Operations
test_and_set_bit,
Bit Operations
test_bit,
Bit Operations
vector,
readv and writev
poll,
File Operations
,
poll and select
–
The Underlying Data Structure
,
The Device Methods
poll_controller,
Netpoll
populate,
The vm_area_struct structure
pread,
read and write
proc_read,
Implementing files in /proc
pwrite,
read and write
read,
File Operations
,
The file Structure
,
read and write
,
read and write
,
The read Method
,
The read Method
,
Debugging by Watching
,
Oops Messages
,
Reading data from the device
,
Talking to the DMA controller
arguments to,
read and write
code for,
The read Method
configuring DMA controllers,
Talking to the DMA controller
f_pso field (file structure) and,
The file Structure
oops messages,
Oops Messages
poll method and,
Reading data from the device
rules for interpreting return values,
The read Method
strace command and,
Debugging by Watching
readdir,
File Operations
readv,
File Operations
rebuild_header,
The Device Methods
release,
File Operations
,
The release Method
,
The release Method
,
Blocking open as an Alternative to EBUSY
,
Cloning the Device on open
,
Release functions and kobject types
,
The open and release Methods
block drivers,
The open and release Methods
blocking,
Blocking open as an Alternative to EBUSY
cloning devices,
Cloning the Device on open
kobjects,
Release functions and kobject types
revalidate,
Supporting Removable Media
sbull ioctl,
The ioctl Method
select,
poll and select
–
The Underlying Data Structure
select, poll method and,
File Operations
set_config,
The Device Methods
set_mac_address,
The Device Methods
set_multicast_list,
Interface Information
,
The Device Methods
,
Kernel Support for Multicasting
show,
The seq_file interface
,
Default Attributes
kobjects,
Default Attributes
seq_file interface,
The seq_file interface
start,
The seq_file interface
stop,
The Device Methods
store (kobjects),
Default Attributes
strace command and,
Debugging by Watching
struct module *owner,
File Operations
tx_timeout,
The Device Methods
unsigned long,
File Operations
write,
File Operations
,
The file Structure
,
read and write
,
The write Method
,
The write Method
,
Oops Messages
,
Writing to the device
code for,
The write Method
f_pos field (file structure) and,
The file Structure
interpreting rules for return values,
The write Method
oops messages,
Oops Messages
poll method and,
Writing to the device
writev,
File Operations
,
readv and writev
mice,
Asynchronous Notification
,
Input
asynchronous notification,
Asynchronous Notification
hotplugging,
Input
Micro Channel Architecture (MCA),
MCA
microsecond resolution,
Knowing the Current Time
MII (Media Independent Interface),
Media Independent Interface Support
minor device numbers,
Major and Minor Numbers
MINOR macro,
Quick Reference
,
Quick Reference
minor numbers, char drivers,
Major and Minor Numbers
–
Dynamic Allocation of Major Numbers
MIPS processor,
Processor-Specific Registers
,
Platform Dependencies
inline assembly code and,
Processor-Specific Registers
porting and,
Platform Dependencies
misc-progs directory,
Redirecting Console Messages
,
Testing the Scullpipe Driver
mitigation of interrupts,
Receive Interrupt Mitigation
MKDEV macro,
Quick Reference
mlock system call,
Doing It in User Space
mmap,
Memory Management in Linux
–
High and Low Memory
,
The vm_area_struct structure
,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
,
Implementing mmap
(see also memory management)
device operations,
The mmap Device Operation
–
Remapping Kernel Virtual Addresses
implementation,
Memory Management in Linux
–
High and Low Memory
,
Implementing mmap
mmap method,
File Operations
,
The vm_area_struct structure
,
Adding VMA Operations
usage count and,
Adding VMA Operations
vm_area_struct structure and,
The vm_area_struct structure
modalities (levels), CPU,
User Space and Kernel Space
models (Linux device),
The Linux Device Model
–
The Linux Device Model
,
Kobjects, Ksets, and Subsystems
–
Subsystems
,
Low-Level Sysfs Operations
–
Symbolic Links
,
Hotplug Event Generation
,
Buses
–
Bus attributes
,
Devices
–
Driver structure embedding
,
Classes
–
Class interfaces
,
Putting It All Together
–
Remove a Driver
,
Hotplug
–
udev
,
Dealing with Firmware
–
How It Works
buses,
Buses
–
Bus attributes
classes,
Classes
–
Class interfaces
devices,
Devices
–
Driver structure embedding
firmware,
Dealing with Firmware
–
How It Works
hotplugging,
Hotplug Event Generation
,
Hotplug
–
udev
kobjects,
Kobjects, Ksets, and Subsystems
–
Subsystems
lifecycles,
Putting It All Together
–
Remove a Driver
low-level sysfs operations,
Low-Level Sysfs Operations
–
Symbolic Links
modes,
Dynamic Allocation of Major Numbers
,
The file Structure
,
Kernel Timers
,
Tasklets
–
Tasklets
device modes,
Dynamic Allocation of Major Numbers
file modes,
The file Structure
interrupt,
Kernel Timers
,
Tasklets
–
Tasklets
asynchronous execution,
Kernel Timers
tasklets,
Tasklets
–
Tasklets
mode_t f_mode (struct file field),
The file Structure
mode_t mode variable (USB),
probe and disconnect in Detail
modprobe utility,
Loading and Unloading Modules
,
The Kernel Symbol Table
,
The Kernel Symbol Table
,
Module Parameters
assigning parameter values,
Module Parameters
insmod program versus,
The Kernel Symbol Table
modularization, layered,
The Kernel Symbol Table
module.h header file,
Quick Reference
modules,
Loadable Modules
,
Loadable Modules
,
Classes of Devices and Modules
,
Classes of Devices and Modules
,
Security Issues
,
License Terms
,
Setting Up Your Test System
,
The Hello World Module
–
The Hello World Module
,
Kernel Modules Versus Applications
–
A Few Other Details
,
Kernel Modules Versus Applications
,
Kernel Modules Versus Applications
,
Kernel Modules Versus Applications
,
The Current Process
,
Compiling Modules
–
Compiling Modules
,
Loading and Unloading Modules
,
Loading and Unloading Modules
–
Platform Dependency
,
Loading and Unloading Modules
,
Version Dependency
,
Platform Dependency
,
Platform Dependency
,
The Kernel Symbol Table
–
The Kernel Symbol Table
,
The Kernel Symbol Table
,
The Kernel Symbol Table
,
Preliminaries
,
Initialization and Shutdown
–
Module-Loading Races
,
Module-Loading Races
,
Module Parameters
–
Module Parameters
,
Doing It in User Space
–
Doing It in User Space
,
Quick Reference
,
Dynamic Allocation of Major Numbers
,
Dynamic Allocation of Major Numbers
,
Dynamic Allocation of Major Numbers
,
Oops Messages
,
Completions
,
A Sample Driver
,
Kernel-assisted probing
,
Use of Standard C Types
,
Module Unloading
applications,
Kernel Modules Versus Applications
–
A Few Other Details
authorization,
Security Issues
base module parameter,
A Sample Driver
code requirements,
Preliminaries
compiling,
Compiling Modules
–
Compiling Modules
complete,
Completions
current process and,
The Current Process
dynamic module assignment,
Dynamic Allocation of Major Numbers
dynamic number assignment,
Dynamic Allocation of Major Numbers
faulty (oops messages),
Oops Messages
files,
Quick Reference
filesystem,
Classes of Devices and Modules
header files of,
Kernel Modules Versus Applications
hello world,
The Hello World Module
–
The Hello World Module
initialization,
Initialization and Shutdown
–
Module-Loading Races
kdatasize,
Use of Standard C Types
license terms,
License Terms
loading,
Kernel Modules Versus Applications
,
Loading and Unloading Modules
,
Loading and Unloading Modules
–
Platform Dependency
,
Module-Loading Races
,
Dynamic Allocation of Major Numbers
insmod program and,
Loading and Unloading Modules
races,
Module-Loading Races
using init scripts,
Dynamic Allocation of Major Numbers
parameters,
Module Parameters
–
Module Parameters
platform dependency,
Platform Dependency
,
Platform Dependency
SCSI,
Classes of Devices and Modules
short,
Kernel-assisted probing
stacking,
The Kernel Symbol Table
,
The Kernel Symbol Table
symbols,
The Kernel Symbol Table
–
The Kernel Symbol Table
test system setup,
Setting Up Your Test System
unloading,
Kernel Modules Versus Applications
,
Loading and Unloading Modules
,
Module Unloading
user-space programming,
Doing It in User Space
–
Doing It in User Space
version dependency,
Version Dependency
MODULE_ALIAS macro,
Quick Reference
MODULE_AUTHOR macro,
Quick Reference
MODULE_DESCRIPTION macro,
Quick Reference
MODULE_DEVICE_TABLE macro,
Quick Reference
,
MODULE_DEVICE_TABLE
module_init function,
Initialization and Shutdown
module_param macro,
Module Parameters
,
Quick Reference
mod_timer function,
The Timer API
,
The Implementation of Kernel Timers
monitoring,
Debugging by Watching
kernels (debugging by),
Debugging by Watching
mremap system calls,
Mapping Memory with nopage
,
Remapping Specific I/O Regions
MSR register,
ioctls
MTU, network devices and,
The Device Methods
multicasting,
Interface Information
,
Multicast
–
A Typical Implementation
IFF_MULTICAST flag and,
Interface Information
network drivers,
Multicast
–
A Typical Implementation
mutexes,
Semaphores and Mutexes
,
The Linux Semaphore Implementation
initialization,
The Linux Semaphore Implementation
mutual exclusion,
Concurrency and Its Management
Add Highlight
No Comment
..................Content has been hidden....................
You can't read the all page of ebook, please click
here
login for view all page.
Day Mode
Cloud Mode
Night Mode
Reset