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
F
fast interrupt handlers,
Fast and Slow Handlers
FASYNC flag,
File Operations
,
Asynchronous Notification
fasync method,
File Operations
fasync_helper function,
The Driver's Point of View
,
Quick Reference
fasync_struct structure,
The Driver's Point of View
faults,
Kernel Modules Versus Applications
,
Debugging System Faults
–
System Hangs
faulty module (oops messages),
Oops Messages
faulty_read function,
Oops Messages
faulty_write function,
Oops Messages
fcntl system call,
The Predefined Commands
,
Asynchronous Notification
fcntl.h header file,
Blocking and Nonblocking Operations
fc_setup function,
Interface Information
fdatasync system call,
Flushing pending output
FDDI networks, configuring interfaces,
Interface Information
fddi_setup function,
Interface Information
fiber channel devices, initializing,
Interface Information
FIFO (first-in-first-out) devices,
The Design of scull
,
The Design of scull
,
poll and select
poll method and,
poll and select
File System header (fs.h),
Quick Reference
files,
Initialization and Shutdown
,
Major and Minor Numbers
,
File Operations
,
File Operations
–
File Operations
,
The file Structure
,
The file Structure
,
The file Structure
,
The file Structure
,
The inode Structure
,
How Messages Get Logged
,
Implementing files in /proc
,
Capabilities and Restricted Operations
,
poll and select
,
Access Control on a Device File
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
The /proc Interface
,
The /proc Interface
,
Assigning IP Numbers
,
Interface Information
/etc/networks[files,
Assigning IP Numbers
etc/networks,
Assigning IP Numbers
access to,
Access Control on a Device File
capability.h header file,
Capabilities and Restricted Operations
,
Quick Reference
devices,
Major and Minor Numbers
flags,
The file Structure
inode structure,
The inode Structure
interrupts,
The /proc Interface
ioctl. header file,
Quick Reference
kmsg,
How Messages Get Logged
ksyms,
Initialization and Shutdown
modes,
The file Structure
net_int c,
Interface Information
open,
The file Structure
operations,
File Operations
–
File Operations
poll.h header file,
poll and select
,
Quick Reference
/proc,
Implementing files in /proc
stat,
The /proc Interface
structure,
The file Structure
structures,
File Operations
uaccess.h header file,
Quick Reference
filesystems,
Splitting the Kernel
,
Splitting the Kernel
,
Classes of Devices and Modules
,
Classes of Devices and Modules
,
Classes of Devices and Modules
,
Major and Minor Numbers
–
Dynamic Allocation of Major Numbers
,
Creating your /proc file
–
The seq_file interface
,
The /proc Interface
,
The /proc Interface and Shared Interrupts
,
Sysfs Operations
char drivers,
Major and Minor Numbers
–
Dynamic Allocation of Major Numbers
modules,
Classes of Devices and Modules
,
Classes of Devices and Modules
nodes,
Splitting the Kernel
,
Classes of Devices and Modules
/proc,
Creating your /proc file
–
The seq_file interface
,
The /proc Interface
,
The /proc Interface and Shared Interrupts
installing interrupt handlers,
The /proc Interface
shared interrupts and,
The /proc Interface and Shared Interrupts
sysfs,
Sysfs Operations
file_operations structure,
File Operations
,
File Operations
,
The file Structure
,
The mmap Device Operation
declaring using tagged initialization,
File Operations
mmap method and,
The mmap Device Operation
filp pointer,
The file Structure
,
read and write
,
ioctl
in ioctl method,
ioctl
in read/write methods,
read and write
filp-\>f_op,
The file Structure
filter hotplug operation,
Hotplug Operations
fine-grained locking,
Fine- Versus Coarse-Grained Locking
FIOASYNC command,
The Predefined Commands
FIOCLEX command,
The Predefined Commands
FIONBIO command,
The Predefined Commands
FIONCLEX command,
The Predefined Commands
FIOQSIZE command,
The Predefined Commands
FireWire,
Classes of Devices and Modules
,
IEEE1394 (FireWire)
drivers,
Classes of Devices and Modules
firmware,
Boot Time
,
Dealing with Firmware
–
How It Works
,
The Kernel Firmware Interface
,
How It Works
,
Firmware
calling,
How It Works
functions,
Firmware
interfaces,
The Kernel Firmware Interface
Linux device model,
Dealing with Firmware
–
How It Works
PCI boot-time configuration,
Boot Time
flags,
The file Structure
,
poll and select
,
poll and select
,
poll and select
,
poll and select
,
poll and select
,
poll and select
,
poll and select
,
poll and select
,
poll and select
,
Reading data from the device
,
Asynchronous Notification
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
The Flags Argument
,
Lookaside Caches
,
Lookaside Caches
,
Lookaside Caches
,
Lookaside Caches
,
Lookaside Caches
,
get_free_page and Friends
,
get_free_page and Friends
,
Quick Reference
,
Installing an Interrupt Handler
,
Installing an Interrupt Handler
,
Installing an Interrupt Handler
,
Installing a Shared Handler
,
Quick Reference
,
Interface-Specific Types
,
Accessing the I/O and Memory Spaces
,
The Memory Map and Struct Page
,
The vm_area_struct structure
,
Supporting Removable Media
,
Initializing Each Device
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
The Important Fields
,
struct termios
,
struct termios
,
struct termios
argument,
The Flags Argument
FASYNC,
Asynchronous Notification
file,
The file Structure
GFP_ATOMIC,
The Flags Argument
,
get_free_page and Friends
GFP_COLD,
The Flags Argument
GFP_DMA,
The Flags Argument
GFP_HIGH,
The Flags Argument
GFP_HIGHMEM,
The Flags Argument
GFP_HIGHUSER,
The Flags Argument
GFP_KERNEL,
get_free_page and Friends
GFP_NOFAIL,
The Flags Argument
GFP_NOFS,
The Flags Argument
GFP_NOIO,
The Flags Argument
GFP_NORETRY,
The Flags Argument
GFP_NOWARN,
The Flags Argument
GFP_REPEAT,
The Flags Argument
GFP_USER,
The Flags Argument
GTP_KERNEL,
The Flags Argument
IFF_ALLMULTI,
Interface Information
IFF_AUTOMEDIA,
Interface Information
IFF_BROADCAST,
Interface Information
IFF_DEBUG,
Interface Information
IFF_DYNAMIC,
Interface Information
IFF_LOOPBACK,
Interface Information
IFF_MASTER,
Interface Information
IFF_MULTICAST,
Interface Information
IFF_NOARP,
Initializing Each Device
,
Interface Information
IFF_NOTRAILERS,
Interface Information
IFF_POINTTOPOINT,
Interface Information
IFF_PORTSEL,
Interface Information
IFF_PROMISC,
Interface Information
IFF_RUNNING,
Interface Information
IFF_SLAVE,
Interface Information
IFF_UP,
Interface Information
media_change,
Supporting Removable Media
memory allocation,
The Flags Argument
,
Lookaside Caches
,
Quick Reference
for net_device structure,
Interface Information
O_NONBLOCK (f_flags field),
Reading data from the device
PACKET_HOST,
The Important Fields
PG_locked,
The Memory Map and Struct Page
POLLERR,
poll and select
POLLHUP,
poll and select
POLLIN,
poll and select
POLLOUT,
poll and select
POLLPRI,
poll and select
POLLRDBAND,
poll and select
POLLRDNORM,
poll and select
POLLWRBAND,
poll and select
POLLWRNORM,
poll and select
resource (PCI),
Accessing the I/O and Memory Spaces
SA_INTERRUPT,
Installing an Interrupt Handler
,
Quick Reference
SA_SAMPLE_RANDOM,
Installing an Interrupt Handler
SA_SHIRQ,
Installing an Interrupt Handler
,
Installing a Shared Handler
SLAB_CACHE_DMA,
Lookaside Caches
SLAB_CTOR_CONSTRUCTOR,
Lookaside Caches
SLAB_HWCACHE_ALIGN,
Lookaside Caches
SLAB_NO_REAP,
Lookaside Caches
TTY_DRIVER_NO_DEVFS,
struct termios
TTY_DRIVER_REAL_RAW,
struct termios
TTY_DRIVER_RESET_TERMIOS,
struct termios
VM_IO,
The vm_area_struct structure
Wall,
Interface-Specific Types
flips (tty drivers),
No read Function?
flow of data (tty drivers),
Flow of Data
flush method,
File Operations
,
The release Method
close system call and,
The release Method
flush operation,
File Operations
flushing pending output,
Flushing pending output
,
Flushing pending output
fonts (incorrect on console),
Device Control Without ioctl
fops pointers,
File Operations
forms (BCD),
What Devices Does the Driver Support?
fragmentation,
Do-it-yourself allocation
,
Do-it-yourself allocation
free command,
Playing with the New Devices
freeing,
Allocating and Freeing Device Numbers
,
The Linux Semaphore Implementation
,
DMA pools
,
The gendisk structure
,
Functions Acting on Socket Buffers
buffers,
Functions Acting on Socket Buffers
device numbers,
Allocating and Freeing Device Numbers
disks,
The gendisk structure
DMA pools,
DMA pools
semaphores,
The Linux Semaphore Implementation
free_dma function,
Registering DMA usage
free_irq function,
Installing a Shared Handler
free_netdev functions,
Module Unloading
free_pages function,
get_free_page and Friends
fs.h header file,
Quick Reference
,
Blocking and Nonblocking Operations
,
The Driver's Point of View
,
Quick Reference
asynchronous notification and,
The Driver's Point of View
blocking/nonblocking operations,
Blocking and Nonblocking Operations
fsync method,
File Operations
,
Flushing pending output
full class interfaces,
The Full Class Interface
functions,
The Hello World Module
,
The Hello World Module
,
Kernel Modules Versus Applications
,
A Few Other Details
,
Initialization and Shutdown
–
Module-Loading Races
,
Initialization and Shutdown
,
The Cleanup Function
,
The open Method
–
The open Method
,
The release Method
,
scull's Memory Usage
,
printk
–
Printing Device Numbers
,
printk
,
How Messages Get Logged
,
How Messages Get Logged
,
Turning the Messages On and Off
,
Implementing files in /proc
,
Creating your /proc file
,
Creating your /proc file
,
The seq_file interface
,
The seq_file interface
,
The seq_file interface
,
The seq_file interface
,
The seq_file interface
,
The seq_file interface
,
Oops Messages
,
Oops Messages
,
System Hangs
,
System Hangs
,
System Hangs
,
Semaphores and Mutexes
,
The Linux Semaphore Implementation
,
The Linux Semaphore Implementation
,
The Spinlock Functions
,
Ambiguous Rules
,
Using the ioctl Argument
,
Using the ioctl Argument
,
Using the ioctl Argument
,
Capabilities and Restricted Operations
,
Simple Sleeping
,
Manual sleeps
,
Exclusive waits
,
Ancient history: sleep_on
,
poll and select
,
The Driver's Point of View
,
The Driver's Point of View
,
Cloning the Device on open
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Quick Reference
,
Processor-Specific Registers
,
Processor-Specific Registers
,
Knowing the Current Time
,
Knowing the Current Time
,
Yielding the processor
,
Timeouts
,
Timeouts
,
Kernel Timers
,
Kernel Timers
,
The Timer API
,
The Timer API
,
The Implementation of Kernel Timers
,
Tasklets
,
Tasklets
,
Tasklets
,
Tasklets
,
Tasklets
,
Tasklets
,
Workqueues
,
The Real Story of kmalloc
–
The Size Argument
,
The Flags Argument
,
Lookaside Caches
,
Lookaside Caches
,
Lookaside Caches
,
Lookaside Caches
,
get_free_page and Friends
,
get_free_page and Friends
,
get_free_page and Friends
,
get_free_page and Friends
,
get_free_page and Friends
,
get_free_page and Friends
,
vmalloc and Friends
–
A scull Using Virtual Addresses: scullv
,
vmalloc and Friends
,
vmalloc and Friends
,
vmalloc and Friends
,
vmalloc and Friends
,
Quick Reference
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
I/O Registers and Conventional Memory
,
Manipulating I/O ports
,
Manipulating I/O ports
,
Manipulating I/O ports
,
Manipulating I/O ports
,
Manipulating I/O ports
,
Manipulating I/O ports
,
String Operations
,
String Operations
,
String Operations
,
String Operations
,
String Operations
,
String Operations
,
Pausing I/O
,
Pausing I/O
,
Using I/O Memory
,
I/O Memory Allocation and Mapping
,
I/O Memory Allocation and Mapping
,
isa_readb and Friends
,
Quick Reference
,
Installing an Interrupt Handler
,
Installing an Interrupt Handler
,
Installing an Interrupt Handler
,
Installing an Interrupt Handler
,
Installing an Interrupt Handler
,
Kernel-assisted probing
,
Kernel-assisted probing
,
The internals of interrupt handling on the x86
,
The internals of interrupt handling on the x86
,
Tasklets
,
Installing a Shared Handler
,
Installing a Shared Handler
,
Installing a Shared Handler
,
Data Alignment
,
Data Alignment
,
Linked Lists
,
Linked Lists
,
Linked Lists
,
Linked Lists
,
Linked Lists
,
Linked Lists
,
Enabling the PCI Device
,
Accessing the I/O and Memory Spaces
,
Accessing the I/O and Memory Spaces
,
Accessing the I/O and Memory Spaces
,
Accessing the I/O and Memory Spaces
,
Creating and Destroying Urbs
,
Interrupt urbs
,
Bulk urbs
,
Control urbs
,
Submitting Urbs
,
Completing Urbs: The Completion Callback Handler
,
Completing Urbs: The Completion Callback Handler
,
Canceling Urbs
,
Canceling Urbs
,
Registering a USB Driver
,
Registering a USB Driver
,
Registering a USB Driver
,
Registering a USB Driver
,
Registering a USB Driver
,
Registering a USB Driver
,
probe and disconnect in Detail
,
probe and disconnect in Detail
,
probe and disconnect in Detail
,
probe and disconnect in Detail
,
usb_bulk_msg
,
usb_control_msg
,
Other USB Data Functions
,
Other USB Data Functions
,
Release functions and kobject types
,
Bus registration
,
Bus methods
,
Iterating over devices and drivers
,
Driver structure embedding
,
Remove a Device
,
Add a Driver
,
Remove a Driver
,
udev
,
udev
,
udev
,
udev
,
The Kernel Firmware Interface
,
Sysfs Operations
,
Buses, Devices, and Drivers
,
Buses, Devices, and Drivers
,
Buses, Devices, and Drivers
,
Classes
,
Firmware
,
The Memory Map and Struct Page
,
The Memory Map and Struct Page
,
The Memory Map and Struct Page
,
Using remap_pfn_range
,
Mapping Memory with nopage
,
Performing Direct I/O
,
Setting up coherent DMA mappings
,
Scatter/gather mappings
,
Registering DMA usage
,
Registering DMA usage
,
Talking to the DMA controller
,
Talking to the DMA controller
,
Talking to the DMA controller
,
Talking to the DMA controller
,
Talking to the DMA controller
,
Talking to the DMA controller
,
Talking to the DMA controller
,
Talking to the DMA controller
,
Talking to the DMA controller
,
Direct Memory Access
,
Direct Memory Access
,
Block Driver Registration
,
Initialization in sbull
,
A Note on Sector Sizes
,
Request Processing
–
Doing without a request queue
,
A Simple request Method
,
Queue creation and deletion
,
Queueing functions
,
Queueing functions
,
Queueing functions
,
Queue control functions
,
Queue control functions
,
Queue control functions
,
Queue control functions
,
Queue control functions
,
Queue control functions
,
Queue control functions
,
Queue control functions
,
Queue control functions
,
Queue control functions
,
Command Pre-Preparation
,
Quick Reference
–
Quick Reference
,
Initializing Each Device
,
Initializing Each Device
,
Initializing Each Device
,
Module Unloading
,
Module Unloading
,
Interface Information
–
The Device Methods
,
Interface Information
,
Interface Information
,
Interface Information
,
Interface Information
,
Utility Fields
,
Opening and Closing
,
Opening and Closing
,
Controlling Transmission Concurrency
,
Controlling Transmission Concurrency
,
The Interrupt Handler
,
Changes in Link State
,
Changes in Link State
,
Changes in Link State
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
Functions Acting on Socket Buffers
,
A Typical Implementation
,
Quick Reference
–
Quick Reference
,
A Small TTY Driver
,
A Small TTY Driver
,
tty_driver Function Pointers
–
No read Function?
,
open and close
–
open and close
,
open and close
–
open and close
,
open and close
,
open and close
,
Flow of Data
,
Other Buffering Functions
,
No read Function?
,
set_termios
,
set_termios
,
tiocmget and tiocmset
,
tiocmget and tiocmset
,
ioctls
,
Quick Reference
access_ok,
Using the ioctl Argument
alloc_netdev,
Initializing Each Device
alloc_skb,
Functions Acting on Socket Buffers
alloc_tty_driver,
A Small TTY Driver
blkdev_dequeue_request,
Queueing functions
blk_cleanup_queue,
Queue creation and deletion
blk_queue_hardsect_size,
A Note on Sector Sizes
blk_queue_segment_boundary,
Queue control functions
block drivers,
Quick Reference
–
Quick Reference
buses,
Buses, Devices, and Drivers
bus_add_driver,
Add a Driver
bus_for_each_dev,
Iterating over devices and drivers
bus_register,
Bus registration
calling from modules/applications,
Kernel Modules Versus Applications
capable,
Capabilities and Restricted Operations
,
Quick Reference
chars_in_buffer,
Other Buffering Functions
claim_dma_lock,
Talking to the DMA controller
classes,
Classes
class_simple_create,
udev
class_simple_device_add,
udev
class_simple_device_remove,
udev
cleanup,
The Cleanup Function
clear_dma_ff,
Talking to the DMA controller
close (tty drivers),
open and close
–
open and close
complete (urbs),
Completing Urbs: The Completion Callback Handler
const char *dev_name,
Installing an Interrupt Handler
const char *name,
Registering a USB Driver
const struct usb_device_id*id_table,
Registering a USB Driver
constructor (kmem_cache_create),
Lookaside Caches
create_proc_read_entry,
Creating your /proc file
del_timer_sync,
The Timer API
devices,
Buses, Devices, and Drivers
dev_alloc_skb,
Functions Acting on Socket Buffers
dev_kfree_skb,
The Interrupt Handler
,
Functions Acting on Socket Buffers
disable_dma,
Talking to the DMA controller
disable_irq,
Installing a Shared Handler
disconnect (USB),
Registering a USB Driver
,
probe and disconnect in Detail
dma_free_coherent,
Setting up coherent DMA mappings
double underscore (__),
A Few Other Details
down,
The Linux Semaphore Implementation
do_close,
open and close
do_gettimeofday,
Knowing the Current Time
do_IRQ,
The internals of interrupt handling on the x86
drivers,
Buses, Devices, and Drivers
driver_unregister,
Remove a Driver
elv_next_request,
A Simple request Method
,
Queueing functions
,
Command Pre-Preparation
enable_dma,
Talking to the DMA controller
enable_irq,
Installing a Shared Handler
ether_setup,
Initializing Each Device
,
Interface Information
–
The Device Methods
fasync_helper,
The Driver's Point of View
,
Quick Reference
faulty_read,
Oops Messages
faulty_write,
Oops Messages
fc_setup,
Interface Information
fddi_setup,
Interface Information
firmware,
Firmware
free_dma,
Registering DMA usage
free_irq,
Installing a Shared Handler
free_netdev,
Module Unloading
free_pages,
get_free_page and Friends
get_cycles,
Processor-Specific Registers
get_dma_residue,
Talking to the DMA controller
get_fast_time,
Knowing the Current Time
get_free_page,
get_free_page and Friends
get_free_pages,
The Flags Argument
,
get_free_page and Friends
,
vmalloc and Friends
get_page,
Mapping Memory with nopage
get_unaligned,
Data Alignment
get_user,
Using the ioctl Argument
,
Quick Reference
get_user_pages,
Performing Direct I/O
get_zeroed_page,
get_free_page and Friends
handle_IRQ_event,
The internals of interrupt handling on the x86
hello world module,
The Hello World Module
hippi_setup,
Interface Information
inb,
Manipulating I/O ports
inb_p,
Pausing I/O
initialization,
Initialization and Shutdown
–
Module-Loading Races
inl,
Manipulating I/O ports
insb,
String Operations
inserting schedules,
System Hangs
insl,
String Operations
insw,
String Operations
int (USB),
Registering a USB Driver
int pci_enable_device,
Enabling the PCI Device
int seq_escape,
The seq_file interface
int seq_path,
The seq_file interface
int seq_printf,
The seq_file interface
int seq_putc,
The seq_file interface
int seq_puts,
The seq_file interface
inw,
Manipulating I/O ports
in_atomic,
Kernel Timers
in_interrupt,
Kernel Timers
ioctl (tty drivers),
ioctls
ioremap,
vmalloc and Friends
,
Using I/O Memory
,
Quick Reference
ioremap_nocache,
I/O Memory Allocation and Mapping
iounmap,
vmalloc and Friends
,
I/O Memory Allocation and Mapping
irqreturn_t,
Installing an Interrupt Handler
isa_readb,
isa_readb and Friends
kfree_skb,
Functions Acting on Socket Buffers
kill_fasync,
The Driver's Point of View
,
Quick Reference
kmalloc,
scull's Memory Usage
,
The Real Story of kmalloc
–
The Size Argument
,
get_free_page and Friends
allocation engine,
The Real Story of kmalloc
–
The Size Argument
performance degradation issues,
get_free_page and Friends
kmap,
The Memory Map and Struct Page
kmap_skb_frag,
Functions Acting on Socket Buffers
kmem_cache_alloc,
Lookaside Caches
kmem_cache_create,
Lookaside Caches
kmem_cache_t type,
Lookaside Caches
list_add,
Linked Lists
list_add_tail,
Linked Lists
list_del,
Linked Lists
list_empty,
Linked Lists
list_move,
Linked Lists
list_splice,
Linked Lists
locking,
Ambiguous Rules
match (buses),
Bus methods
module_init,
Initialization and Shutdown
mod_timer,
The Timer API
,
The Implementation of Kernel Timers
netif_carrier_off,
Changes in Link State
netif_carrier_ok,
Changes in Link State
netif_carrier_on,
Changes in Link State
netif_start_queue,
Opening and Closing
netif_stop_queue,
Opening and Closing
,
Controlling Transmission Concurrency
netif_wake_queue,
Controlling Transmission Concurrency
network drivers,
Quick Reference
–
Quick Reference
open (tty drivers),
open and close
–
open and close
outb,
Manipulating I/O ports
outb_p,
Pausing I/O
outl,
Manipulating I/O ports
outsb,
String Operations
outsl,
String Operations
outsw,
String Operations
outw,
Manipulating I/O ports
page-oriented allocation,
get_free_page and Friends
,
Quick Reference
pci_map-sg,
Scatter/gather mappings
pci_remove_bus_device,
Remove a Device
pci_resource_,
Accessing the I/O and Memory Spaces
pfn_to_page,
The Memory Map and Struct Page
poll_wait,
poll and select
,
Quick Reference
printk,
The Hello World Module
,
printk
–
Printing Device Numbers
,
How Messages Get Logged
,
How Messages Get Logged
,
Turning the Messages On and Off
,
The seq_file interface
circular buffers for,
How Messages Get Logged
logging messages from,
How Messages Get Logged
seq_file interface (avoiding in),
The seq_file interface
turning debug messages on/off,
Turning the Messages On and Off
probe (USB),
probe and disconnect in Detail
probe_irq_off,
Kernel-assisted probing
probe_irq_on,
Kernel-assisted probing
put_unaligned,
Data Alignment
put_user,
Using the ioctl Argument
,
Quick Reference
queues,
Queueing functions
rdtscl,
Processor-Specific Registers
read (tty drivers),
No read Function?
read_proc,
Implementing files in /proc
register_blkdev,
Block Driver Registration
register_chrdev,
udev
register_netdev,
Initializing Each Device
relaease_dma_lock,
Talking to the DMA controller
release (kobjects),
Release functions and kobject types
remap_pfn_range,
Using remap_pfn_range
remove_proc_entry,
Creating your /proc file
request (block drivers),
Request Processing
–
Doing without a request queue
request_dma,
Registering DMA usage
request_firmware,
The Kernel Firmware Interface
SAK,
System Hangs
sbull_request,
Initialization in sbull
schedule,
System Hangs
,
Quick Reference
,
Yielding the processor
execution of code (delaying),
Yielding the processor
preventing endless loops with,
System Hangs
schedule_timeout,
Timeouts
scull,
The open Method
–
The open Method
,
The release Method
open method,
The open Method
–
The open Method
release method,
The release Method
scull_cleanup,
Cloning the Device on open
scull_getwritespace,
Manual sleeps
semaphores,
Semaphores and Mutexes
(see semaphores)
set_dma_addr,
Talking to the DMA controller
set_dma_count,
Talking to the DMA controller
set_dma_mode,
Talking to the DMA controller
set_mb,
I/O Registers and Conventional Memory
set_multicast_list,
A Typical Implementation
set_rmb,
I/O Registers and Conventional Memory
set_termios,
set_termios
set_wmb,
I/O Registers and Conventional Memory
sg_dma_address,
Direct Memory Access
sg_dma_len,
Direct Memory Access
show,
Driver structure embedding
skb_headlen,
Functions Acting on Socket Buffers
skb_headroom,
Functions Acting on Socket Buffers
skb_is_nonlinear,
Functions Acting on Socket Buffers
skb_pull,
Functions Acting on Socket Buffers
skb_push,
Functions Acting on Socket Buffers
skb_put,
Functions Acting on Socket Buffers
skb_reserve,
Functions Acting on Socket Buffers
skb_tailroom,
Functions Acting on Socket Buffers
sleep_on,
Ancient history: sleep_on
acting on socket buffers,
Functions Acting on Socket Buffers
spinlocks,
The Spinlock Functions
struct module *owner,
Registering a USB Driver
sysfs filesystem,
Sysfs Operations
sys_syslog,
printk
tasklet_schedule,
Tasklets
tiny_close,
open and close
tiocmget,
tiocmget and tiocmset
tiomset,
tiocmget and tiocmset
tr_configure,
Interface Information
tty drivers,
Quick Reference
tty_driver (pointers),
tty_driver Function Pointers
–
No read Function?
tty_get_baud_rate,
set_termios
tty_register_driver,
A Small TTY Driver
unregister_netdev,
Module Unloading
unsigned int irq,
Installing an Interrupt Handler
unsigned long flags,
Installing an Interrupt Handler
unsigned long pci_resource_end,
Accessing the I/O and Memory Spaces
unsigned long pci_resource_start,
Accessing the I/O and Memory Spaces
unsigned pci_resource_flags,
Accessing the I/O and Memory Spaces
up,
The Linux Semaphore Implementation
urbs_completion,
Completing Urbs: The Completion Callback Handler
usb_alloc_urb,
Creating and Destroying Urbs
usb_bulk_msg,
usb_bulk_msg
usb_control_msg,
usb_control_msg
usb_fill_bulk_urb,
Bulk urbs
usb_fill_control_urb,
Control urbs
usb_fill_int_urb,
Interrupt urbs
usb_get_descriptor,
Other USB Data Functions
usb_kill_urb,
Canceling Urbs
usb_register_dev,
probe and disconnect in Detail
usb_set_intfdata,
probe and disconnect in Detail
usb_string,
Other USB Data Functions
usb_submit_urb,
Submitting Urbs
usb_unlink_urb,
Canceling Urbs
vfree,
vmalloc and Friends
virt_to_page,
The Memory Map and Struct Page
vmalloc allocation,
vmalloc and Friends
–
A scull Using Virtual Addresses: scullv
void,
Registering a USB Driver
void barrier,
I/O Registers and Conventional Memory
void blk_queue_bounce_limit,
Queue control functions
void blk_queue_dma_alignment,
Queue control functions
void blk_queue_hardsect_size,
Queue control functions
void blk_queue_max_hw_segments,
Queue control functions
void blk_queue_max_phys_segments,
Queue control functions
void blk_queue_max_sectors,
Queue control functions
void blk_queue_max_segment_size,
Queue control functions
void blk_start_queue,
Queue control functions
void blk_stop_queue,
Queue control functions
void mb,
I/O Registers and Conventional Memory
void read_barrier_depends,
I/O Registers and Conventional Memory
void rmb,
I/O Registers and Conventional Memory
void smp_mb,
I/O Registers and Conventional Memory
void smp_rmb,
I/O Registers and Conventional Memory
void smp_wmb,
I/O Registers and Conventional Memory
void tasklet_disable,
Tasklets
void tasklet_disable_nosync,
Tasklets
void tasklet_enable,
Tasklets
void tasklet_hi_schedule,
Tasklets
void tasklet_kill,
Tasklets
void tasklet_schedule,
Tasklets
void wmb,
I/O Registers and Conventional Memory
void*dev_id,
Installing an Interrupt Handler
wait_event_interruptible_timeout,
Timeouts
wake-up,
Simple Sleeping
,
Quick Reference
wake_up,
Exclusive waits
,
Quick Reference
wake_up_interruptible,
Quick Reference
wake_up_interruptible_sync,
Quick Reference
wake_up_sync,
Quick Reference
workqueues,
Workqueues
write (tty drivers),
Flow of Data
xmit_lock,
Utility Fields
f_dentry pointer,
The file Structure
f_flags field (file structure),
The file Structure
,
The Predefined Commands
,
Blocking and Nonblocking Operations
O_NONBLOCK flag,
The Predefined Commands
,
Blocking and Nonblocking Operations
f_mode field (file structure),
The file Structure
f_op pointer,
The file Structure
f_pos field (file structure),
The file Structure
,
Implementing files in /proc
read_proc function and,
Implementing files in /proc
F_SETFL command,
The Predefined Commands
,
Asynchronous Notification
fcntl system call and,
Asynchronous Notification
F_SETFL fcntl command,
Asynchronous Notification
F_SETOWN command,
Asynchronous Notification
,
Asynchronous Notification
fcntl system call and,
Asynchronous Notification
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