Linux Device Drivers, 2nd Edition
Index
[ Numbers ],
[ A ],
[ B ],
[ C ],
[ D ],
[ E ],
[ F ],
[ G ],
[ H ],
[ I ],
[ J ],
[ K ],
[ L ],
[ M ],
[ N ],
[ O ],
[ P ],
[ Q ],
[ R ],
[ S ],
[ T ],
[ U ],
[ V ],
[ W ],
[ X ],
[ Z ]
Numbers[ Top ]
16-bit hardware addresses (PCI), 471
16-bit PCI registers, 476
16-bit ports, 230
string functions for, 232
32-bit addresses
PCI bus I/O and memory space, 473
32-bit PCI registers, 483, 485-488
32-bit ports, 230
string functions for, 232
64-bit addresses
accessing PCI bus memory space, 473
64-bit programmable decoder, 485
64-bit regions and PCI registers, 483
8-bit ports, 230
reading/writing, 230
string functions for, 232
A[ Top ]
access
blocking open requests, 168
cloning devices on open, 169-171
concurrent (see race conditions)
to device files, 164-171
to drivers, 59
to expansion board memory, 238-247
PCI configuration space, 480-483
restricting
to simultaneous users, 167
via capabilities, 137
to user space in Linux 2.0, 173-175
access_ok(), 135
active queue heads, 342
add_timer(), 201-203, 207
__add_wait_queue(), 287, 292
add_wait_queue_exclusive(), 146, 179
add_wait_queue(), 179, 287, 292
Address Resolution Protocol (see ARP)
address types, 371
addresses
bus (see bus addresses)
hardware (see hardware addresses)
PCI, 471-474
for peripheral boards, 473
Plug and Play, 496
resolving, 455-458
Adelson-Velski-Landis (AVL) tree, 515
alias directive (modprobe), 308
aliases for device names, 69
alignment, data, 299
alloc_bootmem_low_pages(), 221, 225
alloc_bootmem_low(), 221, 225
alloc_bootmem_pages(), 221, 225
alloc_bootmem(), 221, 225
alloc_kiovec(), 396, 422
map_user_kiobuf and, 399
alloc_skb(), 454, 468
allocate_resource structure, 41
allocating
DMA buffers, 402-404
major device numbers, 57-61
memory, 36, 73-75
at boot time, 221-223
determining how much, 211
kmalloc for, 208-211
by page, 214-217
vmalloc for, 217-220
ports, 36-41
resources in Linux 2.4, 40
socket buffers, 449, 454
allocator module, 223
Alpha architecture
I/O memory management support, 411
porting and, 233
alpha_machine_vector structure, 494
analyzing crash dumps, 125
applications vs. kernel modules, 16-21
arch directory, 517
ARM architecture
layout of boot code, 510
PCI DMA interface support, 411
porting and, 233
ARP (Address Resolution Protocol)
Ethernet and, 455
IFF_NOARP flag and, 432, 438
overriding, 456
asm directory, 17
<asm/atomic.h> header file, 285, 291
<asm/bitops.h> header file, 284, 291
<asm/byteorder.h> header file, 298, 304
<asm/current.h> header file, 21
<asm/dma.h> header file, 414, 416, 423
<asm/io.h> header file, 249, 422
accessing I/O ports, 230
converting between bus/virtual addresses, 404
<asm/ioctl.h> header file, 130
<asm/irq.h> header file, 262, 267
<asm/msr.h> header file, 183, 205
<asm/page.h> header file, 297, 303, 372, 376
<asm/pcibios.h> header file, 502
<asm/pgtable.h> header file, 218, 377
<asm/processor.h> header file, 497
<asm/sbus.h> header file, 412
<asm/segment.h> header file, 95
<asm/semaphore.h> header file, 76, 95
<asm/system.h> header file, 228, 249
<asm/types.h> header file, 295
<asm/uaccess.h> header file, 78, 95, 135, 177
<asm/unaligned.h> header file, 299, 304
assembly language dump of code, 116
asynchronous DMA, 401
asynchronous notification, 159-162
backward compatibility issues, 173
drivers and, 161
asynchronous running of task queues, 191
atomic_add_and_test(), 286
atomic_add(), 286, 291
atomic bit operations, 284
backward compatibility issues, 289
atomic_dec_and_test(), 286, 291
atomic_dec(), 286, 291
atomic_inc_and_test(), 286
atomic_inc(), 286, 291
atomic integer operations, 285
atomic_read(), 286
atomic_set(), 286
atomic_sub_and_test(), 286
atomic_sub(), 286, 291
atomic_t data type, 285
atomic.h header file, 285, 291
autoconf.h header file, 316
autodetecting parameter values, 42
autoirq_report(), 260
autoirq_setup(), 260
automatic
device parameters detection, 43
driver configuration, 43
IRQ number detection, 258-262
shared interrupts and, 276
module loading/unloading, 305-311
AVL (Adelson-Velski-Landis) tree, 515
B[ Top ]
b_end_io(), 339, 368
clustered I/O, 341
"make request" function and, 346
backward compatibility
access to user space, 173-175
asynchronous notification, 173
block drivers, 364-366
capabilities, 175
compiling for multiprocessor systems, 48
demand-loading capability, 318
DMA (direct memory access), 420
exporting symbols, 48-50
file_operations structure, 91-93
fsync method, 173
hardware management, 248
interrupt handling, 288
memory management, 418-420
programming interface, 223
module configuration parameters, 50
module usage count, 93
networking, 464-466
peripheral buses, 502
resource management, 47
seeking, 176
select method in Linux version 2.0, 175
semaphore support, 94
task queues/timing issues, 204
user space, access to, 94
wait queues, 172
barrier(), 228, 249
base address registers, 485-488
base module parameter, 237
base name, device, 356
bdops (see block_device_operations structure)
bfd (binary format description) library and ksymoops, 116
BH (see bottom halves)
bh->b_end_io(), 339, 368
clustered I/O, 341
"make request" function and, 346
bibliography, 527
__BIG_ENDIAN symbol, 298, 304
big-endian byte order, 298
bigphysarea patch, 222
binary format description (bfd) library and ksymoops, 116
binary formats, 513
binfmt_elf.c file, 513
bit operations, 284
backward compatibility issues, 289
bit specifications, 236
bit splitting and minor numbers, 69
bitfields, defining ioctl commands, 130, 177
bitops.h header file, 284, 291
bits, clearing, 264
blk_cleanup_queue(), 323, 366
BLK_DEFAULT_QUEUE macro, 324, 367
blk_dev global array, 324, 364, 367
blk_dev_struct structure, 324
blk_init_queue(), 323, 366
initializing device-specific queues, 343
blk_ioctl(), 351, 368, 518
backward compatibility issues, 365
blk_queue_headactive(), 342, 368
blk_queue_make_request(), 346, 368
blk_size global array, 324, 367
sizes array and, 357
blkdev_dequeue_request(), 338, 368
end_request() and, 340
blkdev_entry_next_request(), 337, 368
blkdev_next_request(), 337, 368
blkdev_prev_request(), 337, 368
blkdev_release_request(), 338, 368
blkdev.h header file, 323, 366
BLKELVGET command, 351
BLKELVSET command, 351
BLKFLSBUF command, 350
BLKFRAGET command, 350
BLKFRASET command, 350
BLKGETSIZE command, 349, 361
blk.h header file, 328-330, 367
clustered requests and, 340
declaring DEVICE_NR first, 361
how macros and functions work, 339
BLKPG command, 350
blkpg.c file, 518
blkpg.h header file, 351
BLKRAGET command, 350
BLKRASET command, 350
BLKROGET command, 350
BLKROSET command, 350
BLKRRPART command, 350, 361
BLKSECTGET command, 350
BLKSECTSET command, 350
blksize_size global array, 324, 367
BLKSSZGET command, 350
block_dev.c file, 513
block_device_operations structure, 322
backward compatibility issues, 364
I/O operations, 323
removable devices, 352
block drivers, 7
arrays for information about, 324
backward compatibility, 364-366
generic hard disk support, 356
handling requests, 330-348
interrupt-driven, 362-364
io_request_lock and, 338
ioctl method and, 349-352
<linux/blk.h> header file (see blk.h header file)
loading/unloading, 321-354
mounting devices, 348
multiqueue, 342-345
partitionable devices and, 355-362
raw I/O capability, 397
registering/unregistering, 322-328
removable block devices, 352-354
vs. char drivers, 321
block_fsync method, 158, 328
blocking I/O operations, 141-153
blocking open requests, 168
testing, 153
BogoMips value, 188
books
Linux kernel, 527
Unix design/internals, 528
booting
acquiring a dedicated buffer at, 221
allocating memory while, 221-223
kernels, 507-509
(non)modularized drivers and, 434
PCI and, 474
what happens before, 509-511
bootmem.h header file, 221, 225
bottom halves
BH mechanism, 271
of interrupt handlers, 269-274
marking, 272
task queues, 190, 197
tasklets and, 198-200, 270
writing, 273
bounce buffers, 406
architectures not supporting, 411
streaming DMA mappings and, 409
bridge subdirectory, 516
bridges for PCI systems, 471
ignored by pcidata module, 482
BSS segments, 379
buffer cache and request structure, 335
buffer_head structure, 332
fields for, 335
performing clustered I/O, 341
buffer.c file, 513
buffering and interrupt-driven I/O, 278
buffers
buffer overruns, 112
DMA, 402-404
for printk(), 100
in request queues, 336
socket (see socket buffers)
user-space and raw I/O, 397-400
bugs (see debugging; troubleshooting)
bus addresses, 372
converting between virtual addresses and, 404
dma_addr_t type and, 406
DMA-based hardware and, 404
bus architecture, 470-505
backward compatibility issues, 502
device-specific directories, 523
ISA interface, 494-496
PC/104 and PC/104+, 496
PCI interface, 470-494
bus_to_virt(), 404, 422
busy loops, 186
busy waiting implementation, 186
byte order
PCI registers and, 475, 480
portability and, 298
byteorder.h header file, 298, 304
bzImage file, 510
C[ Top ]
caches, lookaside, 211-214
backward compatibility issues, 223
caching problems for devices, 228, 385
call_usermodehelper(), 311, 320
CAP_DAC_OVERRIDE capability, 137
single-user access to devices, 168
CAP_NET_ADMIN capability, 137
CAP_SYS_ADMIN capability, 137
CAP_SYS_MODULE capability, 137
CAP_SYS_RAWIO capability, 137
CAP_SYS_TTY_CONFIG capability, 137
capabilities
restricted operations and, 137
testing for, using request_module, 306
capability.h header file, 137, 178
capable(), 137, 178
Card Select Number (CSN), 496
cardctl program, 3
carrier signals, 451
cdrom_device_info structure, 520
cdrom.c file, 520
CFLAGS variable (make), 23
change_bit(), 284, 291
change_mtu method, 441
improving performance using socket buffers, 449
channels, DMA, 413-415
char drivers, 6, 54-96
defining mechanism of, 54
version numbers, 55-62
vs. block drivers, 321
check_disk_change(), 354, 369
check_media_change method, 353
backward compatibility issues, 364
check_mem_region(), 53, 250
backward compatibility issues, 47
working with I/O memory, 40, 239
check_region(), 52, 250
backward compatibility issues, 47
working with I/O ports, 38, 229
CHECKSUM_ symbols, 449
checksums
adding to symbol names, 314
building, 317
circular buffers, 279
implementing interrupt handlers, 264-266
for printk(), 100
claim_dma_lock(), 416, 424
class PCI register, 476
classes, module, 6-8
cleanup_module(), 16, 50
error handling and, 31
network drivers and, 434
releasing ports, 39
unregistering items, 34
using unique names instead of, 34
clear_bit(), 284, 291
clear_dma_ff(), 417, 424
CLEAR_INTR macro, 329
clearing bits on interface board, 264
cli(), 252
clock cycles, counting, 182
clock ticks (see jiffies value)
cloning devices on open requests, 169-171
close method, 72
accessing data within partitions, 360
adding VMA operations, 386
after cloning devices on open, 171
for single-open devices, 165
vm_operations_struct structure, 381
(see also release method)
closing network interface, 443-445
clustered requests, 340
code, delaying execution of, 186-189
coding style, 23
collisions, device, 36, 38
command numbers, ioctl, 130-133
command-line parsing, 507
command-oriented drivers, 140
compiler optimizations, 227
concurrency, 20, 278-288
controlling transmission, 446
multiqueue block drivers and, 345
concurrent access (see race conditions)
conditional compilation, avoiding, 90
CONFIG_DEVFS_FS, 85
portability issues and, 90
CONFIG_MODVERSIONS(), 316, 320
CONFIG_PCI(), 477, 503
CONFIG_SMP configuration option, 48
config.h header file, 316, 320, 477, 503
configuration space, PCI, 473, 480-483
configuration transactions, PCI, 473
configuring
DMA controller, 415-418
drivers, 42-44
network devices, 441
PCI registers, 475-479
consistent DMA mappings, 406
setting up, 407
console_loglevel variable, 98
debugging system hangs, 118
console.c file, 518, 522
consoles
drivers/char directory and, 518
frame buffer consoles, 522
selecting for messages, 99
wrong font on, 140
constructor function (kmem_cache_create), 212
controlling access (see access)
controlling-by-write, 140
converting virtual addresses, 404
__copy_from_user, 79, 96
copy_from_user(), 79
memcpy_tofs and, 94
vmalloc() and, 218
__copy_to_user, 79, 96
copy_to_user(), 79
memcpy_fromfs and, 94
using put_user() instead of, 136
copying, cross-space, 78
core files, 120
core-file (gdb command), 121
core/skbuff.c file, 516
counter registers, 182
CPU modalities (levels), 19
__cpu_to_le32 macro, 298, 304
crash dump analyzers, 125
CRC (cyclic redundancy check) algorithm and module version control, 314
create_bounce(), 348
create_module system call, 9
using vmalloc() and, 218
create_proc_read_entry(), 106
cross compilation and platform dependency, 27
cross-space copying, 78
CSN (Card Select Number), 496
CURRENT_DEV macro, 329, 332
current_nr_sectors field, 332
current process, 21, 52
current time, retrieving, 184
current.h header file, 21
currentime file (jit module), 185
CURRENT(), 330, 368
accessing fields in request structure, 332
custom
data types, 296
ioctl methods for networking, 458
task queues, 198
cycles_t type, 183
D[ Top ]
data
explicitly sizing, 295
physical packet transport, 429, 445-450
protecting from race conditions, 279
transferring
for block driver requests, 332-334
with DMA, 401-418
using ioctl method, 131
unaligned, portability and, 299
data structures, portability of, 299
data types
for explicitly sizing data, 295
interface-specific, 296
loose typing for I/O functions, 297
mixing different, 294
portability and, 293-297
standard C types, 293
dataalign program, 300
datasize program, 293
dcache.c file, 513
dd utility and scull driver example, 73
deadlocks
avoiding, 77
detecting with IKD, 124
deallocating (see allocating)
debugging, 97-127
using a debugger, 120-127
using Dynamic Probes, 127
using gdb, 120-122
using IKD (integrated kernel debugger), 124
implementing debug levels, 102
interrupt handling, 267
with ioctl method, 108
using kdb kernel debugger, 122-124
using kgdb, 125
using Linux Trace Toolkit (LTT), 127
locked keyboard, 118
module loading, 24
modules, 113-118
by printing, 97-103
with /proc filesystem, 103-107
by querying, 103-108
race conditions, 278-288
system faults, 110-120
system hangs, 118
using User-Mode Linux, 126
by watching in user space, 108-110
(see also troubleshooting)
DECLARE_TASK_QUEUE, 191, 198, 206
DECLARE_TASKLET, 199, 206, 270, 290
DECLARE_TASKLET_DISABLED, 199, 206
DECLARE_WAIT_QUEUE_HEAD, 141, 143
jiq module and , 193
decoders, programmable, 485
decoding oops messages, 113-118
DEFAULT_CONSOLE_LOGLEVEL, 98
DEFAULT_MESSAGE_LOGLEVEL, 98
del_timer_sync(), 202, 207
avoiding race conditions, 203
backward compatibility issues, 205
del_timer(), 202, 207
delay.h header file, 188, 206
delaying execution of code, 186-188
delete_module system call, 34
demand-loading modules, 305-311
slave/master modules example, 309
dentry field (file structure), 68
backward compatibility issues, 93
depmod program, 319
dereferencing
invalid pointers, 111-118
I/O pointers, not recommended, 240
memory addresses, 294
physical addresses, 240
destructor function (kmem_cache_create), 212
dev_alloc_skb(), 449, 454, 468
dev_id pointer, 254, 267
installing shared handlers, 275
dev_kfree_skb(), 454, 468
dev_mc_list structure, 462
/dev nodes, 6
assigning, 57
char devices and, 55
/dev/random device, 255
/dev/urandom device, 255
dynamic major number allocation, 58
removing, 61
dev structure and device initialization, 432
dev_t type (Unix), 62
dev_table.c file, 521
dev_tint(), backward compatibility issues for, 465
development kernels, 11
devfs (device filesystem), 56, 85-91
advantages of, 85
dual-mode initialization, 88
flags, 87
portability issues and, 90
DEVFS_FL_AUTO_DEVNUM flag, 87
DEVFS_FL_AUTO_OWNER flag, 87
DEVFS_FL_DEFAULT flag, 87
DEVFS_FL_HIDE flag, 87
DEVFS_FL_NO_PERSISTENCE flag, 87
DEVFS_FL_NONE flag, 87
DEVFS_FL_SHOW_UNREG flag, 87
devfs_fs_kernel.h header file, 96
devfs_get_flags(), 87
devfs_mk_dir(), 86
devfs_register(), 86
devfs_set_flags(), 87
devfs_unregister(), 86
device control operations, 5
device entry points, filesystem for, 85-91
device files, 55
controlling access, 164-171
deleting, 61
device filesystem (see devfs)
DEVICE_INTR symbol, 329, 367
device memory (see I/O memory)
DEVICE_NAME symbol, 329, 367
DEVICE_NO_RANDOM symbol, 329
DEVICE_NR symbol, 329, 367
minor_shift value and, 356
DEVICE_OFF macro, 329
DEVICE_ON macro, 329
DEVICE_REQUEST symbol, 329
device-dependent symbols, 328-330
deviceID PCI register, 476
devices
assigning virtual addresses to, 242
autodetecting parameters of, 43
base name of, 356
block (see block drivers)
caching problems, 228, 385
character (see char drivers)
classes of, 6-8
cloning on open requests, 169-171
collisions between, 36
creating using devfs, 86, 88
DMA and, 401-418
file operations on, 63-66
hardware management, 226-250
hot-pluggable, handling, 489-493
identifying type with ls command, 55
interrupts (see interrupt handlers)
names of, 56
aliases for, 69
dynamic major number allocation, 58
removing, 61
network (see network drivers)
partitionable, 355-362
accessing data within partitions, 360
PCI (see PCI)
reading and writing, 78-84
reading data from, 157
removable, 352-354
removing using devfs, 86
seeking, 163
single-open, 165
single-user access to, 167
truncating on open, 71
version (see version numbering)
writing control sequences to, 140
writing data to, 157
devices.c file, 513
digital I/O ports, 235-238
direct memory access (see DMA)
directly mapped I/O memory, 240
directories of kernel headers, 17
directory entry (file structure), 68
backward compatibility issues, 93
disable_dma(), 417, 424
disable_irq_nosync(), 267, 290
backward compatibility issues, 289
disable_irq(), 267, 290
backward compatibility issues, 289
shared handlers and, 276
disabling interrupts, 267
using save_flags/restore_flags, 252
disassemble command (gdb), 121
disassembled code and ksymoops, 116
disk changes, 352-354
disk files vs. open files, 67
disk geometry, retrieving, 351
dma_addr_t type, 406
DMA (direct memory access), 401-418
allocating buffers for, 402-404
backward compatibility issues, 420
configuring controller, 415-418
dedicated buffers at boot time, 221
__get_dma_pages() and, 215, 223
__GFP_DMA flag and, 209
for ISA memory, 413-418
PCI devices and, 404-412
dealing with difficult hardware, 405
DMA mappings (see DMA mappings)
hardware dependencies for, 411
simple example of, 411
registering usage, 414
ring buffers, 402
DMA mappings, 405-410
consistent, 406
setting up, 407
scatter-gather, 409
streaming, 406
setting up, 407-409
dma_spin_lock, 416
DMAC (DMA controller), 413
DMA-capable memory zone, 210
SLAB_CACHE_DMA flag and, 212
dma.h header file, 414, 416, 423
dmesg command, 115
do_basic_setup(), 508
do_gettimeofday(), 185, 206
do_initcalls(), 508
do_ioctl method, 441, 458
do_IRQ(), 263
do_map_pgoff(), 514
do_timer(), 193
BH mechanism and, 272
down_interruptible(), 77, 95
down(), 77
dquot.c file, 513
driver modules, 7
drivers
adding new, 56-61
asynchronous notification and, 161
character (see char drivers)
choosing ioctl numbers for, 130
command-oriented, 140
configuring, 42-44
device names (see devices, names of)
file operations, 63-66
FireWire, 8
I2O, 8
input/output buffers and, 148
interrupt-driven, 362-364
mechanism of (see mechanism, driver)
monitoring with preprocessor, 101-103
network drivers, 425-469
probing for IRQ numbers, 261
removing (see unloading modules)
SCSI, 7
security issues, 9
USB (see USB drivers)
user-space, 45
version (see version numbering)
writing, using devfs, 85-91
drivers/block directory, 518
drivers/cdrom directory, 520
drivers/char directory, 518
drivers/i2c directory, 524
drivers/ide directory, 519
drivers/input directory, 523
drivers/md directory, 519
drivers/media directory, 523
drivers/mtd directory, 524
drivers/net directory, 521
driver-specific symbols, 328-330
drivers/scsi directory, 520
drivers/sound directory, 521
drivers/video directory, 522
dump analyzers, 125
Dynamic Probes debugging tool, 127
E[ Top ]
EBUSY error, 168
edge-triggered vs. level-triggered interrupt lines, 274, 495
EISA (Extended ISA) buses, 497
elevator.o file, 519
ELF sections
avoiding #ifdefs, 508
changes to kernel compilation, 509
embedded systems, different ld scripts needed for , 510
enable_dma(), 417, 424
enable_irq(), 267, 290
backward compatibility issues, 289
shared handlers and, 276
enabling interrupts, 267
using save_flags/restore_flags, 252
end_request(), 330, 368
DEVICE_NO_RANDOM symbol and, 329
interrupt-driven block drivers and, 362
splitting up multibuffer requests, 339
end_that_request_first(), 340, 368
end_that_request_last(), 340, 368
endless loops, preventing, 118
end-of-file
poll method and, 156
seeking relative to, 163
enet_statistics structure, Linux 2.0, 465
entropy pool and SA_SAMPLE_RANDOM flag, 255
errno.h header file, 31
error codes, 31
errors
handling in init_module(), 30-32
read/write, 80
strace command to debug, 110
/etc/hosts file, 428
/etc/modules.conf file, 307, 319
/etc/networks file, 428
/etc/syslog.conf file, 100
avoiding performance problems, 103
ETH_ALEN macro, 444, 468
eth_header method, 440
ETH_P_IP macro, 457, 468
eth_type_trans(), 469
overriding ARP, 456
ether_setup(), 432, 468
setting up interface information, 436-439
etherdevice.h header file, 468
Ethernet, 429
address resolution, 455-458
ARP and, 455
non-Ethernet headers, 457
ethernet subdirectory, 516
exclusive sleep, 146
exclusive waits, 146
exec.c file, 513
execution modes, 19
execve(), 511
__exit attribute, 35
exit system call, 512
expansion board memory, 238-247
experimental kernels, 11
expires field (timer_list structure), 201
EXPORT_NO_SYMBOLS macro, 29, 51
in Linux 2.0, 48
EXPORT_SYMBOL macro, 30, 50-51
EXPORT_SYMBOL_NOVERS macro, 29, 51
EXPORT_SYMTAB macro, 29, 51
exporting symbols, 29, 317
in Linux 2.0, 48-50
Extended ISA (EISA) buses, 497
external buses, 499-502
directories for, 524
F[ Top ]
f_dentry pointer, 68
backward compatibility issues, 93
f_flags field (file structure), 67
O_NONBLOCK flag, 134, 148
f_mode field (file structure), 67
f_op pointer, 68
f_pos field (file structure), 67, 91
read_proc/get_info() and, 105
F_SETFL command, 134, 161
fcntl system call and, 159
F_SETOWN command, 161
fcntl system call and, 159
facilities, (un)registering in init_module(), 29-32
fast interrupt handlers, 262-264
backward compatibility issues, 288
fasync_helper(), 162, 179
fasync method, 65
asynchronous notification and, 161
backward compatibility issues, 173
fasync_struct structure, 161
faults (see system faults)
faulty_write()
klogd and, 113
ksymoops and, 115
fb_info structure, 522
fbmem.c file, 522
fc_setup(), 437
fcntl system call
F_SETOWN/F_SETFL commands, 159
vs. ioctl method, 134
fcntl.h header file, 148
fdatasync system call, 158
FDDI networks, configuring interfaces, 437
fddi_setup(), 437
fdisk program, 355-362
fiber channel devices, initializing, 437
FIFO (first-in-first-out) devices, 55
poll method and, 156
fifo.c file, 513
file flags, 67
file handling and fs directory , 513
file modes, 67
file_operations structure, 57, 63-66, 68
backward compatibility issues, 91-93
declaring using tagged initialization, 66
mmap method and, 384
file structure, 63, 66
File System header (fs.h), 95
file.c file, 513
filemap.c file, 514
filesystem modules, 8
filesystem nodes, 4
block drivers accessed by, 7
names, device (see devices, names of)
filp pointer, 67
in ioctl method, 129
mounting block drivers, 348
in read/write methods, 78
retrieving inode pointers from, 93
filp->f_op, 68
implementing multiple fops, 70
initializing, 89
filp->private_data
initializing, 89
FIOASYNC command, 134
FIOCLEX command, 134
FIONBIO command, 134
FIONCLEX command, 134
FireWire drivers, 8
firmware, PCI-aware, 474
first-in-first-out (FIFO) devices, 55
poll method and, 156
flags
devfs, 87
file, 67
flash memory, executing kernel from, 510
flush method, 65
backward compatibility issues, 93
close system call and, 73
flushing pending output, 158
font, incorrect on console, 140
fops pointers, 63
as argument to register_chrdev, 56
implementing multiple, 70
fops->open, 70
forcing module load, 24
fork system call, 512
fragmentation, 403
frame buffer video devices directory, 522
free command, 85
free_dma(), 414, 423
free_irq(), 253, 289
when to call, 255
free_kiovec(), 396, 422
free_pages(), 215, 225
free_page(), 215, 225
fs directory, 513
fs.h header file, 95, 177, 322, 366
asynchronous notification and, 161
block driver commands and, 349
blocking/nonblocking operations, 148
file structure and, 66
kdev_t type and, 62
register_chrdev(), 56
fsync_dev method, 328
flushing all partitions, 359
fsync method, 65, 158
backward compatibility issue, 173
functions
accessing memory in Linux 2.0, 173-175
calling from modules/applications, 17
disassembling with gdb, 121
inserting schedule() calls in, 118
G[ Top ]
gcc compiler
-g option, 121
inline assembly code, 184
-O flag, 22
SPARC platforms and, 27
-Wall flag, 23
gdb debugger, 120-122
kgdb patch and, 125
gendisk_head, 358, 369
gendisk_struct structure, 356, 369
adding to global list, 358
removing from global list, 360
General Public License (GPL), 12
generic hard disk support, 356
genhd.c file, 518
genhd.h header file, 356, 369
__GENKSYMS__, 320
genksyms program, 317
geographical addressing, 473
lack of in ISA devices, 494
MCA buses and, 497
NuBus and, 499
Plug and Play, 496
SBus and, 498
geometry, disk, 351
get_cycles(), 183
__get_dma_pages(), 215, 225
get_dma_residue(), 417, 424
get_fast_time(), 185, 206
__get_free_page(), 215, 225
advantage of using, 217
__get_free_pages(), 215, 225
get_free_pages(), 208
allocating memory using, 298
limitations on memory allocation, 403
mmap method and, 392
returning virtual addresses, 217
get_info(), 104-107
get_kernel_syms system call, 24
get_page(), 387
backward compatibility issues, 419
get_stats method, 441, 459
get_unaligned(), 299, 304
__get_user(), 136, 178
get_user(), 136, 178
Linux 2.0 version, 174
get_zeroed_page(), 215, 225
getdents system call, 513
GFP_ATOMIC flag, 209, 224
page-oriented allocation functions, 215
preparing for allocation failure, 215
GFP_BUFFER flag, 209
__GFP_DMA flag, 209, 224
memory zones and, 210
page-oriented allocation functions, 215
__GFP_HIGHMEM flag, 210, 224
memory zones and, 210
page-oriented allocation functions, 215
GFP_HIGHUSER flag, 209
GFP_KERNEL flag, 36, 208, 224
page-oriented allocation functions, 215
GFP_USER flag, 36, 209
GKSMP symbol, 317
global
memory areas, 55
message enabling/disabling, 101
goto statement, 30
GPL (General Public License), 12
gpm mouse server, 45, 119
group, device, 59
H[ Top ]
handle_IRQ_event(), 263
handle_scancode(), 518
hard_header method, 440, 457
backward compatibility issues, 466
building packets with ARP query results, 455
hard_header_parse method, 442
hard_start_transmit method, 445
hard_start_xmit method, 440, 445
backward compatibility issues, 464
HARDRESET command, 132
hardsect_size global array, 324, 367
hardware (see devices)
hardware abstractions (PCI), 493
hardware addresses, 437
assigning, 444
changing, using set_mac_address method, 441
multicasting and, 460-464
used with PCI peripherals, 471-474
hardware headers
adding before transmitting packets, 454
backward compatibility issues, 466
building, 440
encapsulating information, 457
overriding ARP, 456
hardware memory barriers, 228, 249
backward compatibility issues, 248
HAVE_DEVLIST, backward compatibility issues for, 466
HDIO_GETGEO command, 351
hdreg.h header file, 351
head pointers and circular buffers, 280
header_cache method, 442
header_cache_update method, 442
header files, 17
include directory and, 517
managing symbol visibility, 29
removing conditional compilation, 90
headers, Ethernet (see Ethernet)
headers, non-Ethernet, 457
helper programs, running, 311
hex values of oops messages, 114
hiding global symbols, 29
in Linux 2.0, 48
high memory, 372
request queues and, 348
high memory zone, 210
high RAM addresses, reserving, 223
highmem.c file, 515
highmem.h header file, 374
HIPPI drivers, preparing fields for, 437
hippi_setup(), 437
host adapters, plugging into core system, 520
host numbers, 428
hosts.c file, 520
hot-pluggable devices, handling, 489-493
hung system, 118
HZ (time frequency) symbol, 181, 297
I[ Top ]
i_rdev field (inode structure), 61
I2O drivers, 8
IA-64 architecture
PCI DMA interface support, 411
porting and, 233
/proc/interrupts file, snapshot of, 257
IDE device drivers, directory for, 519
if_ether.h header file, 468
ifconfig command
net_device structure and, 435
opening/closing interfaces, 443
#ifdef constructs
avoiding with devfs, 90
avoiding with init calls, 508
IFF_ symbols, 438, 462
IFF_NOARP flag, 432
if.h header file, 438, 458, 467
ifreq structure, 458
IKD (integrated kernel debugger) patch, 124
IMMEDIATE_BH bottom half, 272
writing a BH bottom half, 273
immediate queue, 193, 197, 206
BH mechanism and, 272
writing a BH bottom half, 273
in_interrupt(), 192, 206
vs. intr_count global variable, 205
inb_p(), 232, 249
inb(), 230, 249
include/asm directory (see entries under <asm/>)
include directory, 517
infinite loops, preventing, 118
inflate.c file, 517
__init attribute, 35
init calls and #ifdef constructs, 508
INIT_LIST_HEAD macro, 301
init_module(), 16, 29-32, 50
error handling in, 30-32
EXPORT_NO_SYMBOLS macro and, 29
hiding global symbols, 48
unregistering facilities from, 30
using unique names instead of, 34
init process, 511
INIT_REQUEST(), 330, 368
splitting up multibuffer requests, 339
init scripts and loading/unloading modules, 60
init thread, 507
init_timer(), 201, 207
__initdata attribute, 35
init.h header file, 35, 50
initialization functions and boot-time memory allocation, 221
initializing
kernel data structures, 507
modules, 29-32
explicitly naming functions for, 34
network devices, 432
semaphores, 76
initrd utility, 360
inline assembly code (example), 183
inline functions, 22
for accessing I/O ports, 230
inl(), 231, 249
inode pointer
backward compatibility issues, 91
in ioctl method, 129
retrieving from filp pointer, 93
inode structure
accessing device numbers, 61, 69, 95
mounting block drivers, 348
inode->i_rdev, 61, 69, 95
inode.c file, 513
input buffers, driver, 148
input files, enabling asynchronous notification from, 159
input management, directory for, 523
input module, 28
input pins, 226, 235
reading values from parallel port, 238
input_register_device(), 523
input_register_handler(), 523
input.c file, 523
input.h header file, 504
insb(), 232, 249
insl(), 232, 249
insmod program, 6, 24
assigning parameter values, 42
backward compatibility issues, 319
dynamically allocating major numbers, 60
-f switch, 24
modprobe program vs., 28
module loading and security, 309
testing modules using, 16
version control in modules, 314
vmalloc() and, 218
installing interrupt handlers, 253-264
insw(), 232, 249
int data type, 294
integrated kernel debugger (IKD) patch, 124
inter_module_get_request(), 313, 319
inter_module_get(), 312, 319
inter_module_put(), 313, 319
inter_module_register(), 312, 319
inter_module_unregister(), 312, 319
interactive kernel debugger (kdb), 122-124
interface buses, 496-502
interface flags for net_device structure, 438
interface-specific data types, 296
intermodule communication, 311-314
Internet sites about Linux kernels, xv
interrupt handlers, 251-292
using arguments with, 267
autodetecting IRQ numbers, 258-262, 276
backward compatibility issues, 288
BH mechanism, 271
bottom halves of handlers, 269-274
enabling/disabling interrupts, 252, 267
fast vs.slow, 262-264
backward compatibility issues, 288
implementing, 264-268
installing, 253-264
at device open, 255
shared handlers, 275
for network drivers, 450
preparing parallel ports for, 253
/proc files for, 256
race conditions, 278-288
circular buffers for, 279
lock variables for, 284-286
spinlocks for, 281-283
running shared handlers, 276
sharing interrupts, 274-278
tasklets, 270
on x86 architecture, 263
interrupt mode and asynchronous execution, 191
interrupt numbers, 254
used as arguments, 267
probing using kernel facility, 259
interrupt request lines (see IRQs)
Interrupt Service Routine (ISR), 181
interrupt-driven operation, 278
block drivers, 362-364
interrupt.h header file, 199, 206, 259, 272, 290
interruptible_sleep_on_timeout(), 142, 178
delaying code execution, 187
interruptible_sleep_on(), 142, 178
avoiding race conditions, 286
implementation of, 144
vs. wait_event macro, 145
interruptions, code, 77
interrupts
PCI, 488
timer, 181
interrupts file, 256, 289
shared interrupts and, 277
intervals of time, 181-184, 297
intptr_t type (C99 standard), 294
intr_count global variable, 205
inw(), 230, 249
_IO() macro, 131, 177
I/O, 158
accessing, PCI and, 483-488
asynchronous notification, 159-162
blocking, 141-153
blocking/nonblocking, 148
buffers for, 148
flushing pending, 158
interrupt-driven, 278
ISA devices and, 494
pausing, 232
remapping specific regions of, 389
space for, in PCI buses, 473
string operations, 231
transferring data with DMA, 401-418
(see also reading; writing)
I/O memory, 39-41, 226, 238-247
directly mapped, 240
page tables and, 239
software-mapped, 242
I/O ports, 36-41, 226, 229-234
allocating, 39
digital, 235-238
inline functions for accessing, 230
parallel (see parallel ports)
I/O registers vs. RAM, 227-229
I/O registry, accessing, 38
io_request_lock, 338, 368
backward compatibility issues, 366
multiqueue block drivers and, 343
performing clustered I/O, 341
I/O request queues (see request queues)
iobuf.h header file, 396, 422
_IOC() macro, 177
_IOC_TYPEBITS macro, 131, 177
_IOC_NR() macro, 131, 177
_IOC_READ macro, 131, 177
_IOC_NONE macro, 131, 177
_IOC_DIRBITS macro, 177
_IOC_TYPE() macro, 131, 177
_IOC_NRBITS macro, 131, 177
_IOC_SIZEBITS macro, 131, 177
_IOC_WRITE macro, 131, 177
_IOC_SIZE() macro, 131, 177
_IOC_DIR() macro, 131, 177
ioctl method, 64, 129-141
accessing specific information for partitions, 361
using bitfields to define commands, 130
block devices and, 349-352
changing read_ahead values, 326
command numbers, choosing, 130-133
controlling devices without, 140
controlling I/O channel, 128
customizing for networking, 458
debugging with, 108
extra argument of, 134-139
implementing ioctl commands, 138
network devices and, 441
predefined commands of, 133
using scalar values to define commands, 133
TIOCLINUX command, 99
type checking disabled, 129
ioctl.c file, 513
ioctl.h header file, 130, 177
setting up command numbers, 131
ioctl-number.txt file, 130
io.h header file (asm), 249, 422
accessing I/O ports, 230
converting between bus/virtual addresses, 404
io.h header file (linux), 250
iomem file, 39, 53
iomem_resource structure, 41
ioperm(), 231
iopl(), 231
ioport_resource structure, 41
ioport.h header file, 38, 52, 229, 250
resource ranges and, 40
ioports file, 37, 53
_IOR() macro, 131, 177
_IOW() macro, 131, 177
_IOWR() macro, 131, 177
ioremap_nocache(), 242, 250
ioremap(), 217-219, 225, 250
accessing I/O memory, 239
backward compatibility issues, 248
ISA memory range, 243
software-mapped I/O memory and, 242
IORESOURCE_IO flag, 484
IORESOURCE_MEM flag, 484
IORESOURCE_PREFETCH flag, 484
IORESOURCE_READONLY flag, 484
iounmap(), 217, 225, 250
backward compatibility issues, 248
software-mapped I/O memory and, 242
iovec structures, 84
IP numbers
assigning, 427-429
resolving to physical addresses, 455-458
ip_summed field (sk_buff), 449, 453
ipc directory, 517
ipv4/ipv6 subdirectories, 516
irq argument (interrupt number), 254, 267
IRQ_WAITING status bit, setting, 264
irq.h header file, 262, 267
IRQs (interrupt request lines), 253
autodetecting (probing) numbers for, 258-262
shared interrupts and, 276
level-triggered vs. edge-triggered, 274, 495
PCI devices and, 488
statistics on, 257
ISA bus master DMA, 413
ISA devices, 494-496
DMA for, 413-418
EISA (Extended ISA) buses, 497
identifying I/O regions, 36
interrupt sharing and, 274, 495
pausing I/O, 232
Plug-and-Play specification, 496
probing, 38
programming techniques, 495
VLB (VESA Local Bus) devices, 498
ISA memory
accessing, 244
below 1 MB, 243-245
DMA for, 413-418
nopage method and, 389
probing for, 245-247
isa_readb and related functions, 245
ISDN drivers and lookaside caches, 211-214
ISR (Interrupt Service Routine), 181
J[ Top ]
jiffies value
in busy waiting implementation, 186
kernel timers and, 201
no solution for short delays, 188
retrieving current time, 184
at timer interrupt, 182
trans_start field and, 442
variable syntax, 205
jiq (Just In Queue) module, 193
timer usage example, 202
jiq_print_tq(), 193
jit (Just In Time) module
current time, retrieving, 185
delaying code execution, 186
jitbusy program, 186
Just In Queue (jiq) module, 193
timer usage example, 202
Just In Time (jit) module
current time, retrieving, 185
delaying code execution, 186
K[ Top ]
kbd_mode -a command, 119
kcore file, 120
kdataalign program, 300
kdatasize module, 294
kdb kernel debugger, 122-124
kdev_t_no_nr(), 62
kdev_t type, 62
extracting physical device number, 329
kdev_t.h header file, 62
keep directive (modprobe), 308
KERN_ALERT macro, 98
KERN_CRIT macro, 98
KERN_DEBUG macro, 98
KERN_EMERG macro, 98
KERN_ERR macro, 98
KERN_INFO macro, 98
KERN_NOTICE macro, 98
KERN_WARNING macro, 98
kernel directory, 512
kernel headers, 17
kernel I/O buffers, 396-400
kernel I/O vectors, 396
kernel lockups, detecting, 124
kernel logical addresses (see logical addresses)
kernel sources, 527
kernel space, 19
transferring to/from user space, 78-84
kernel stack debugger (IKD feature), 124
__KERNEL__ symbol, 22, 50
explicitly sizing data, 295
kernel header files and, 17
__KERNEL_SYSCALLS__, 511
kernel timers, 200-203
KERNEL_VERSION macro, 25, 47
kernel_version variable, 52
kernel virtual addresses (see virtual addresses)
kerneld program, backward compatibility issues for, 318
kerneld.h header file, backward compatibility issues for, 319
KERNELDIR variable and version dependency, 25
kernel.h header file, 98, 228, 249
kernels
allocating memory at boot time, 221-223
books about Linux, 527
booting, 507-509
with initrd, 360
capabilities and restricted operations, 137
concurrency in, 20
connecting network drivers to, 430-434
current process and, 21
developmental (experimental), 11
filesystem modules, 8
flash memory, executing from, 510
handling system faults (see system faults)
IKD (integrated kernel debugger) patch, 124
initial boot sequence, 507
introduction to, 1-14
kgdb patch and, 125
kiobufs, 396-400
kmod facility and, 305
linked lists, 300-302
loading modules into (see loading modules)
messages (see messages)
module version control, 314-318
multicasting support, 461
probing interrupt numbers with, 259
race conditions and, 76-78
request queues, finding, 343
running task queues, 191
security (see security)
splitting role of, 4-6
symbol table, 27-29
klogd and, 114
system hangs, 118
time intervals in, 181-184
tracing programs, 108-110
using conventional data types, 295
version numbering, 10
web sites about, xv
keventd process, 192, 195
backward compatibility issues, 204
call_usermodehelper and, 311
keyboard, debugging when locked, 118
keyboard.c file, 518
kfree_skb(), 454, 468
kfree(), 36, 52, 224
defined in slab.c file, 514
scull driver example and, 73
kgcc package, 22
kgdb patch, 125
khttpd subdirectory, 516
kill_fasync(), 162, 179
kiobuf_init(), 396, 422
kiobufs, 396-400
kiovecs, 396
klogd daemon
-c flag, 98
debugging modules with, 113
decoding oops messages, 113
-f option, 101
logging messages, 100
obtaining clean oops messages, 115
-p option, 114
kmalloc.c file, 211, 514
kmalloc(), 36, 52, 208-211, 224
defined in slab.c file, 514
flags argument, 208-210
limitations on memory allocation, 403
performance degradation issues, 216
returning virtual addresses, 217-219
scull driver example and, 73
size argument, 211
vs. vmalloc(), 217-219
kmap(), 374, 421
backward compatibility issues, 420
kmem_cache_alloc, 213, 225
kmem_cache_create, 212, 224
kmem_cache_destroy, 213, 224
kmem_cache_free, 213, 225
kmem_cache_t, 212, 224
kmod facility, 305
loading modules, 310
user-mode helper programs and, 311
kmod.c file, 512
kmod.h header file, 306, 319
backward compatibility issues, 319
kmsg file, 100
kswapd thread, 515
ksymoops utility, 114-118
obtaining clean oops messages, 115
ksyms command, 27
ksyms file, 27, 30, 53
ksymoops and, 115
kunmap(), 374, 421
backward compatibility issues, 420
L[ Top ]
layered modularization, 28
LCRASH utility, 126
ld scripts and boot code layout, 510
ld -r command, 23
__le32_to_cpu macro, 298, 304
least significant bit and partitionable devices, 355
LEDs, soldering to output pins, 237
levels
debugging, 102
message priority (see loglevels)
levels (modalities), CPU, 19
level-triggered vs. edge-triggered interrupt lines, 274, 495
lib directory, 517
libraries, 17
license, Linux, 12
line disciplines, implementing, 521
link state, changes in, 451
linked lists, 300-302
Linux
license terms, 12
version numbering, 10
linux directory, 17
Linux Documentation Project web site, xv
Linux Kernel Crash Dumps (LKCD), 126
Linux Trace Toolkit (LTT), 127
LINUX_VERSION_CODE macro, 25, 52
<linux/autoconf.h> header file, 316
<linux/blk.h> header file (see blk.h header file)
<linux/blkdev.h> header file, 323, 366
<linux/blkpg.h> header file, 351
<linux/bootmem.h> header file, 221, 225
<linux/capability.h> header file, 137, 178
<linux/config.h> header file, 316, 320, 477, 503
<linux/delay.h> header file, 188, 206
<linux/devfs_fs_kernel.h> header file, 87, 96
<linux/errno.h> header file, 31
<linux/etherdevice.h> header file, 468
<linux/fcntl.h> header file, 148
<linux/fs.h> header file, 95, 177, 322, 366
asynchronous notification and, 161
block driver commands and, 349
blocking/nonblocking operations, 148
file structure and, 66
kdev_t type and, 62
register_chrdev(), 56
<linux/genhd.h> header file, 356, 369
<linux/hdreg.h> header file, 351
<linux/highmem.h> header file, 374
<linux/if_ether.h> header file, 468
<linux/if.h> header file, 438, 458, 467
<linux/init.h> header file, 35, 50
<linux/input.h> header file, 504
<linux/interrupt.h> header file, 199, 206, 259, 272, 290
<linux/io.h> header file, 250
<linux/iobuf.h.h> header file, 396, 422
<linux/ioctl.h> header file, 177
setting up command numbers, 131
<linux/ioport.h> header file, 38, 52, 229, 250
resource ranges and, 40
<linux/kdev_t.h> header file, 62
linux-kernel mailing list, 13
<linux/kernel.h> header file, 98, 228, 249
<linux/kerneld.h> header file
backward compatibility issues, 319
<linux/kmod.h> header file, 306, 319
backward compatibility issues, 319
<linux/list.h> header file, 144, 300-302, 304
<linux/malloc.h> header file, 224
<linux/mm.h> header file, 209, 224, 380, 421
<linux/module.h> header file, 24, 51, 66
version.h header file and, 25
<linux/modversions.h> header, 315, 320
<linux/netdevice.h> header file, 431, 467
<linux/param.h> header file, 181, 205
<linux/pci.h> header file, 405, 422, 477, 503
accessing configuration space, 480
detecting size of PCI regions, 486
pci_ops structure and, 493
<linux/poll.h> header file, 154, 179
<linux/proc_fs.h> header file, 104
<linux/scatterlist.h> header file, 410
<linux/sched.h> header file, 52, 178, 205, 289, 291
interrupt request line functions, 253
jiffies value and, 182
kernel directory and, 512
wait queue code information, 147
<linux/skbuff.h> header file, 445, 452, 468
<linux/sockios.h> header file, 458, 469
<linux/spinlock.h> header file, 166, 180, 281, 290
<linux/symtab_begin.h> header file, 51
<linux/symtab_end.h> header file, 51
<linux/time.h> header file, 206
<linux/timer.h> header file, 201, 207
<linux/tqueue.h> header file, 190, 192, 206
<linux/types.h> header file, 295, 303
<linux/uio.h> header file, 84
<linux/usb.h> header file, 504
<linux/version.h> header file, 25, 52
<linux/vmalloc.h> header file, 217, 225
<linux/wait.h> header file, 144, 178
list_add(), 301, 304
list_add_tail(), 301, 304
list_del(), 301, 304
list_empty(), 301, 304
testing request queues with, 344
list_entry(), 301, 304
list_head data structure, 300-302
list_splice(), 301, 304
list.h header file, 144, 300-302, 304
lists, linked, 300-302
__LITTLE_ENDIAN symbol, 298, 304
little-endian byte order, 298, 475, 480
LKCD (Linux Kernel Crash Dumps), 126
ll_rw_blk.c file, 518
llseek method, 64, 92, 163
in Linux version 2.0, 176
loading block drivers, 321-354
loading modules, 24
on demand, 305-311
slave/master modules example, 309
dynamically assigned device numbers, 59
for network drivers, 430
version dependency and, 24
LocalTalk devices, setting up fields for, 437
lock_kiovec(), 396, 422
lock method, 65
lock variables, 284-286
locked keyboard, debugging, 118
lockup detector (IKD), 124
loff_t (long offset), 64, 67, 91
LOG_BUF_LEN circular buffer, 100
logging messages, 100
logical addresses, 372
loglevels (message priorities), 15, 97-99
long data type, 294
long delays, 186-188
lookaside caches, 211-214
backward compatibility issues, 223
loopback interface, 426
IFF_LOOPBACK flag, 438
loop.c file, 519
loops
busy, 186
endless, 118
software, 188
loops_per_second value, 188
low memory, 372
lp.c file, 518
ls command, identifying device type, 55
lseek method, 64
in Linux version 2.0, 176
syntax in Linux 2.0, 92
ltalk_setup(), 437
LTT (Linux Trace Toolkit), 127
LVM (logical volume manager) drivers
drivers/md directory, 519
"make request" function and, 346
M[ Top ]
M68k architecture
layout of boot code, 510
no support for PCI bus, 411
porting and, 233
MAC (Medium Access Control) addresses, 437
resolving, 455-458
set_mac_address method and, 441
machine-specific registers, 183
magic SysRq key, 119
mailing list, linux-kernel, 13
major device numbers, 56-61
dynamic allocation of, 57-61
MAJOR macro, 62, 95
major_name value (gendisk_struct), 356
MAJOR_NR symbol, 328, 367
"make request" function, 346-348
__make_request(), 346
make utility
building a makefile, 23
KERNELDIR variable and, 25
makefiles, 22
adding version control with, 315
exporting versioned symbols, 317
install rules for, 26
SPARC architecture and, 27
malloc.h header file, 224
mangling symbol names, 314-317
map_user_kiobuf(), 399, 422
maplist array (kiobuf), 396, 400
mapper program, 391
mapping memory (see memory management)
mapping registers, 405
architectures not supporting, 411
scatterlists and, 409
mark_bh(), 272, 290
marking bottom halves, 272
max_readahead global array, 325, 367
backward compatibility issues, 365
max_sectors global array, 326, 367
max_segments global array, 326
mb(), 228, 249
MCA (Micro Channel Architecture) buses, 497
mdelay(), 188, 206
mechanism, driver
defining, 54
policy versus, 2
media, directory for, 523
Medium Access Control addresses (see MAC addresses)
mem.c file, 518
memcpy_fromfs(), 94, 96
memcpy_fromio(), 241, 250
memcpy_tofs(), 94, 96
memcpy_toio(), 241, 250
memory
accessing
from expansion boards, 238-247
in Linux 2.0, 173-175
in PCI buses, 473, 483-488
allocating, 73-75
at boot time, 221-223
with kmalloc, 208-211
by page, 214-217
performance degradation issues, 216
with vmalloc, 217-220
circular buffers, 279
free, information on, 85
global areas, 55
high, 372
how much to allocate, 211
ISA memory range, 243-245
limitations on, 372
lookaside caches, 211-214
low, 372
managing allocation, 36
page size and portability, 297
persistence, 55
verifying user-space addresses, 135
vs. I/O registers, 227-229
memory barriers, 228
backward compatibility issues, 248
performance issues, 229
memory management, 4
accessing pages not in memory, 387-389
backward compatibility issues, 418-420
DMA (direct memory access), 401-418
fragmentation, 403
handling map region changes, 387-389
kernel source file directory, 514
memory mapping/remapping, 373-375
accessing pages not in memory, 387-389
handling region changes, 387-389
kiobufs, 396-400
mmap method, 382-395
PCI regions, 485
RAM, 390-394
specific I/O regions, 389
virtual addresses, 394
mmap method, 382-395
PCI and, 483-488
theory of, 370-382
VMAs (virtual memory areas), 378-382
memory map arrays, 374
memory maps, components of, 379
memory zones, 210
memory.c file, 515
memory-is-prefetchable bit, 483
memory-mapped registers (see I/O memory)
memset_io(), 241, 250
messages
globally enabling/disabling, 101
logging, 100
oops messages, 111-118
priorities (loglevels) of, 15, 97-99
mice, 119
asynchronous notification, 161
Micro Channel Architecture (MCA) buses, 497
minor device numbers, 56, 61, 69
MINOR macro, 62, 95
minor_shift value (gendisk_struct), 356
MIPS processor
directly mapped memory, 240
inline assembly code and, 183
layout of boot code, 510
PCI DMA interface support, 411
porting and, 233
MIPS64 architecture, support for PCI DMA interface, 411
misc directory, 525
installing drivers in, 26
misc-modules/export.c file, 49
MKDEV macro, 62, 95
mknod command, 57
mlock system call, 46
mlock.c file, 514
mm directory, 514
mmap_avl.c file, 515
mmap method, 65, 382-395
using remap_page_range, 384-386
remapping virtual addresses with, 394
scullp driver and, 391-394
usage count and, 386
vm_area_struct structure and, 380
mmap.c file, 514
mm.h header file, 209, 224, 380, 421
mm/kmalloc.c file, 211, 514
mm/slab.c file, 211, 514
MOD_DEC_USE_COUNT macro, 33, 51
MOD_IN_USE macro, 33, 51
MOD_INC_USE_COUNT macro, 33, 51
mod_timer(), 202, 207
avoiding race conditions, 203
modalities (levels), CPU, 19
modes
device modes, 59
file modes, 67
modprobe program, 319
assigning parameter values, 42
directives, 308
insmod program vs., 28
loading modules, 307
request_module() and, 306
security issues for module names, 309
version control in modules, 314
modularization
kmod facility, 305
layered, 28
network drivers, 434
MODULE_AUTHOR macro, 44, 51
MODULE_DESCRIPTION macro, 44, 51
module_exit(), 35, 50
module_init(), 35, 50
__module_kernel_version symbol, 24
module parameters, 43
backward compatibility issues, 50
MODULE_PARM_DESC macro, 43, 51
MODULE_PARM macro, 42, 51
backward compatibility issues, 50
MODULE_SUPPORTED_DEVICE macro, 44, 51
MODULE symbol, 22
module.c file, 512
module.h header file, 24, 51, 66
version.h header file and, 25
modules, 6
applications vs., 16-21
classes of, 6-8
communicating between, 311-314
current process and, 21
debugging, 113-118
exporting symbols, 29, 317
in Linux 2.0, 48-50
filesystem, 8
header files of, 17
initializing, 29-32
explicitly naming functions for, 34
interrupts (see interrupt handlers)
license terms, 12
loading/unloading, 16, 61, 305-311
with dynamically assigned device numbers, 59
insmod program and, 24
for network drivers, 430, 434
slave/master modules example, 309
usage count and, 33, 313
using init scripts, 60
version dependency and, 24
(see also cleanup_module())
partition detection in, 357-360
platform dependency, 27
probing for hardware (see probing)
requesting the loading of, 306
security (see security)
stacking, 28
usage count, 33, 313
backward compatibility issues, 93
version control, 314-318
version dependency, 24-26
modules file, 34, 51
ksymoops and, 114
modutils package
exporting symbols, 29
misc directory and, 26
MODVERSIONS, 320
modversions.h header file, 315, 320
monitoring, preprocessor for, 101-103
most significant bit, 253
partitionable devices and, 355
mounting block drivers, 348
mremap system call, 387
remapping specific I/O regions, 390
msr.h header file, 183, 205
MTU, network devices and, 441
multicasting, 460-464
IFF_MULTICAST flag and, 439
multiprocessor systems
backward compatibility issues, 48
multiqueue block drivers, 342-345
mutex semaphores, 76
mutual exclusion mode (semaphores), 76
N[ Top ]
n_tty.c file, 518
namei.c file, 513
names, device (see devices, names of)
namespace pollution, 18
native DMA, 413-418
natural alignment of data items, 300
nbd.c file, 519
nbtest program, 153
net_device_stats structure, 433
backward compatibility issues, 465
fields in, 459
net_device structure, 430, 435-443
device methods of, 440-442
ether_setup and, 432, 436-439
hidden fields, 436-443
interface flags for, 438
interface information, 436-439
unusual devices, assigning fields for, 437
utility fields for, 442
visible fields, 435
net directory, 516
net_init.c file, 436
netdevice.h header file, 431, 467
netif_carrier_off(), 451, 467
backward compatibility issues, 465
netif_carrier_ok(), 452, 467
netif_carrier_on(), 451, 467
backward compatibility issues, 465
netif_rx(), 467
packet reception and, 450
netif_start_queue(), 444, 467
backward compatibility issues, 464
netif_stop_queue(), 444, 467
backward compatibility issues, 464
controlling transmission concurrency, 446
netif_wake_queue(), 467
backward compatibility issues, 464
restarting packet transmission, 446
netsyms.c file, 516
network drivers, 7, 425-469
connecting to kernel, 430-434
initializing devices, 432, 521
interrupt handlers for, 450
link state, changes in, 451
loading/unloading modules for, 430, 434
methods of, 440-442
modularized vs. non-modularized, 434
opening/closing network interface, 443-445
socket buffers (see socket buffers)
statistics on, 459
networking, 6
backward compatibility issues, 464-466
__NO_VERSION__ symbol, 26, 52
nonblocking operations, 148
poll method, 154-159
select method, 154-159
testing, 153
non-modularized network drivers, 434
nonpreemption and concurrency, 20
nopage method, 382
backward compatibility issues, 419
mapping memory with, 387-389
mapping RAM to user space, 391-394
mremap system call with, 387
preventing extension of mapping, 390
remapping virtual addresses with, 394
normal memory zone, 210
NR_IRQS symbol, 262
NuBus, 499
NULL pointers, invalid dereferencing, 111-113
NUM macro, splitting minor numbers, 69
numbering versions (see version numbering)
O[ Top ]
O_NDELAY flag (f_flags field), 148
O_NONBLOCK flag (f_flags field), 67, 134, 148
read/write methods and, 157
O_RDONLY flag (f_flags field), 67
O_SYNC flag (f_flags field), 67
objdump utility, 118
disassembling module functions, 122
octets vs. bytes, 426
oops messages, 61, 111-118
decoding, 113-118
resolving hex values of, 114
open method, 65, 68-72
accessing data within partitions, 360
adding VMA operations, 386
blocking, 168
checking for disk changes, 354
cloning devices in response to, 169-171
initializing file pointers, 89
mounting block drivers, 348
for network devices, 440, 443
private_data and, 68
requesting DMA channels, 414
restricting simultaneous users and, 167
for single-open devices, 165
vm_operations_struct structure, 381
open.c file, 513
opening network interface, 443-445
optimizations, compiler, 227
options directive (modprobe), 308
outb_p(), 232
outb(), 230, 249
outl(), 231, 249
output buffers, driver, 148
output pins, 226, 235
soldering LEDs to, 237
outsb(), 232, 249
outsl(), 232, 249
outsw(), 232, 249
outw(), 230, 249
overriding ARP, 456
P[ Top ]
__pa(), 372, 421
backward compatibility issues, 420
packages, upgrading, 10
PACKET_BROADCAST flag, 453
PACKET_HOST flag, 453
PACKET_MULTICAST flag, 453
PACKET_OTHERHOST flag, 453
packets
multicasting, 460-464
transmission/reception of, 429, 445-450
page_address(), 374, 421
page_alloc.c file, 514
Page Directory (PGD) page table, 375
page faults caused by invalid pointers, 111
Page Mid-level Directory (PMD) page table, 375
PAGE_SHIFT symbol, 297, 303
page size and portability, 297
PAGE_SIZE symbol, 297, 303
mmap method and, 383
page_table_lock, 378
backward compatibility issues, 419
remapping virtual addresses, 395
page tables, 375-378
building
using nopage, 387-389
using remap_page_range, 384
I/O memory and, 239
remapping virtual addresses, 394
page.h header file, 297, 303, 372, 376
page-oriented allocation functions, 214-217
panic.c file, 512
Parallel Line Internet Protocol (PLIP)
using Ethernet headers, 456
interrupt handling differences, 450
overriding ARP, 457
parallel port driver modules, stacking, 28
parallel ports, 235-238
disabling interrupts, 268
preparing for interrupt handling, 253
running shared interrupt handlers, 276
stacking driver modules, 28
parameters
assigning values, 42
device, 43
module, 43
backward compatibility issues, 50
param.h header file, 181, 205
parport device driver, 518
parse_options(), 507
partial data transfers
read method, 80
write method, 82
partitionable devices, 355-362
accessing data within partitions, 360
detecting partitions
with initrd, 360
in modules, 357-360
generic hard disk support for, 356
path directive (modprobe), 308
pausing I/O, 232
PC parallel interface, 235-238
PC/104 and PC/104+ bus architectures, 496
pci_alloc_consistent(), 407, 422
PCI_BASE_ADDRESS_ symbols, 483-486
pci_bus structure, 494, 503
pci_dev_driver(), 491
pci_dev structure, 404, 477, 503
backward compatibility issues, 502
reading configuration variables, 481
pci_device_id structure, 491, 503
ID fields for, 492
PCI_DMA_BIDIRECTIONAL symbol, 408, 422
PCI_DMA_FROMDEVICE symbol, 407, 422
bounce buffers and, 409
PCI_DMA_NONE symbol, 408, 422
pci_dma_supported(), 405, 422
pci_dma_sync_sg(), 410, 423
PCI_DMA_TODEVICE symbol, 407, 422
bounce buffers and, 409
pci_driver structure, 491-493, 503
backward compatibility issues, 503
handling hot-pluggable devices, 490
pci_enable_device(), 478
pci_find_class(), 478, 504
pci_find_device(), 478, 504
pci_find_slot(), 478
pci_free_consistent(), 407, 422
pci_insert_device(), 491
PCI_INTERRUPT_ symbols, 488
pci_map_sg(), 410, 423
pci_map_single(), 408, 423
pci_module_init(), 490, 504
pci_ops structure, 493
PCI (Peripheral Component Interconnect)
addressing, 471-474
base address registers, 485-488
configuration registers, 475-479
configuration space, 473, 480-483
device configuration snapshot, 481
DMA and, 404-412
dealing with difficult hardware, 405
DMA mappings (see DMA mappings)
hardware dependencies for, 411
simple example of, 411
drivers, alternative to, 476
drivers/pci directory, 523
geographical addressing, 473
hardware abstractions, 493
hot-pluggable devices, 489-493
interface of, 470-494
interrupts, 488
I/O resources, 484
using ioremap(), 218
remap_page_range and, 389
pci_present(), 477, 503
pci_read_config_ functions, 480, 504
pci_register_driver(), 490, 504
pci_remove_device(), 491
pci_resource_end(), 484
pci_resource_flags(), 484
pci_resource_start(), 484
pci_set_dma_mask(), 405
pci_sync_single(), 409, 423
pci_unmap_sg(), 410, 423
pci_unmap_single(), 408, 423
pci_unregister_driver(), 491, 504
pci_write_config_ functions, 481, 504
pcibios.h header file, 502
pcidata module, 482
pcidump program, 482
pci.h header file, 405, 422, 477, 503
accessing configuration space, 480
detecting size of PCI regions, 486
pci_ops structure and, 493
pciregions module, 486
PDEBUG/PDEBUGG symbols, 102
pending output, flushing, 158
performance
allocating socket buffers, 449
avoiding device collisions, 36
clustering requests and, 340
debugger use, 120
degrading by allocating too much memory, 216
managing system resources, 35-41
memory barriers and, 229
mmap method, 384
namespace pollution, 18
output buffers and, 148
PCI vs. ISA, 470
printk to debug, 103
raw I/O limitations to, 397
using request queues (see request queues)
string operations and, 231
peripheral bus architecture (see bus architecture)
Peripheral Component Interconnect (see PCI)
peripheral memory, 238-247
perror() vs. strace command, 110
persistence of memory, 55
PG_locked flag, 374
PG_reserved flag, 374
pgd_offset(), 377
PGD (Page Directory) page table, 375
pgd_val(), 377
pgtable.h header file, 218, 377
physical addresses, 372
mapping virtual addresses to, 375
pins 9/10 of parallel connector, 253
generating interrupts, 265
platform dependency, 11
bit operations and, 284
kmalloc flags and, 209
for modules, 27
porting and, 232-234
/proc/stat file, 257
platform-specific directories, 524
PLIP (Parallel Line Internet Protocol)
using Ethernet headers, 456
interrupt handling differences, 450
overriding ARP, 457
Plug-and-Play (PnP) specification, 496
pm.c file, 512
pmd_offset(), 377
PMD (Page Mid-level Directory) page table, 375
pmd_val(), 377
PnP (Plug-and-Play) specification, 496
pointers and invalid dereferencing, 111-118
Point-to-Point Protocol (PPP) and interrupt handling differences, 450
policy, driver, 2-4
controlling devices by printing and, 140
poll method, 64, 154-159
data structures of, 159
poll_table_entry structure, 158
poll_table structure, 154, 158
poll_wait(), 154, 179
POLLERR flag, 155
poll.h header file, 154, 179
POLLHUP flag, 155
POLLIN flag, 155
POLLOUT flag, 155
POLLPRI flag, 155
POLLRDBAND flag, 155
POLLRDNORM flag, 155
POLLWRBAND flag, 155
POLLWRNORM flag, 155
portability, 297-302
data types and, 293-297
devfs (device filesystem), 90
porting and, 232-234
ports, 36-41, 229-234
accessing different sizes, 230
allocating, 39
avoiding collisions, 37
parallel (see parallel ports)
platform dependency and, 232-234
post-install directive (modprobe), 308
post-remove directive (modprobe), 308
PowerPC architecture
page tables not used in, 377
PCI DMA interface support, 411
porting and, 233
PPP (Point-to-Point Protocol) and interrupt handling differences, 450
pread method, 79, 91
llseek method and, 164
precision, temporal, 185
predefined
ioctl method commands, 133
task queues, 192-198
preemption and concurrency, 20
prefetchable bit, 483
prefixes, 18, 44
pre-install directive (modprobe), 308
preprocessor, using to monitor driver, 101-103
pre-remove directive (modprobe), 308
printing
controlling devices by, 140
to debug code, 97-103
from gdb debugger, 121
interface-specific data, 296
partition information, 359
_t data items, 296
printk.c file, 512
printk(), 15, 52
circular buffers for, 100
current pointer and, 21
debugging with, 97-100, 103
logging messages from, 100
loglevel strings for, 98
turning debug messages on/off, 101
priority
asynchronous notification and, 159-162
immediate queue, 193, 197
memory allocation, 36, 208
message (see loglevels)
private_data field (file structure), 68, 147
privileged operations, 137
probe_irq_off(), 259, 289
probe_irq_on(), 259, 289
probe method, 491
Probes, Dynamic, 127
probing, 36-41
backward compatibility issues, 466
for IRQ numbers, 258-262
shared interrupts and, 276
for ISA memory, 245-247
for network devices, 432
proc_dir_entry
create_proc_read_entry() and, 106
proc_register_dynamic() and, 107
/proc filesystem
creating
/proc entries, 106
read-only /proc files, 104
debugging with, 103-107
installing an interrupt handler, 256
removing /proc entries, 107
shared interrupts and, 277
vs. ioctl method, 108
/proc/bus/pci file
backward compatibility issues, 503
browsing configuration space, 481
visibility of hardware addresses, 471
/proc/bus/pci/devices file, 474
/proc/devices file, 58
processes
access to multiple, 167
avoiding race conditions with spinlocks, 166, 281-283
kernel timers for, 200-203
opening devices for each process, 165
requeuing, 192
sleeping, 141-148
race conditions and, 286-288
task queues for, 189-200
wait queues and, 141-147
waking up (see waking up processes)
processor.h header file, 497
processor-specific registers, 182-184
proc_fs.h header file, 104
/proc/interrupts file, 256, 289
shared interrupts and, 277
/proc/iomem file, 39, 53
/proc/ioports file, 37, 53
/proc/kcore file, 120
/proc/kmsg file, 100
/proc/ksyms file, 27, 53
ksymoops and, 115
module version support and, 315
searching for registration functions, 30
/proc/modules file, 34, 51
ksymoops and, 114
/proc/pci file
backward compatibility issues, 503
browsing configuration space, 482
visibility of hardware addresses, 471
/proc/pcidata file, 482
/proc/pciregions file
browsing configuration space, 486
proc_register(), 107
proc_register_dynamic(), 107
/proc/slabinfo file, 213
/proc/stat file, 257, 289
/proc/sys/kernel/printk file, reading console loglevel with, 99
producer/consumer algorithm, 279
programmable decoders, 485
programming drivers (see writing, drivers)
programs, obtaining, 12
protect method, 381
proto_ops structure, 516
pte_offset(), 377
pte_page(), 378
pte_present(), 378
pte_val(), 377
PTRS_PER_PGD macro, 377
PTRS_PER_PMD macro, 377
PTRS_PER_PTE macro, 377
put_unaligned(), 299, 304
__put_user(), 136, 178
put_user(), 136, 178
Linux 2.0 version, 174
pwrite method, 79, 91
llseek method and, 164
Q[ Top ]
quantum (memory area), 73
race conditions and, 76
reading/writing one at a time, 85
querying to debug, 103-108
queue heads, active, 342
queue_task_irq_off(), 204
queue_task_irq(), 204
queue_task(), 191, 206
rescheduling tasks, 192
running custom task queues, 198
scheduler queue and, 195
timer queue and, 196
vs. queue_task_irq, 204
queues
initializing/cleaning up, 323
request (see request queues)
scheduler queue, 192, 194-196
task (see task queues)
timer (see entries under tq_; timer queue)
wait (see wait queues)
R[ Top ]
race conditions, 20
avoiding, with wait_event macros, 142, 179
interrupt handling and, 278-288
introduction to, 76-78
kernel timers and, 203
single-processor vs. SMP systems, 166
RAID drivers
drivers/md directory, 519
"make request" function and, 346
RAM
probing ISA memory for, 246
remapping, 390-394
reserving high RAM addresses, 223
vs. I/O registers, 227-229
random numbers, 255
ranges, resource, 40
raw I/O and user-space buffers, 397-400
rd.c file, 519
rdtsc/rdtscl functions, 183, 205
read_ahead global array, 325, 367
read_lock_bh(), 283, 291
read_lock_irqsave(), 283, 291
read_lock_irq(), 283, 291
read_lock(), 283, 291
read method, 64, 78-81
arguments to, 79
code for, 81
configuring DMA controller, 415
f_pos field (file structure) and, 67, 91
get_info() and, 104
llseek method and, 163
poll method and, 157
read_proc() and, 104
return values, rules for interpreting, 80
strace command and, 109
syntax in Linux 2.0, 92
read_proc(), 104-107
connecting to /proc hierarchy, 106
read_unlock_bh(), 283, 291
read_unlock_irqrestore(), 283, 291
read_unlock_irq(), 283, 291
read_unlock(), 283, 291
read_write.c file, 513
readb(), 240, 250
readdir method, 64
reader-writer spinlocks, 283
reading
blocking I/O, 141-153
blocking/nonblocking operations, 148
poll method, 154-159
select method, 154-159
testing, 153
from a device, 78-81
readl(), 240, 250
readq(), 241
readv method, 66, 84
read/write instructions, reordering, 227
read/write position, changing, 64
readw(), 240, 250
rebuild_header method, 440
backward compatibility issues, 466
reception of packets, 429, 448-450
multicasting, 460-464
reentrancy, 20, 118, 147
register_blkdev(), 322, 366
register_cdrom(), 520
register_chrdev(), 56-58, 95
vs. register_blkdev(), 322
register_disk(), 369
accessing data within partitions, 360
backward compatibility issues, 366
printing partition information, 359
reading generic disk partition table, 358
registering devices, 327
register_framebuffer(), 522
register_netdev(), 467
REGISTER_SYMTAB macro, 49
register_symtab(), 48, 51
registering
block drivers, 322-328
DMA usage, 414
facilities in init_module, 29-32
network drivers, 430
ports, 38
registers
I/O, 227-229
mapping, 405
scatterlists and, 409
PCI configuration, 475-479
processor-specific, 182-184
release_dma_lock(), 416, 424
release_irq(), 276
release_mem_region(), 53, 250
backward compatibility issues, 47
working with I/O memory, 40, 239
release method, 65, 72
blocking open and, 169
syntax in Linux 2.0, 92
unmounting block devices, 349
(see also close method)
release_region(), 52, 250
backward compatibility issues, 47
working with I/O ports, 38, 229
remap_page_range(), 384-386, 421
limitations in dealing with RAM, 390
mapping addresses returned by ioremap, 395
remapping
I/O regions, 389
PCI regions, 485
RAM, 390-394
virtual addresses, 394
removable block devices, 352-354
remove method, 492
remove_proc_entry(), 107
__remove_wait_queue, 287, 292
remove_wait_queue(), 179, 287, 292
reordering read/write instructions, 227
repatch program, 527
request_dma(), 414, 423
request function
backward compatibility issues, 364
basic design of, 330-334
buffer cache and, 336
interrupt-driven devices and, 362
io_request_lock and, 338
multiqueue block drivers and, 343
register_disk and, 359
registering block devices, 323
splitting up multibuffer requests, 339
transferring data, 332
request_irq(), 253, 289
installing shared handlers, 275
when to call, 255
request_mem_region(), 53, 250
backward compatibility issues, 47
working with I/O memory, 40, 239
request_module(), 306, 319
inter_module_get_request() and, 313
loading modules, 307
modprobe program and, 306
security issues for module names, 309
request queues, 324
active queue heads and, 342
blk.h header file and, 328-330
block drivers not using, 345-348
buffers in, 336
defining, 343
initializing device-specific, 343
introduction to, 330-331
I/O request locks (see io_request_lock)
manipulating, 337
multiqueue block drivers and, 342-345
request_queue structure, 335
__request_region(), 41
request_region(), 52, 250
backward compatibility issues, 47
working with I/O ports, 38, 229
request structure, 332
buffer cache and, 335
releasing back to kernel, 338
requesting interrupts (see interrupt handlers)
requests, block driver, 330-348
blocking, 168
clustered, 340
handling data transfer, 332-334
interrupt-driven devices and, 362
partitionable devices and, 361
requeuing/rescheduling tasks, 192
reserved pages, remapping, 390-394
reserving high RAM addresses, 223
resetup_one_dev(), 366
resolution, time, 185
resolving Ethernet addresses, 455-458
resource ranges, 40
resources
allocating in Linux 2.4, 40
managing, 35-41
backward compatibility for, 47
PCI, 484
restore_flags(), 252
restricting access (see access)
resume method, 492
revalidate method, 353
backward compatibility issues, 364
register_disk and, 359
ring buffers, DMA, 402
RISC processor and inline assembly code, 183
rmb(), 228, 249
rmmod program, 6, 34
dynamically allocating major numbers, 60
testing modules using, 16
ROM, probing ISA memory for, 246
route utility, 429
Rules.make file, 26
platform dependency and, 27
run_task_queue(), 191, 206
running custom task queues, 198
runtime errors, strace for, 110
RW_LOCK_UNLOCKED, 283
rwlock_t type, 283, 291
S[ Top ]
S390 architecture
no support for PCI bus, 411
porting and, 234
SA_INTERRUPT flag, 254, 289
fast vs. slow interrupt handling, 262
SA_SAMPLE_RANDOM flag, 255, 289
SA_SHIRQ flag, 255, 289
installing shared handlers, 275
SAK (Secure Attention Key) function, 119
save_flags(), 252
sbull driver (example), 321-369
adding raw I/O capability, 397-400
sbullr driver (example), 397-400
SBus (Sun-designed bus), 498
drivers/sbus directory, 524
performing DMA mappings on, 412
sbus.h header file, 412
scatter-gather DMA mappings, 409
scatterlist structure, 410, 423
scatterlist.h header file, 410
scatterlists, mapping, 409
sched.h header file, 52, 178, 205, 289, 291
capable() and, 137
interrupt request line functions, 253
jiffies value and, 182
kernel directory and, 512
wait queue code information, 147
schedule_task(), 192, 195, 206
backward compatibility issues, 204
schedule_timeout(), 188
scheduler queue (tq_scheduler), 192, 194-196
backward compatibility issues, 204
schedule(), 145, 179, 512
delaying execution of code, 187
exclusive waits and, 146
preventing endless loops with, 118
reentrant functions and, 147
screen layouts, kernel support for, 522
SCSI drivers, 7
drivers/scsi directory, 520
scsi_ioctl.c file, 520
scsi_module.c file, 520
scsi_register_module(), 520
scsi.c file, 520
scull driver (example), 54-94, 101, 131, 135-139
scullc driver (example), 213
scullp driver (example), 216
mapping RAM to user space, 391-394
scullpipe devices (examples), 150-153
scullv driver (example), 219-220, 394
Secure Attention Key (SAK) function, 119
security, 9
module loading and, 309
seeking a device, 163
in Linux version 2.0, 176
segment.h header file, 95
select method, 154-159
in Linux version 2.0, 175
poll method and, 64
selection.c file, 518
sema_init(), 76, 95
sysdep.h header file and, 94
semaphore.h header file, 76, 95
semaphores, 76-78
backward compatibility issues, 94
detecting deadlocks with IKD, 124
incrementing value of, 77
initializing, 76
not used in interrupt handlers, 279
protecting critical code regions, 151
vs. spinlocks, 166
set_bit(), 284, 291
set_config method, 441
set_current_state(), 287, 291
backward compatibility issues, 288
set_dma_addr(), 416, 424
set_dma_count(), 417, 424
set_dma_mode(), 416, 424
SET_FILE_OWNER macro, 93
SET_INTR macro, 329
set_mac_address method, 441
set_mb(), 229
SET_MODULE_OWNER macro, 66, 95, 467
backward compatibility issues, 465
net_device structure and, 433
set_multicast_list method, 441, 461-464
interface flags and, 439
set_rmb(), 229
set_wmb(), 229
setconsole program (example), 99
setterm program, 140
setup_arch(), 507
sg_dma_address(), 410, 423
sg_dma_len(), 410, 423
sharing interrupts, 274-278
short delays, 188-189
short driver (example), 237
accessing I/O memory, 241
BH implementation, 273
going to sleep and avoiding race conditions, 286
implementing
interrupt handlers, 264-266
probing in the driver, 261
installing an interrupt handler, 255
shutting down modules (see unloading modules)
SIGIO signal, 160
signal handling, 151
down_interruptible() and, 77
signal.c file, 512
single-open devices, 165
SIOCDEVPRIVATE commands, 458, 469
SIOCSIFADDR command, 458
SIOCSIFMAP command, 458
size of block devices, 324
sizing data explicitly, 295
sk_buff structure
fields for, 452
receiving packets, 448
transmitting packets, 445
skb_headroom(), 455, 468
skb_pull(), 455, 468
__skb_push(), 454, 468
backward compatibility issues, 465
skb_push(), 454, 468
__skb_put(), 454, 468
skb_put(), 454, 468
skb_reserve(), 455, 468
skb_tailroom(), 454, 468
skbuff.h header file, 445, 452, 468
skull driver (example), 22-44
SLAB_CACHE_DMA flag, 212, 224
SLAB_CTOR_ATOMIC flag, 212, 224
SLAB_CTOR_CONSTRUCTOR flag, 213, 224
SLAB_HWCACHE_ALIGN flag, 212, 224
SLAB_NO_REAP flag, 212, 224
slab.c file, 211, 514
sleep_on_timeout(), 142, 178
delaying execution, 187
sleep_on(), 142, 178
avoiding race conditions, 286
sleeping processes, 141-148
avoiding race conditions, 286-288
SLOW_DOWN_IO statement, 249
slow interrupt handlers, 262-264
backward compatibility issues, 288
__SMP__ symbol, 22, 50
SMP systems
backward compatibility issues, 48
concurrency in the kernel, 20
kernel headers and, 22
module version control and, 314
race conditions and, 76-78
running tasklets on, 198-200
spinlocks to avoid race conditions, 166
writing reentrant code, 147
snapshot of PCI configuration, 481
snull driver (example), 426-457
sock_ioctl(), 458
socket buffers, 445, 452-455
allocating, 449, 454
functions acting on, 454
socket.c file, 516
sockios.h header file, 458, 469
soft lockup detector (IKD), 124
softirq.c file, 512
softnet implementation and backward compatibility, 464
software loops, 188
software memory barriers, 228, 249
software versions (see version numbering)
software-mapped I/O memory, 242
sound cards, drivers for, 521
sound_install_audiodrv(), 521
SPARC architecture
defining disable_irq/enable_irq as pointers, 268
high memory, 210
I/O memory management support, 411
platform dependency and, 27
porting and, 234
SBus, 498
performing DMA mappings on, 412
SPARC64 platform
data alignment, 300
directly mapped memory, 240
gdb debugger and, 121
objdump utility and, 118
oops messages and, 116
special files, 55
spin_is_locked(), 282, 290
spin_lock_bh(), 282, 290
spin_lock_init(), 166, 180, 281, 290
spin_lock_irqsave(), 281, 290
avoiding deadlocks with, 282
spin_lock_irq(), 281, 290
spin_lock(), 167, 180, 281, 290
spin_trylock(), 282, 290
spin_unlock_bh(), 282, 290
spin_unlock_irqrestore(), 282, 290
spin_unlock_irq(), 282, 290
spin_unlock_wait(), 282, 290
spin_unlock(), 167, 180, 282, 290
spinlock_t type, 166, 180, 281, 290, 367
spinlock.h header file, 166, 180, 281, 290
spinlocks, 281-283
dma_spin_lock, 416
io_request_lock, 338
page_table_lock, 378
reader-writer, 283
vs. semaphores, 166
xmit_lock, 443, 446
spull driver (example), 355-364
device methods for, 360
stack meter (IKD feature), 124
stacking modules, 28
standard C data types, 293
start_kernel(), 507-509
stat file, 257, 289
static symbols, 18
statistics
on caches, 213
on interrupts, 257
on network interfaces, 433, 441, 459
sti(), 252
stop method, 440, 443
strace command, 108-110
streaming DMA mappings, 406
setting up, 407-409
string operations, 231
struct page pointer, 373-375
backward compatibility issues, 419
struct timeval pointer, 185, 205
subsystem deviceID PCI register, 476
subsystem vendorID PCI register, 476
sunrpc subdirectory, 516
Super-H architecture
no support for PCI bus, 411
porting and, 234
supervisor mode, 19
suser(), 175
suspend method, 492
swap_state.c file, 515
swapfile.c file, 515
swapout method, 382
switch statement, with ioctl, 129, 133
symbols
driver-specific, 328-330
exporting, 29, 317
in Linux 2.0, 48-50
hiding global, 29
mangling symbol names, 314-317
static, declaring as, 18
symbol table, 27-29
klogd and, 114
module version control and, 315
symtab_begin.h header file, 51
symtab_end.h header file, 51
sync method, 382
synchronization (see lock method; race conditions)
sys_create_module(), 24
sys_delete_module system call, 33
sys_syslog(), 98
sysctl_net.c file, 516
sysdep.h header file, 26
backward compatibility issue, 47-50
sema_init() and, 94
SET_FILE_OWNER macro and, 93
wait queues in Linux 2.0/2.2, 172
syslogd daemon
logging messages, 100
performance problems with, 103
sysrq.txt file, 119
<sys/sched.h> header file
capable() and, 137
system calls, 24
invoked by init thread, 511
system faults
changing message loglevels after, 99
debugging, 110-120
handling, kernels vs. applications, 19
system hangs, 118
precautions when reproducing, 120
system resources
allocating in Linux 2.4, 40
managing, 35-41
backward compatibility for, 47
system.h header file, 228, 249
System.map file
klogd and, 114
ksymoops and, 114
T[ Top ]
_t data types, 296
tagged initialization format, 63
avoiding flush method, 93
declaring file_operations structure, 66
tail pointers and circular buffers, 280
take_over_console(), 522
TASK_EXCLUSIVE flag, 146
TASK_INTERRUPTIBLE flag, 145, 287, 291
task_queue, 191, 206
task queues, 189-200
backward compatibility issues, 204
data structures of, 190
declaring, 191
declaring custom, 198
driver timeline, 193
predefined, 192-198
requeuing/rescheduling tasks, 192
running, 191
TASK_RUNNING flag, 145, 287, 291
TASK_UNINTERRUPTIBLE flag, 291
tasklet_disable(), 200, 207
tasklet_enable(), 200, 207
tasklet_kill(), 200, 207
tasklet_schedule(), 199, 206, 270, 290
BH mechanism and, 272
tasklets, 198-200, 270
scheduling, 199
tcpdump program, 430
terminals, selecting for messages, 99
test_and_change_bit(), 285, 291
test_and_clear_bit(), 285, 291
test_and_set_bit(), 285, 291
test_bit(), 284, 291
testing (non)blocking operations, 153
"thundering herd" problem, 146
time, 181-207
delaying execution of code, 186-189
HZ (time frequency), 181, 297
kernel timers, 200-203
sleeping processes, 286-288
time intervals in the kernel, 181-184, 297
time.c/timer.c files, 512
time.h header file, 206
timeouts
backward compatibility issues, 204
of kernel timers, 201
scheduling, 188
setting up short-term, 187
transmission (see transmission timeouts)
TIMER_BH bottom half, 272
timer interrupts, 181
timer_list structure, 201
timer queue element structure, 190
timer queue (tq_timer), 193, 196, 206
BH mechanism and, 272
timer.h header file, 201, 207
timers, 200-203
timestamp counter (TSC), 183
TIOCLINUX command, 99
to_kdev_t(), 62
token ring networks, setting up interfaces for, 437
top-half vs. bottom-half handlers, 269
tq_immediate queue, 193, 197, 206
BH mechanism and, 272
writing a BH bottom half, 273
tq_scheduler queue, 192, 194-196
backward compatibility issues, 204
tq_struct structure, 190
tq_timer(), 193, 196, 206
BH mechanism and, 272
TQUEUE_BH bottom half, 272
tqueue.h header file, 190, 192, 206
tr_configure(), 437
tracing programs, 108-110
Linux Trace Toolkit (LTT), 127
transistor-transistor logic (TTL) levels, 235
transmission concurrency, controlling, 446
transmission of packets, 429, 445-448
multicasting, 460-464
transmission timeouts, 433, 447
tx_timeout method and, 440
watchdog_timeo field and, 442
traversal of linked lists, 302
troubleshooting, 97
porting problems, 232-234
race conditions, 278-288
system hangs, 118
wrong font on console, 140
(see also debugging)
truncating devices on open, 71
TSC (timestamp counter), 183
TTL (transistor-transistor logic) levels, 235
tunelp program, 3
tx_timeout method, 440, 447
TYPE macro, splitting minor numbers, 69
types.h header file (asm), 295
types.h header file (linux), 295, 303
U[ Top ]
u8, u16, u32, u64 data types, 295, 303
uaccess.h header file, 78, 95, 135, 177
uClinux port
different ld scripts needed for, 510
mmnommu directory, 515
udelay(), 188, 206
uint8_t/uint32_t types, 295
uintptr_t type (C99 standard), 294
uio.h header file, 84
unaligned data, 299
unaligned.h header file, 299, 304
uniqueness of ioctl command numbers, 130
universal serial bus drivers (see USB drivers)
Unix design books, 528
unix subdirectory, 516
unloading modules, 16, 34, 61
on demand, 305-311
for network drivers, 434
usage count and, 33, 313
(see also cleanup_module())
unlock_kiovec(), 396, 422
unmap_kiobuf(), 399, 422
unmap method, 381
unregister_blkdev(), 322, 366
unregister_cdrom(), 520
unregister_chrdev(), 61, 95
unregister_netdev(), 467
unregistering
block drivers, 322-328
facilities, 30
unsigned type, 230
platform dependencies and, 232
up(), 77, 95
urandom device, 255
usage count, 386
accessing data within partitions, 360
decremented by release method, 72
incremented by open method, 68
maintained by block drivers, 323
maintaining via owner field, 71
modules, 33, 313
backward compatibility issues, 93
nopage method and, 392
usb_deregister(), 500, 505
usb_driver structure, 500, 505
usb_register(), 500, 505
USB (universal serial bus) drivers, 7, 500
call_usermodehelper and, 311
directory for, 524
lookaside caches, 211-214
stacking on usbcore/input modules, 28
writing, 500-502
usbcore module, 28
usb.h header file, 504
__USE_OLD_SELECT__ preprocessor symbol, 176
__USE_OLD_SYMTAB__, 49
user mode, 19
helper programs, running, 311
user space, 19
access to, in Linux 2.0, 173-175
accessing I/O ports from, 230
capabilities/restrictions in, 137
changes in access to, 94
entering via init process, 511
explicitly sizing data in, 295
mapping RAM to, 390-394
reentrant functions and, 147
retrieving datum from, 136
transferring to/from kernel space, 78-84
watching programs run in, 108-110
writing drivers in, 45
user virtual addresses, 371
User-Mode Linux, 126
users, restricting access to simultaneous, 167
UTS_RELEASE macro, 25
V[ Top ]
__va(), 372, 421
backward compatibility issues, 420
validating
block driver requests, 330
disk changes, 353
variables, declaring as volatile, 279
vector operations (readv/writev), 84
vendorID PCI register, 476
verify_area(), 173-175
VERIFY_ symbols, 135, 178
version dependency, 24-26
module version control, 314-318
version numbering, 10
char drivers, 55-62
major device numbers, 56-61
minor device numbers, 56, 61, 69
versioned symbols, 315
enabling module version control, 316
exporting, 317
version.h header file, 25, 52
VESA Local Bus (VLB) devices, 498
vfree(), 217, 225
backward compatibility issues, 248
video_device structure, 523
video devices, directory for, 522
video_register_device(), 523
video/videodev.c file, 523
virt_to_bus(), 404, 422
backward compatibility issues, 420
virt_to_page(), 374, 421
backward compatibility issues, 418
mapping memory with nopage, 389
virtual addresses, 372
assigning to devices, 242
mapping to physical addresses, 375
remapping, 394
Sbus peripherals and, 498
vmalloc and related functions, 217-220
virtual memory areas (VMAs), 378-382
main fields in vm_area_struct, 380
VLB (VESA Local Bus) devices, 498
vm_area_struct structure, 380
backward compatibility issues, 419
VM_IO flag, 381
vm_operations_struct structure, 381
vm_private_data field (vm_area_struct), 393
backward compatibility issues, 419
VM_RESERVED flag, 381
VMA_OFFSET macro, 387
VMALLOC_VMADDR(), 395
vmalloc.c file, 514
vmalloc.h header file, 217, 225
vmalloc(), 217-220, 225, 394
vs. kmalloc(), 217-219
VMAs (virtual memory areas), 378-382
main fields in vm_area_struct, 380
vmlinux kernel image, 510
vmscan.c file, 515
volatile, declaring variables as, 279
vremap() in Linux 2.x only, 223, 248
vsprintf.c file, 517
vt.c file, 518
W[ Top ]
wait_event_interruptible(), 142, 179, 288, 292
wait_event(), 142, 179, 288, 292
vs. interruptible_sleep_on(), 145
wait_queue_head_t, 178
new in Linux version 2.3.1, 172
poll table entries and, 158
sleeping/waking up processes, 141-143
working with advanced applications, 144
wait_queue_t type, 144, 179
poll table entries and, 158
wait queues, 141-147
avoiding race conditions, 287
defined type for, 178
delaying code execution, 187
in Linux versions 2.0/2.2, 172
manipulating, 144
poll table entries and, 158
putting processes into, 179
wait.h header file, 144, 178
wake_up_interruptible_sync(), 143, 178
wake_up_interruptible(), 143, 178
wake_up_sync(), 143, 178
wake_up(), 143, 178
resuming execution of code, 188
waking up processes, 142
exclusive waits and, 146
functions used for, 178
release method and, 169
-Wall flag (gcc), 23, 296
watchdog_timeo field (net_device structure), 442, 447
watching programs in user space, 108-110
web sites related to Linux kernels, xv
wmb(), 228, 249
wppage method, 382
backward compatibility issues, 419
wrapper functions, compiling under 2.0 headers, 92
write_lock_bh(), 283, 291
write_lock_irqsave(), 283, 291
write_lock_irq(), 283, 291
write_lock(), 283, 291
write method, 64, 78-80
code for, 83
configuring DMA controller, 415
f_pos field (file structure) and, 67, 91
input/output buffers and, 148
llseek method and, 163
poll method and, 157
return values, rules for interpreting, 82
select method and, 157
strace command and, 109
syntax in Linux 2.0, 92
write_unlock_bh(), 283, 291
write_unlock_irqrestore(), 283, 291
write_unlock_irq(), 283, 291
write_unlock(), 283, 291
writeb(), 240, 250
writel(), 240, 250
writeq(), 241
writev method, 66, 84
writew(), 240, 250
writing, 97
blocking I/O, 141-149
blocking/nonblocking operations, 148
control sequences to devices, 140
to a device, 78-80, 82-84
drivers
using devfs, 85-91
reentrant code, 147
in user space, 45
version numbering, 10
watching user-space programs run, 108-110
writer's role in, 2-4
interrupt handler bottom halves, 273
interrupt handlers, 264-268
makefiles, 22
(see also debugging)
X[ Top ]
x86 architecture
interrupt handling on, 263
limitations of platform, 510
PCI DMA interface support, 411
porting and, 233
x/i (examine instructions) command, 121
xtime variable, 185
Z[ Top ]
zImage file, 510
Back to: Table of Contents
Back to: Linux Device Drivers, 2nd Edition
|