Next:
Before You Begin...
Up:
The Linux Kernel Hackers'
Previous:
The Linux Kernel Hackers'
Contents
Before You Begin...
Typographical Conventions
Assumptions
Hacking Wisdom
Static variables
libc unavailable
is not UNIX
Useful references
Read the FAQ
Device Drivers
What is a Device Driver?
User-space device drivers
Example: vgalib
Example: mouse conversion
Device Driver Basics
Namespace
Allocating memory
Character vs. block devices
Interrupts vs. Polling
The sleep-wakeup mechanism
More advanced sleeping
The VFS
The lseek() function
The read() and write() functions
The readdir() function
The select() function
The ioctl() function
The mmap() function
The open() and release() functions
The init() function
Character Device Drivers
Initialization
Interrupts vs. Polling
TTY drivers
Block Device Drivers
Initialization
The file blk.h
Recognizing PC standard partitions
The Buffer Cache
The Strategy Routine
Example Drivers
Supporting Functions
Writing a SCSI Device Driver
Why You Want to Write a SCSI Driver
What is SCSI?
SCSI phases
SCSI Commands
Getting Started
Before You Begin: Gathering Tools
The SCSI Interface
The Scsi_Host Structure
Variables in the Scsi_Host structure
name
can_queue
this_id
sg_tablesize
cmd_per_lun
present
unchecked_isa_dma
Functions in the Scsi_Host Structure
detect()
Requesting the IRQ
Requesting the DMA channel
info()
queuecommand()
done()
command()
abort()
reset()
slave_attach()
bios_param()
The Scsi_Cmnd Structure
Reserved Areas
Informative Variables
The Scatter-Gather List
Scratch Areas
The scsi_done() Pointer
The host_scribble Pointer
The Scsi_Pointer Structure
Acknowledgements
Network Device Drivers
The /proc filesystem
/proc Directories and Files
Structure of the /proc filesystem
Programming the /proc filesystem
The scheduler
The code
How System Calls Work
What Does the 386 Provide?
How Uses Interrupts and Exceptions
How Initializes the system call vectors
How to Add Your Own System Calls
Linux Memory Management
Overview
Physical memory
A user process' view of memory
Memory Management data in the process table
Memory initialization
Processes and the Memory Manager
Acquiring and Freeing Memory: Paging Policy
The page fault handlers
Paging
80386 Memory Management
Paging on the 386
Page Fault handling Information
Segments in the 80386
Selectors in the 80386
Segment descriptors
Macros used in setting up descriptors
Bibliography
Normal Bibliography
References
Annotated Bibliography
Tour of the kernel source
Booting the system
Spinning the wheel
How the kernel sees a process
Creating and destroying processes
Executing programs
Accessing filesystems
Quick Anatomy of a Filesystem Type
The console driver
How file operations are dispatched to the console
Writing to the console
Reading the console
Keyboard management
Switching the current console
The selection mechanism
ioctl()ling the device
The GNU General Public License
Preamble
Terms and Conditions for Copying, Distribution, and Modification
Appendix: How to Apply These Terms to Your New Programs
About this document ...
Ross Biro
Mon May 22 11:57:09 PDT 1995