Linux作为源码开放的操作系统,在计算机与嵌入式设备中广泛应用,因此对Linux内核开发与编程变得越来越重要了。本书以最新的Linux内核版本2.6.30为依据,对常用的内核API作了系统分析、归纳,设计典型实例,并对开发场景进行详细讲解。分析的内核API模块包括:模块机制内核API、进程管理内核API、进程调度内核API、中断与异常机制内核API、时间与定时机制内核API、内存管理内核API、内核同步机制API、文件系统内核API和设备驱动与设备管理模块内核API。
本书立足Linux内核API分析,深入实践。读者可以在较低起点下进行高效的内核分析与编程实践。本书可作为高等院校计算机、电子、信息类大学生及研究生进行Linux操作系统学习和编程的教材或参考书,也可作为Linux开发人员和广大的Linux爱好者编程开发的参考用书。
封面图
目录
- 前言
- 本书使用方法
- 第1章 Linux内核API分析必备知识1
- Linux内核编程注意事项1
- 本书中模块编译Makefile模板1
- 内核调试函数printk2
- 内核编译与定制4
- 温馨提示10
- 参考文献11
- 第2章 Linux内核模块机制API12
- 函数:__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进程管理内核API45
- 函数:__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进程调度内核API84
- 函数:__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中断机制内核API189
- 函数:__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内存管理内核API258
- 函数:__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内核定时机制API368
- 函数:__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内核同步机制API457
- 函数: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文件系统内核API539
- 函数:__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设备驱动及设备管理API614
- 函数:__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