Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.sao.ru/hq/sts/linux/doc/rubini/inx.html
Дата изменения: Unknown
Дата индексирования: Tue Oct 2 14:16:45 2012
Кодировка:

Поисковые слова: п п п п п п п п п п п п п п п
Linux Device Drivers, 2nd Edition: Index

O'Reilly Online Catalog

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


oreilly.com Home | O'Reilly Bookstores| How to Order | O'Reilly Contacts
International | About O'Reilly | Affiliated Companies | Privacy Policy


© 2001, O'Reilly & Associates, Inc.
webmaster@oreilly.com