新書推薦:
《
巨人传(插图珍藏本)
》
售價:HK$
705.6
《
地下(村上春树沙林毒气事件的长篇纪实)
》
售價:HK$
76.7
《
偿还:债务与财富的阴暗面
》
售價:HK$
80.2
《
清华大学藏战国竹简校释(壹):《命训》诸篇
》
售價:HK$
94.4
《
封建社会农民战争问题导论(光启文库)
》
售價:HK$
68.4
《
虚弱的反攻:开禧北伐
》
售價:HK$
92.0
《
中华内丹学典籍丛书:古书隐楼藏书汇校(上下)
》
售價:HK$
257.2
《
辞源.修订本(建国60周年纪念版)(全二册)
》
售價:HK$
1477.6
內容簡介:
本书基于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 内核调试函数printk31.4 内核编译与定制51.4.1 获得Linux内核与补丁51.4.2 准备编译需要的工具51.4.3 解压内核61.4.4 给内核打补丁61.4.5 设定编译选项71.4.6 编译与安装内核91.4.7 创建initramfs101.4.8 设置grub111.4.9 启动选项121.5 温馨提示12本章参考文献13第2章 内核模块机制API142.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进程管理内核API513.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 进程调度内核API834.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中断机制内核API1875.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内存管理内核API2526.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内核定时机制API3507.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内核同步机制API4368.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文件系统内核API5009.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 设备驱动及设备管理API56010.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:qiutie@ieee.org,能够及时与笔者交流,以便再版时更正与完善。编者2016年5月1日于大连