Unreliable Guide To Hacking The Linux Kernel
Paul Rusty Russell
rusty@rustcorp.com.au
Copyright
© 2000 by Paul Russell
This is the first release of this document as part of the kernel tarball.
Table of Contents
Introduction
The Players
User Context
Hardware Interrupts (Hard IRQs)
Software Interrupt Context: Bottom Halves, Tasklets, softirqs
Some Basic Rules
ioctls: Not writing a new system call
Recipes for Deadlock
Common Routines
printk()
include/linux/kernel.h
copy_[to/from]_user()
/
get_user()
/
put_user()
include/asm/uaccess.h
kmalloc()
/
kfree()
include/linux/slab.h
current
include/asm/current.h
udelay()
/
mdelay()
include/asm/delay.h
include/linux/delay.h
local_irq_save()
/
local_irq_restore()
include/asm/system.h
local_bh_disable()
/
local_bh_enable()
include/asm/softirq.h
smp_processor_id
()/
cpu_[number/logical]_map()
include/asm/smp.h
__init
/
__exit
/
__initdata
include/linux/init.h
__initcall()
/
module_init()
include/linux/init.h
module_exit()
include/linux/init.h
MOD_INC_USE_COUNT
/
MOD_DEC_USE_COUNT
include/linux/module.h
Wait Queues
include/linux/wait.h
Declaring
Queuing
Waking Up Queued Tasks
Atomic Operations
Symbols
EXPORT_SYMBOL()
include/linux/module.h
EXPORT_SYMTAB
Routines and Conventions
Double-linked lists
include/linux/list.h
Return Conventions
Breaking Compilation
Initializing structure members
GNU Extensions
C++
#if
Putting Your Stuff in the Kernel
Kernel Cantrips
Thanks
Next >>>
Introduction