描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787111548775丛书名: Linux/Unix技术丛书
内容简介
本书基于zui新的Linux内核源代码3.19.3版本,对常用的内核API作了系统归纳,并编写了典型验证程序,使理论分析与实际编程做到了统一。分析的内核API模块包括:模块机制内核API、进程管理内核API、进程调度内核API、中断与异常机制内核API、时间与定时机制内核API、内存管理内核API、内核同步机制API、文件系统内核API和设备驱动与设备管理模块内核API。
目 录
Contents?目 录前 言第1章 Linux内核API分析知识 11.1 Linux内核编程注意事项 11.2 本书中模块编译Makefile模板 21.3 内核调试函数printk 31.4 内核编译与定制 51.4.1 获得Linux内核与补丁 51.4.2 准备编译需要的工具 51.4.3 解压内核 61.4.4 给内核打补丁 61.4.5 设定编译选项 71.4.6 编译与安装内核 91.4.7 创建initramfs 101.4.8 设置grub 111.4.9 启动选项 121.5 温馨提示 12本章参考文献 13第2章 内核模块机制API 142.1 函数:__module_address( ) 142.2 函数:__module_text_address( ) 162.3 函数:__print_symbol( ) 192.4 函数:__symbol_get( ) 222.5 函数:__symbol_put( ) 252.6 函数:find_module( ) 272.7 函数:find_symbol( ) 312.8 函数:module_is_live( ) 362.9 函数:module_put( ) 382.10 函数:module_refcount( ) 402.11 函数:sprint_symbol( ) 422.12 函数:symbol_put_addr( ) 452.13 函数:try_module_get( ) 48本章参考文献 50第3章 Linux进程管理内核API 513.1 函数:__task_pid_nr_ns( ) 513.2 函数:find_get_pid( ) 543.3 函数:find_pid_ns( ) 563.4 函数:find_vpid( ) 583.5 函数:get_pid( ) 603.6 函数:get_task_mm( ) 623.7 函数:mmput( ) 663.8 函数:ns_of_pid( ) 683.9 函数:pid_nr( ) 703.10 函数:pid_task( ) 723.11 函数:pid_vnr( ) 743.12 函数:put_pid( ) 763.13 函数:task_active_pid_ns( ) 783.14 函数:task_tgid_nr_ns( ) 80本章参考文献 82第4章 Linux 进程调度内核API 834.1 函数:__wake_up( ) 834.2 函数:__wake_up_sync( ) 884.3 函数:__wake_up_sync_key( ) 914.4 函数:abort_exclusive_wait( ) 944.5 函数:add_wait_queue( ) 994.6 函数:add_wait_queue_exclusive( ) 1024.7 函数:autoremove_wake_function( ) 1054.8 函数:complete( ) 1094.9 函数:complete_all( ) 1124.10 函数:completion_done( ) 1154.11 函数:current_thread_info( ) 1184.12 函数:default_wake_function( ) 1214.13 函数:do_exit( ) 1244.14 函数:finish_wait( ) 1264.15 函数:init_waitqueue_entry( ) 1304.16 函数:init_waitqueue_head( ) 1324.17 函数:kthread_create_on_node( ) 1344.18 函数:kthread_stop( ) 1364.19 函数:prepare_to_wait( ) 1384.20 函数:prepare_to_wait_exclusive( ) 1424.21 函数:remove_wait_queue( ) 1474.22 函数:sched_setscheduler( ) 1504.23 函数:set_cpus_allowed_ptr( ) 1544.24 函数:set_user_nice( ) 1574.25 函数:task_nice( ) 1604.26 函数:try_wait_for_completion( ) 1624.27 函数:wait_for_completion( ) 1664.28 函数:wait_for_completion_interruptible_timeout( ) 1694.29 函数:wait_for_completion_killable( ) 1734.30 函数:wait_for_completion_timeout( ) 1774.31 函数:wake_up_process( ) 1804.32 函数:yield( ) 183本章参考文献 185第5章 Linux中断机制内核API 1875.1 函数:__tasklet_hi_schedule( ) 1875.2 函数:__tasklet_schedule( ) 1905.3 函数:disable_irq( ) 1935.4 函数:disable_irq_nosync( ) 1935.5 函数:disable_irq_wake( ) 1965.6 函数:enable_irq( ) 1995.7 函数:enable_irq_wake( ) 2015.8 函数:free_irq( ) 2045.9 函数:irq_set_chip( ) 2055.10 函数:irq_set_chip_data( ) 2095.11 函数:irq_set_irq_type( ) 2125.12 函数:irq_set_irq_wake( ) 2145.13 函数:remove_irq( ) 2175.14 函数:request_irq( ) 2215.15 函数:request_threaded_irq( ) 2255.16 函数:setup_irq( ) 2295.17 函数:tasklet_disable( ) 2325.18 函数:tasklet_disable_nosync( ) 2345.19 函数:tasklet_enable( ) 2365.20 函数:tasklet_hi_schedule( ) 2375.21 函数:tasklet_init( ) 2415.22 函数:tasklet_kill( ) 2435.23 函数:tasklet_schedule( ) 2455.24 函数:tasklet_trylock( ) 2475.25 函数:tasklet_unlock( ) 248本章参考文献 251第6章 Linux内存管理内核API 2526.1 函数:__free_pages( ) 2526.2 函数:__get_free_pages( ) 2536.3 函数:__get_vm_area( ) 2556.4 函数:__krealloc( ) 2586.5 函数:alloc_pages( ) 2616.6 函数:alloc_pages_exact( ) 2646.7 函数:find_vma( ) 2666.8 函数:find_vma_intersection( ) 2706.9 函数:free_pages( ) 2726.10 函数:free_pages_exact( ) 2736.11 函数:get_unmapped_area( ) 2746.12 函数:get_zeroed_page( ) 2766.13 函数:kcalloc( ) 2786.14 函数:kfree( ) 2806.15 函数:kmalloc( ) 2816.16 函数:kmem_cache_alloc( ) 2836.17 函数:kmem_cache_create( ) 2856.18 函数:kmem_cache_destroy( ) 2886.19 函数:kmem_cache_free( ) 2896.20 函数:kmem_cache_zalloc( ) 2906.21 函数:kmemdup( ) 2926.22 函数:ksize( ) 2956.23 函数:kstrdup( ) 2986.24 函数:kstrndup( ) 2996.25 函数:kzalloc( ) 3016.26 函数:memdup_user( ) 3036.27 函数:mempool_alloc( ) 3066.28 函数:mempool_alloc_pages( ) 3086.29 函数:mempool_alloc_slab( ) 3116.30 函数:mempool_create( ) 3136.31 函数:mempool_destroy( ) 3166.32 函数:mempool_free( ) 3176.33 函数:mempool_free_pages( ) 3186.34 函数:mempool_free_slab( ) 3186.35 函数:mempool_kfree( ) 3196.36 函数:mempool_kmalloc( ) 3206.37 函数:mempool_resize( ) 3226.38 函数:nr_free_buffer_pages( ) 3256.39 宏:page_address( ) 3266.40 宏:page_cache_get( ) 3286.41 宏:page_cache_release( ) 3306.42 函数:page_zone( ) 3316.43 宏:probe_kernel_address( ) 3346.44 函数:probe_kernel_read( ) 3366.45 函数:vfree( ) 3386.46 函数:vma_pages( ) 3396.47 函数:vmalloc( ) 3416.48 函数:vmalloc_to_page( ) 3436.49 函数:vmalloc_to_pfn( ) 3456.50 函数:vmalloc_user( ) 347本章参考文献 349第7章 Linux内核定时机制API 3507.1 函数:__round_jiffies( ) 3507.2 函数:__round_jiffies_relative( ) 3527.3 函数:__round_jiffies_up( ) 3547.4 函数:__round_jiffies_up_relative( ) 3567.5 函数:add_timer( ) 3587.6 函数:current_kernel_time( ) 3597.7 函数:del_timer( ) 3617.8 函数:del_timer_sync( ) 3647.9 函数:do_gettimeofday( ) 3677.10 函数:do_settimeofday( ) 3697.11 函数:get_seconds( ) 3727.12 函数:getnstimeofday( ) 3747.13 函数:init_timer( ) 3767.14 函数:init_timer_deferrable( ) 3787.15 函数:init_timer_key( ) 3807.16 函数:init_timer_on_stack( ) 3827.17 函数:init_timer_on_stack_key( ) 3857.18 函数:mktime( ) 3877.19 函数:mod_timer( ) 3897.20 函数:mod_timer_pending( ) 3927.21 函数:ns_to_timespec( ) 3947.22 函数:ns_to_timeval( ) 3967.23 函数:round_jiffies( ) 3987.24 函数:round_jiffies_relative( ) 4017.25 函数:round_jiffies_up( ) 4047.26 函数:round_jiffies_up_relative( ) 4067.27 函数:set_normalized_timespec( ) 4097.28 函数:setup_timer( ) 4117.29 函数:setup_timer_on_stack( ) 4137.30 函数:timer_pending( ) 4157.31 函数:timespec_add_ns( ) 4177.32 函数:timespec_compare( ) 4207.33 函数:timespec_equal( ) 4227.34 函数:timespec_sub( ) 4247.35 函数:timespec_to_ns( ) 4267.36 函数:timeval_compare( ) 4287.37 函数:timeval_to_ns( ) 4317.38 函数:try_to_del_timer_sync( ) 433本章参考文献 435第8章 Linux内核同步机制API 4368.1 函数:atomic_add( ) 4368.2 函数:atomic_add_negative( ) 4388.3 函数:atomic_add_return( ) 4408.4 函数:atomic_add_unless( ) 4428.5 函数:atomic_cmpxchg( ) 4448.6 函数:atomic_dec( ) 4468.7 函数:atomic_dec_and_test( ) 4488.8 函数:atomic_inc( ) 4498.9 函数:atomic_inc_and_test( ) 4518.10 函数:atomic_read( ) 4538.11 函数:atomic_set( ) 4538.12 函数:atomic_sub( ) 4558.13 函数:atomic_sub_and_test( ) 4578.14 函数:atomic_sub_return( ) 4598.15 函数:down( ) 4618.16 函数:down_interruptible( ) 4638.17 函数:down_killable( ) 4658.18 函数:down_read( ) 4688.19 函数:down_read_trylock( ) 4708.20 函数:down_timeout( ) 4728.21 函数:down_trylock( ) 4748.22 函数:down_write( ) 4768.23 函数:down_write_trylock( ) 4798.24 函数:downgrade_write( ) 4818.25 宏:init_rwsem( ) 4838.26 函数:read_seqbegin( ) 4868.27 函数:read_seqretry( ) 4888.28 函数:sema_init( ) 4908.29 宏:seqlock_init( ) 4928.30 函数:up( ) 4948.31 函数:up_read( ) 4968.32 函数:up_write( ) 4978.33 函数:write_seqlock( ) 4988.34 函数:write_sequnlock( ) 498本章参考文献 499第9章 Linux文件系统内核API 5009.1 函数:__mnt_is_readonly( ) 5009.2 函数:current_umask( ) 5029.3 函数:d_alloc( ) 5049.4 函数:d_find_alias( ) 5079.5 函数:dput( ) 5109.6 函数:fget( ) 5129.7 函数:generic_fillattr( ) 5159.8 函数:get_fs_type( ) 5179.9 函数:get_max_files( ) 5209.10 函数:get_super( ) 5229.11 函数:have_submounts( ) 5259.12 函数:I_BDEV( ) 5279.13 函数:inode_add_bytes( ) 5299.14 函数:inode_get_bytes( ) 5319.15 函数:inode_set_bytes( ) 5339.16 函数:inode_sub_bytes( ) 5359.17 函数:is_bad_inode( ) 5379.18 函数:make_bad_inode( ) 5389.19 函数:may_umount( ) 5409.20 函数:may_umount_tree( ) 5429.21 函数:mnt_want_write( ) 5449.22 函数:notify_change( ) 5459.23 函数:put_unused_fd( ) 5479.24 函数:unshare_fs_struct( ) 5499.25 函数:vfs_fstat( ) 5519.26 函数:vfs_getattr( ) 5539.27 函数:vfs_statfs( ) 556本章参考文献 559第10章 Linux 设备驱动及设备管理API 56010.1 函数:__class_create( ) 56010.2 函数:__class_register( ) 56210.3 函数:cdev_add( ) 56310.4 函数:cdev_alloc( ) 56410.5 函数:cdev_del( ) 56610.6 函数:cdev_init( ) 57210.7 宏:class_create( ) 57710.8 函数:class_destroy( ) 57810.9 宏:class_register( ) 58110.10 函数:class_unregister( ) 58210.11 函数:device_add( ) 58910.12 函数:device_create( ) 58910.13 函数:device_del( ) 59210.14 函数:device_destroy( ) 59210.15 函数:device_initialize( ) 59910.16 函数:device_register( ) 60610.17 函数:device_rename( ) 60710.18 函数:device_unregister( ) 61310.19 函数:get_device( ) 62010.20 函数:put_device( ) 62110.21 函数:register_chrdev( ) 62510.22 函数:unregister_chrdev( ) 62610.23 部分相关函数说明 634本章参考文献 635附录 Linux内核API快速检索表 636
前 言
Preface?前 言进入21世纪以来,IT技术以前所未有的速度向前发展。Linux作为源码开放的操作系统,在众多的爱好者和网络黑客的共同努力下,不断成长并趋于完善。由于GNU计划所开发的各种组件和系统发行版所的软件可以运行于Linux内核之上,整个内核符合GNU通用公共许可证(GNU General Public License),使得Linux在PC、服务器以及嵌入式系统开发等领域得到了广泛的应用。 作者在长期的Linux内核开发中发现,当前介绍内核API方面的书籍很少。目前市面的关于Linux内核编程开发方面的书可以分为三类:类,Linux内核分析,所分析的内核源代码版本一般相对较早,而对于版本的内核源代码很少提及;第二类,Linux编程类,主要是以用户层面上的编程为主,一般涉及用户API;第三类,嵌入式Linux开发,相对于特定的硬件平台,只对所用到的特定内核API进行简要说明。对于Linux内核编程开发,需要全面了解内核API,而目前市面上找不到一本能够全面介绍的Linux内核API的图书,这也正是本书写作的目的所在。 本书的编写工作从2015年6月开始,所有的内核API验证实例基于的Linux内核源代码3.19.3版本。经过近十一个月的源代码分析、编程实践与实例验证,对常用的内核API进行系统归纳,并编写了典型验证程序,使理论分析与实际编程实现统一。分析的内核API模块包括:内核模块机制API、进程管理内核API、进程调度内核API、中断机制内核API、时间与定时机制内核API、内存管理内核API、内核同步机制API、文件系统内核API和设备驱动及设备管理模块内核API。 在实例编写过程中,感谢邓莹莹参与了部分实例的验证,以及机械工业出版社华章公司编辑为本书的出版所做的工作。另外,笔者听取了同事、同行专家意见和建议,并参阅了大量中文、外文文献和网络论坛的精华资料,特别是活跃在开放源代码社区的Linux爱好者,在此向他们表示感谢。 由于Linux更新速度较快,再加上编者所具备知识的广度和深度所限,书中存在的错误与不当之处请各位同仁批评指正。对于书中的问题,读者可以发送到E-mail:[email protected],能够及时与笔者交流,以便再版时更正与完善。 编者2016年5月1日于大连
评论
还没有评论。