內容簡介
本書基於zui新的Linux內核源代碼3.19.3版本,對常用的內核API作瞭係統歸納,並編寫瞭典型驗證程序,使理論分析與實際編程做到瞭統一。分析的內核API模塊包括:模塊機製內核API、進程管理內核API、進程調度內核API、中斷與異常機製內核API、時間與定時機製內核API、內存管理內核API、內核同步機製API、文件係統內核API和設備驅動與設備管理模塊內核API。
目錄
前 言
第1章 Linux內核API分析必備知識 1
1.1 Linux內核編程注意事項 1
1.2 本書中模塊編譯Makefile模闆 2
1.3 內核調試函數printk 3
1.4 內核編譯與定製 5
1.4.1 獲得Linux內核與補丁 5
1.4.2 準備編譯需要的工具 5
1.4.3 解壓內核 6
1.4.4 給內核打補丁 6
1.4.5 設定編譯選項 7
1.4.6 編譯與安裝內核 9
1.4.7 創建initramfs 10
1.4.8 設置grub 11
1.4.9 啓動選項 12
1.5 溫馨提示 12
本章參考文獻 13
第2章 內核模塊機製API 14
2.1 函數:__module_address( ) 14
2.2 函數:__module_text_address( ) 16
2.3 函數:__print_symbol( ) 19
2.4 函數:__symbol_get( ) 22
2.5 函數:__symbol_put( ) 25
2.6 函數:find_module( ) 27
2.7 函數:find_symbol( ) 31
2.8 函數:module_is_live( ) 36
2.9 函數:module_put( ) 38
2.10 函數:module_refcount( ) 40
2.11 函數:sprint_symbol( ) 42
2.12 函數:symbol_put_addr( ) 45
2.13 函數:try_module_get( ) 48
本章參考文獻 50
第3章 Linux進程管理內核API 51
3.1 函數:__task_pid_nr_ns( ) 51
3.2 函數:find_get_pid( ) 54
3.3 函數:find_pid_ns( ) 56
3.4 函數:find_vpid( ) 58
3.5 函數:get_pid( ) 60
3.6 函數:get_task_mm( ) 62
3.7 函數:mmput( ) 66
3.8 函數:ns_of_pid( ) 68
3.9 函數:pid_nr( ) 70
3.10 函數:pid_task( ) 72
3.11 函數:pid_vnr( ) 74
3.12 函數:put_pid( ) 76
3.13 函數:task_active_pid_ns( ) 78
3.14 函數:task_tgid_nr_ns( ) 80
本章參考文獻 82
第4章 Linux 進程調度內核API 83
4.1 函數:__wake_up( ) 83
4.2 函數:__wake_up_sync( ) 88
4.3 函數:__wake_up_sync_key( ) 91
4.4 函數:abort_exclusive_wait( ) 94
4.5 函數:add_wait_queue( ) 99
4.6 函數:add_wait_queue_exclusive( ) 102
4.7 函數:autoremove_wake_function( ) 105
4.8 函數:complete( ) 109
4.9 函數:complete_all( ) 112
4.10 函數:completion_done( ) 115
4.11 函數:current_thread_info( ) 118
4.12 函數:default_wake_function( ) 121
4.13 函數:do_exit( ) 124
4.14 函數:finish_wait( ) 126
4.15 函數:init_waitqueue_entry( ) 130
4.16 函數:init_waitqueue_head( ) 132
4.17 函數:kthread_create_on_node( ) 134
4.18 函數:kthread_stop( ) 136
4.19 函數:prepare_to_wait( ) 138
4.20 函數:prepare_to_wait_exclusive( ) 142
4.21 函數:remove_wait_queue( ) 147
4.22 函數:sched_setscheduler( ) 150
4.23 函數:set_cpus_allowed_ptr( ) 154
4.24 函數:set_user_nice( ) 157
4.25 函數:task_nice( ) 160
4.26 函數:try_wait_for_completion( ) 162
4.27 函數:wait_for_completion( ) 166
4.28 函數:wait_for_completion_interruptible_timeout( ) 169
4.29 函數:wait_for_completion_killable( ) 173
4.30 函數:wait_for_completion_timeout( ) 177
4.31 函數:wake_up_process( ) 180
4.32 函數:yield( ) 183
本章參考文獻 185
第5章 Linux中斷機製內核API 187
5.1 函數:__tasklet_hi_schedule( ) 187
5.2 函數:__tasklet_schedule( ) 190
5.3 函數:disable_irq( ) 193
5.4 函數:disable_irq_nosync( ) 193
5.5 函數:disable_irq_wake( ) 196
5.6 函數:enable_irq( ) 199
5.7 函數:enable_irq_wake( ) 201
5.8 函數:free_irq( ) 204
5.9 函數:irq_set_chip( ) 205
5.10 函數:irq_set_chip_data( ) 209
5.11 函數:irq_set_irq_type( ) 212
5.12 函數:irq_set_irq_wake( ) 214
5.13 函數:remove_irq( ) 217
5.14 函數:request_irq( ) 221
5.15 函數:request_threaded_irq( ) 225
5.16 函數:setup_irq( ) 229
5.17 函數:tasklet_disable( ) 232
5.18 函數:tasklet_disable_nosync( ) 234
5.19 函數:tasklet_enable( ) 236
5.20 函數:tasklet_hi_schedule( ) 237
5.21 函數:tasklet_init( ) 241
5.22 函數:tasklet_kill( ) 243
5.23 函數:tasklet_schedule( ) 245
5.24 函數:tasklet_trylock( ) 247
5.25 函數:tasklet_unlock( ) 248
本章參考文獻 251
第6章 Linux內存管理內核API 252
6.1 函數:__free_pages( ) 252
6.2 函數:__get_free_pages( ) 253
6.3 函數:__get_vm_area( ) 255
6.4 函數:__krealloc( ) 258
6.5 函數:alloc_pages( ) 261
6.6 函數:alloc_pages_exact( ) 264
6.7 函數:find_vma( ) 266
6.8 函數:find_vma_intersection( ) 270
6.9 函數:free_pages( ) 272
6.10 函數:free_pages_exact( ) 273
6.11 函數:get_unmapped_area( ) 274
6.12 函數:get_zeroed_page( ) 276
6.13 函數:kcalloc( ) 278
6.14 函數:kfree( ) 280
6.15 函數:kmalloc( ) 281
6.16 函數:kmem_cache_alloc( ) 283
6.17 函數:kmem_cache_create( ) 285
6.18 函數:kmem_cache_destroy( ) 288
6.19 函數:kmem_cache_free( ) 289
6.20 函數:kmem_cache_zalloc( ) 290
6.21 函數:kmemdup( ) 292
6.22 函數:ksize( ) 295
6.23 函數:kstrdup( ) 298
6.24 函數:kstrndup( ) 299
6.25 函數:kzalloc( ) 301
6.26 函數:memdup_user( ) 303
6.27 函數:mempool_alloc( ) 306
6.28 函數:mempool_alloc_pages( ) 308
6.29 函數:mempool_alloc_slab( ) 311
6.30 函數:mempool_create( ) 313
6.31 函數:mempool_destroy( ) 316
6.32 函數:mempool_free( ) 317
6.33 函數:mempool_free_pages( ) 318
6.34 函數:mempool_free_slab( ) 318
6.35 函數:mempool_kfree( ) 319
6.36 函數:mempool_kmalloc( ) 320
6.37 函數:mempool_resize( ) 322
6.38 函數:nr_free_buffer_pages( ) 325
6.39 宏:page_address( ) 326
6.40 宏:page_cache_get( ) 328
6.41 宏:page_cache_release( ) 330
6.42 函數:page_zone( ) 331
6.43 宏:probe_kernel_address( ) 334
6.44 函數:probe_kernel_read( ) 336
6.45 函數:vfree( ) 338
6.46 函數:vma_pages( ) 339
6.47 函數:vmalloc( ) 341
6.48 函數:vmalloc_to_page( ) 343
6.49 函數:vmalloc_to_pfn( ) 345
6.50 函數:vmalloc_user( ) 347
本章參考文獻 349
第7章 Linux內核定時機製API 350
7.1 函數:__round_jiffies( ) 350
7.2 函數:__round_jiffies_relative( ) 352
7.3 函數:__round_jiffies_up( ) 354
7.4 函數:__round_jiffies_up_relative( ) 356
7.5 函數:add_timer( ) 358
7.6 函數:current_kernel_time( ) 359
7.7 函數:del_timer( ) 361
7.8 函數:del_timer_sync( ) 364
7.9 函數:do_gettimeofday( ) 367
7.10 函數:do_settimeofday( ) 369
7.11 函數:get_seconds( ) 372
7.12 函數:getnstimeofday( ) 374
7.13 函數:init_timer( ) 376
7.14 函數:init_timer_deferrable( ) 378
7.15 函數:init_timer_key( ) 380
7.16 函數:init_timer_on_stack( ) 382
7.17 函數:init_timer_on_stack_key( ) 385
7.18 函數:mktime( ) 387
7.19 函數:mod_timer( ) 389
7.20 函數:mod_timer_pending( ) 392
7.21 函數:ns_to_timespec( ) 394
7.22 函數:ns_to_timeval( ) 396
7.23 函數:round_jiffies( ) 398
7.24 函數:round_jiffies_relative( ) 401
7.25 函數:round_jiffies_up( ) 404
7.26 函數:round_jiffies_up_relative( ) 406
7.27 函數:set_normalized_timespec( ) 409
7.28 函數:setup_timer( ) 411
7.29 函數:setup_timer_on_stack( ) 413
7.30 函數:timer_pending( ) 415
7.31 函數:timespec_add_ns( ) 417
7.32 函數:timespec_compare( ) 420
7.33 函數:timespec_equal( ) 422
7.34 函數:timespec_sub( ) 424
7.35 函數:timespec_to_ns( ) 426
7.36 函數:timeval_compare( ) 428
7.37 函數:timeval_to_ns( ) 431
7.38 函數:try_to_del_timer_sync( ) 433
本章參考文獻 435
第8章 Linux內核同步機製API 436
8.1 函數:atomic_add( ) 436
8.2 函數:atomic_add_negative( ) 438
8.3 函數:atomic_add_return( ) 440
8.4 函數:atomic_add_unless( ) 442
8.5 函數:atomic_cmpxchg( ) 444
8.6 函數:atomic_dec( ) 446
8.7 函數:atomic_dec_and_test( ) 448
8.8 函數:atomic_inc( ) 449
8.9 函數:atomic_inc_and_test( ) 451
8.10 函數:atomic_read( ) 453
8.11 函數:atomic_set( ) 453
8.12 函數:atomic_sub( ) 455
8.13 函數:atomic_sub_and_test( ) 457
8.14 函數:atomic_sub_return( ) 459
8.15 函數:down( ) 461
8.16 函數:down_interruptible( ) 463
8.17 函數:down_killable( ) 465
8.18 函數:down_read( ) 468
8.19 函數:down_read_trylock( ) 470
8.20 函數:down_timeout( ) 472
8.21 函數:down_trylock( ) 474
8.22 函數:down_write( ) 476
8.23 函數:down_write_trylock( ) 479
8.24 函數:downgrade_write( ) 481
8.25 宏:init_rwsem( ) 483
8.26 函數:read_seqbegin( ) 486
8.27 函數:read_seqretry( ) 488
8.28 函數:sema_init( ) 490
8.29 宏:seqlock_init( ) 492
8.30 函數:up( ) 494
8.31 函數:up_read( ) 496
8.32 函數:up_write( ) 497
8.33 函數:write_seqlock( ) 498
8.34 函數:write_sequnlock( ) 498
本章參考文獻 499
第9章 Linux文件係統內核API 500
9.1 函數:__mnt_is_readonly( ) 500
9.2 函數:current_umask( ) 502
9.3 函數:d_alloc( ) 504
9.4 函數:d_find_alias( ) 507
9.5 函數:dput( ) 510
9.6 函數:fget( ) 512
9.7 函數:generic_fillattr( ) 515
9.8 函數:get_fs_type( ) 517
9.9 函數:get_max_files( ) 520
9.10 函數:get_super( ) 522
9.11 函數:have_submounts( ) 525
9.12 函數:I_BDEV( ) 527
9.13 函數:inode_add_bytes( ) 529
9.14 函數:inode_get_bytes( ) 531
9.15 函數:inode_set_bytes( ) 533
9.16 函數:inode_sub_bytes( ) 535
9.17 函數:is_bad_inode( ) 537
9.18 函數:make_bad_inode( ) 538
9.19 函數:may_umount( ) 540
9.20 函數:may_umount_tree( ) 542
9.21 函數:mnt_want_write( ) 544
9.22 函數:notify_change( ) 545
9.23 函數:put_unused_fd( ) 547
9.24 函數:unshare_fs_struct( ) 549
9.25 函數:vfs_fstat( ) 551
9.26 函數:vfs_getattr( ) 553
9.27 函數:vfs_statfs( ) 556
本章參考文獻 559
第10章 Linux 設備驅動及設備管理API 560
Linux內核API完全參考手冊(第2版) epub pdf mobi txt 電子書 下載 2024
Linux內核API完全參考手冊(第2版) 下載 epub mobi pdf txt 電子書