第1章 Linux内核API分析必备知识 1
Linux内核编程注意事项 1
本书中模块编译Makefile模板 1
内核调试函数printk 2
内核编译与定制 4
温馨提示 10
参考文献 11
第2章 Linux内核模块机制API 12
函数:_module_address() 12
函数:_module_ref_addr() 14
函数:_module_text_address() 16
函数:_print_symbol() 18
函数:_symbol_get() 20
函数:_symbol_put() 22
函数:find_module() 24
函数:find_symbol() 27
函数:module_is_live() 30
函数:module_put() 32
函数:module_refcount() 34
函数:sprint_symbol() 36
函数:symbol_put_addr() 38
函数:try_module_get() 40
函数:use_module() 42
参考文献 44
第3章 Linux进程管理内核API 45
函数:_task_pid_nr_ns() 45
函数:find_get_pid() 47
函数:find_pid_ns() 49
函数:find_task_by_pid_ns() 51
函数:find_task_by_pid_type_ns() 53
函数:find_task_by_vpid() 55
函数:find_vpid() 57
函数:get_pid() 59
函数:get_task_mm() 60
函数:is_container_init() 63
函数:kernel_thread() 65
函数:mmput() 67
函数:ns_of_pid() 69
函数:pid_nr() 71
函数:pid_task() 73
函数:pid_vnr() 75
函数:put_pid() 77
函数:task_active_pid_ns() 79
函数:task_tgid_nr_ns() 81
参考文献 83
第4章 Linux进程调度内核API 84
函数:_wake_up() 84
函数:_wake_up_sync() 87
函数:_wake_up_sync_key() 89
函数:abort_exclusive_wait() 91
函数:add_preempt_count() 95
函数:add_wait_queue() 97
函数:add_wait_queue_exclusive() 100
函数:autoremove_wake_function() 102
函数:complete() 106
函数:complete_all() 108
函数:complete_done() 111
函数:current_thread_info() 113
函数:default_wake_function() 115
函数:do_exit() 118
函数:finish_wait() 120
函数:init_waitqueue_entry() 123
函数:init_waitqueue_head() 125
函数:interruptible_sleep_on() 127
函数:interruptible_sleep_on_timeout() 130
函数:preempt_notifier_register() 133
函数:preempt_notifier_unregister() 136
函数:prepare_to_wait() 139
函数:prepare_to_wait_exclusive() 142
函数:remove_wait_queue() 146
函数:sched_setscheduler() 149
函数:set_cpus_allowed_ptr() 152
函数:set_user_nice() 155
函数:sleep_on() 158
函数:sleep_on_timeout() 160
函数:sub_preempt_count() 162
函数:task_nice() 164
函数:try_wait_for_completion() 166
函数:wait_for_completion() 169
函数:wait_for_completion_interruptible() 172
函数:wait_for_completion_interruptible_timeout() 175
函数:wait_for_completion_killable() 179
函数:wait_for_completion_timeout() 182
函数:wake_up_process() 184
函数:yield() 187
参考文献 188
第5章 Linux中断机制内核API 189
函数:_set_irq_handler() 189
函数:_tasklet_hi_schedule() 191
函数:_tasklet_schedule() 194
函数:disable_irq() 196
函数:disable_irq_nosync() 196
函数:disable_irq_wake() 198
函数:enable_irq() 201
函数:enable_irq_wake() 203
函数:free_irq() 205
函数:kstat_irqs_cpu() 207
函数:remove_irq() 209
函数:request_irq() 213
函数:request_threaded_irq() 216
函数:set_irq_chained_handler() 219
函数:set_irq_chip() 221
函数:set_irq_chip_data() 225
函数:set_irq_data() 227
函数:set_irq_handler() 229
函数:set_irq_type() 232
函数:set_irq_wake() 234
函数:setup_irq() 237
函数:tasklet_disable() 239
函数:tasklet_disable_nosync() 241
函数:tasklet_enable() 243
函数:tasklet_hi_enable() 244
函数:tasklet_hi_schedule() 246
函数:tasklet_init() 248
函数:tasklet_kill() 250
函数:tasklet_shedule() 252
函数:tasklet_trylock() 254
函数:tasklet_unlock() 255
参考文献 257
第6章 Linux内存管理内核API 258
函数:_free_pages() 258
函数:_get_free_pages() 258
函数:_get_vm_area() 260
函数:_krealloc() 262
函数:alloc_pages() 265
函数:alloc_pages_exact() 268
函数:alloc_vm_area() 270
函数:do_brk() 272
函数:do_mmap() 273
函数:do_mmap_pgoff() 276
函数:do_munmap() 279
函数:find_vma() 281
函数:find_vma_intersection() 284
函数:free_pages() 286
函数:free_pages_exact() 287
函数:free_vm_area() 288
函数:get_unmapped_area() 288
函数:get_user_pages() 290
函数:get_user_pages_fast() 292
函数:get_vm_area_size() 294
函数:get_zeroed_page() 295
函数:kcalloc() 297
函数:kfree() 299
函数:kmalloc() 299
函数:kmap_high() 301
函数:kmem_cache_alloc() 303
函数:kmem_cache_create() 305
函数:kmem_cache_destroy() 308
函数:kmem_cache_free() 308
函数:kmem_cache_zalloc() 309
函数:kmemdup() 311
函数:krealloc() 313
函数:ksize() 315
函数:kstrdup() 318
函数:kstrndup() 319
函数:kunmap_high() 321
函数:kzalloc() 321
函数:memdup_user() 323
函数:mempool_alloc() 325
函数:mempool_alloc_pages() 327
函数:mempool_alloc_slab() 329
函数:mempool_create() 331
函数:mempool_create_kzalloc_pool() 333
函数:mempool_destroy() 334
函数:mempool_free() 335
函数:mempool_free_pages() 335
函数:mempool_free_slab() 336
函数:mempool_kfree() 336
函数:mempool_kmalloc() 337
函数:mempool_kzalloc() 339
函数:mempool_resize() 341
函数:nr_free_buffer_pages() 343
宏:page_address() 345
宏:page_cache_get() 346
宏:page_cache_release() 348
函数:page_zone() 349
宏:probe_kernel_address() 352
函数:probe_kernel_read() 354
函数:probe_kernel_write() 355
函数:vfree() 357
函数:vma_pages() 358
函数:vmalloc() 359
函数:vmalloc_to_page() 361
函数:vmalloc_to_pfn() 363
函数:vmalloc_user() 365
参考文献 366
第7章 Linux内核定时机制API 368
函数:_round_jiffies() 368
函数:_round_jiffies_relative() 369
函数:_round_jiffies_up() 371
函数:_round_jiffies_up_relative() 373
函数:_timecompare_update() 375
函数:add_timer() 377
函数:current_kernel_time() 378
函数:del_timer() 380
函数:del_timer_sync() 382
函数:do_gettimeofday() 384
函数:do_settimeofday() 386
函数:get_seconds() 388
函数:getnstimeofday() 390
函数:init_timer() 391
函数:init_timer_deferrable() 393
函数:init_timer_deferrable_key() 395
函数:init_timer_key() 398
函数:init_timer_on_stack() 400
函数:init_timer_on_stack_key() 402
函数:mktime() 404
函数:mod_timer() 406
函数:mod_timer_pending() 408
函数:ns_to_timespec() 410
函数:ns_to_timeval() 412
函数:round_jiffies() 414
函数:round_jiffies_relative() 416
函数:round_jiffies_up() 418
函数:round_jiffies_up_relative() 420
函数:set_normalized_timespec() 422
函数:setup_timer() 424
函数:setup_timer_key() 426
函数:setup_timer_on_stack() 428
函数:setup_timer_on_stack_key() 430
函数:timecompare_offset() 432
函数:timecompare_transform() 435
函数:timecompare_update() 436
函数:timer_pending() 439
函数:timespec_add_ns() 441
函数:timespec_compare() 442
函数:timespec_equal() 444
函数:timespec_sub() 446
函数:timespec_to_ns() 448
函数:timeval_compare() 450
函数:timeval_to_ns() 452
函数:try_to_del_timer_sync() 453
参考文献 456
第8章 Linux内核同步机制API 457
函数:atomic_add() 457
函数:atomic_add_negative() 458
函数:atomic_add_return() 460
函数:atomic_add_unless() 461
宏:atomic_cmpxchg() 463
函数:atomic_dec() 464
函数:atomic_dec_and_test() 466
函数:atomic_inc() 467
函数:atomic_inc_and_test() 469
宏:atomic_read() 470
宏:atomic_set() 471
函数:atomic_sub() 472
函数:atomic_sub_and_test() 474
函数:atomic_sub_return() 475
函数:down() 477
函数:down_interruptible() 479
函数:down_killable() 481
函数:down_read() 483
函数:down_read_trylock() 485
函数:down_timeout() 487
函数:down_trylock() 489
函数:down_write() 491
函数:down_write_trylock() 492
函数:downgrade_write() 494
宏:init_rwsem() 496
宏:read_lock() 498
函数:read_seqbegin() 499
函数:read_seqretry() 500
宏:read_trylock() 503
宏:read_unlock() 504
宏:rwlock_init() 505
函数:sema_init() 508
宏:seqlock_init() 509
宏:spin_can_lock() 511
宏:spin_lock() 513
宏:spin_lock_bh() 514
宏:spin_lock_init() 516
宏:spin_lock_irq() 518
宏:spin_lock_irqsave() 520
宏:spin_trylock() 522
宏:spin_unlock() 525
宏:spin_unlock_bh() 526
宏:spin_unlock_irq() 526
宏:spin_unlock_irqrestore() 527
宏:spin_unlock_wait() 527
函数:up() 529
函数:up_read() 531
函数:up_write() 532
宏:write_lock() 532
函数:write_seqlock() 534
函数:write_sequnlock() 534
宏:write_trylock() 535
宏:write_unlock() 537
参考文献 537
第9章 Linux文件系统内核API 539
函数:_mnt_is_readonly() 539
函数:current_umask() 541
函数:d_alloc() 542
函数:d_alloc_root() 544
函数:d_delete() 547
函数:d_find_alias() 547
函数:d_invalidate() 549
函数:d_move() 550
函数:d_validate() 551
函数:dput() 553
函数:fget() 554
函数:find_inode_number() 557
函数:generic_fillattr() 559
函数:get_empty_filp() 561
函数:get_fs_type() 563
函数:get_max_files() 565
函数:get_super() 566
函数:get_unused_fd() 569
函数:have_submounts() 570
函数:I_BDEV() 572
函数:iget_locked() 573
函数:inode_add_bytes() 575
函数:inode_get_bytes() 576
函数:inode_needs_sync() 578
函数:inode_set_bytes() 580
函数:inode_setattr() 581
函数:inode_sub_bytes() 584
函数:invalidate_inodes() 586
函数:is_bad_inode() 587
函数:make_bad_inode() 588
函数:may_umount() 590
函数:may_umount_tree() 591
函数:mnt_pin() 593
函数:mnt_unpin() 594
函数:mnt_want_write() 596
函数:new_inode() 596
函数:notify_change() 598
函数:put_unused_fd() 600
函数:register_filesystem() 602
函数:unregister_filesystem() 604
函数:unshare_fs_struct() 604
函数:vfs_fstat() 606
函数:vfs_getattr() 608
函数:vfs_statfs() 610
参考文献 613
第10章 Linux设备驱动及设备管理API 614
函数:_class_create() 614
函数:_class_register() 615
函数:cdev_add() 616
函数:cdev_alloc() 617
函数:cdev_del() 619
函数:cdev_init() 624
宏:class_create() 628
函数:class_destroy() 629
宏:class_register() 631
函数:class_unregister() 632
函数:device_add() 637
函数:device_create() 638
函数:device_del() 640
函数:device_destroy() 640
函数:device_initialize() 646
函数:device_register() 652
函数:device_rename() 652
函数:device_unregister() 657
函数:get_device() 663
函数:put_device() 663
函数:register_chrdev() 667
函数:register_keyboard_notifier() 668
函数:unregister_chrdev() 669
函数:unregister_keyboard_notifier() 675
部分相关函数说明 679
参考文献 679
附录 Linux内核API快速检索表 680