Linux内核API完全参考手册
|
|
|
-
定价 :
¥79.00
- 会员价 : ¥55.30(70折)
-
|
|
|
|
|
|
基本信息
- 作者:
邱铁
周玉
邓莹莹
- 出版社:机械工业出版社
- ISBN:9787111323570
- 上架时间:2011-1-10
- 出版日期:2011 年1月
- 开本:16开
- 页码:684
- 版次:1-1
- 所属分类:
计算机 > 操作系统 > Linux
编辑推荐
对常用的内核API作了系统分析和归纳
帮助读者进行高效的内核分析与编程实践
书籍计算机书籍
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
内核调试函数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
进入21世纪,IT技术以前所未有的速度向前发展。Linux作为源码开放的操作系统,在众多爱好者的共同努力下,不断成长并趋于完善。由于GNU计划所开发的各种组件和系统发行版所必备的软件可以运行于Linux内核之上,整个Linux内核符合通用公共许可证(General Public License, GNU),使得Linux在PC机、服务器以及嵌入式系统开发等领域得到了广泛应用。
编者在长期的Linux内核开发中发现,当前介绍内核API方面的书籍很少。目前市面上关于Linux内核编程开发方面的书可以分为三类:第一类,Linux内核分析,所分析的内核源码版本一般相对较早,而对于最新版本的内核源代码则很少提及;第二类,Linux编程,主要是以用户层面上的编程为主,一般涉及用户API;第三类,嵌入式Linux开发,相对于特定的硬件平台,只对所用到的特定内核API作简要说明。对于使用Linux内核进行编程开发,需要全面了解内核API,而目前市面上找不到一本能够全面介绍最新的Linux内核API的图书,这也正是本书写作的目的所在。
本书的编写工作从2009年6月开始,所有的内核API验证实例均基于最新的Linux内核源代码2.6.30版本,当时2.6.30内核刚刚发布。经过近15个月的源代码分析、编程实践与实例验证,对常用的内核API作了系统归纳,并编写了典型验证程序,做到了理论分析与实际编程的统一。本书分析的内核API模块包括:内核模块机制API、进程管理内核API、进程调度内核API、中断机制内核API、内存管理内核API、内核定时机制API、内核同步机制API、文件系统内核API和设备驱动及设备管理API。
在实例编写过程中,感谢陈潇参与了第8章部分实例的验证,开放源码项目组王伟、王亚坤和于龙等参与项目讨论并分析实例。另外,我们在编写过程中听取了同事、同行专家的意见和建议,并参阅了大量国内外文献的精华资料,特别是活跃在开放源码社区的Linux爱好者,向他们表示感谢。
由于Linux更新速度较快,再加上编者所具备知识的广度和深度所限,书中存在的错误与不当之处请各位同仁批评指正。对于书中的问题,读者可以发送到E-mail:openlinux2100@gmail.com,及时和作者交流,以便再版时更正与完善。
编者
2010年10月1日于大连
评论交流
共有10人开贴评论
11人参与评论
2人参与打分
查看
     |
2人 |
100% |
用户平均打分
|
    |
0人 |
0% |
   |
0人 |
0% |
  |
0人 |
0% |
 |
0人 |
0% |
开始在内核下编程时,总不找到一本全面介绍linux内核API的书,后来在图书馆查到这本书,仔细看了些天,真的很好,分析透彻,一目了然,把常用的内核API进行了详细的介绍。看了半年的内核源代码分析,还不如这个月的收获大呢。我特别喜欢驱动编程,打算自己独立写个红外的驱动程序试试。对于内核下编程的,强烈推荐。
linux变化太快,我在图书馆借了本,在3.0.4上面实验,例子好多都编不过去了
是不是http://kernelbook.sourceforge.net/kernel-api.html/的摘抄简化翻译版?
回复
(
1条评论--

)
正在读取本评论的讨论,请稍侯……
如果Linux版本不是发生重大的变化,其内核API不会作大的调整,例如,我们分析了2.6.24~2.6.30版本的内核API,这些内核API基本上没有什么大的变化。因此在一段时间内,Linux内核API是相对稳定的。这本书的编写目的就是通过分析相对较新的内核版本2.6.30的内核API,为内核开发人员提供一个快速查找内核API及快速了解此API的功能及如何使用此API的方法,抛砖引玉,从而达到使Linux内核开发人员快速入手内核编程与开发!

加载中...