前言 本书使用方法第1章 Linux内核API分析必备知识 1Linux内核编程注意事项 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
要成为一名合格的LINUX管理员,一般来说都要懂得如下几点规则:规则1:了解LINUX的一切。首先,在了解以下规则之前,笔者必须向大家说明的是,即使最基本的LINUX系统管理员都是要经过不断的学习和长时间实践才能真正了解整个LINUX *** 作系统和网络的。如果您还是一名刚刚入门的LINUX新手或者对LINUX了解不多,在这样的情况下如果要成为一名合格的LINUX系统管理员,那么笔者建议您先花点时间和耐心学习和了解清楚LINUX,如果您对LINUX有足够的了解,能够像 *** 作WINDOWS那样熟悉LINUX了,那您就可以进一步学习,去实现一个合格的LINUX系统管理员的梦想了。
规则2:如果您不能真正的了解LINUX的一切,那最少要知道如何才能找到,在哪里才能找到您所需要的LINUX信息和知识。一般来说,作为LINUX系统管理员,您至少有几本比较全面的LINUX工具书,其中最好包括LINUX安装,LINUX网络配置,LINUX系统分析,LINUX使用大全之类的原版工具书。国内大多数的LINUX工具书为翻译外国的。在这里也向大家推荐基本比较好的工具书,尽供您参考选购:
《RED HAT 6 大全》--机械工业出版社(LINUX与自由软件资源丛书)ISBN 7-111-07946-9
此书内容翔实,涉及领域广泛,并且提供了详细的例子和大量的参考资料,包括书籍,光盘和电子文档和INTERNET站点,是一本学习,使用和管理LINUX的较好工具书。适合LINUX中级用户。
《LINUX常用技术大全》--电子工业出版社出版 ISBN 7-5053-5460-2
此书摘录了LINUX文档项目中的上千页资料,提供了LINUX *** 作系统的综合信息。本书符合各种计算机用户使用。中级用户可以通过此书更加深入的了解和利用LINUX。高级用户可以将此书作为使用LINUX *** 作系统的高级参考手册。
《红旗,RED HAT LINUX开发及网络应用》--人民邮电出版社出版 ISBN 7-115-08978-7
此书适合广大LINUX爱好者阅读,对使用LINUX的组网用户和提供管理员有很大的帮助。
有了以上这些工具书也许并不能完全满足一个系统管理员的需要,毕竟没有一本书是完全能概括LINUX的全部的。您这时需要学会如何从一大堆的书籍和资料中查找到您需要的知识和信息。另外需要指出的是,由于世界上有很多种LINUX发行版本,每一种LINUX发行版本的 *** 作和使用甚至参数配置文件都不尽相同,所以建议大家在购买,下载LINUX发行版本的时候注意购买该版本的官方版的资料和参考书籍,以方便今后管理系统之用。
规则3:如果您无法从各种渠道获取您所需要的信息,请试着用自己的方法来解决问题。不是所有的LINUX故障书籍上都有解答,也许这些您遇到的希奇古怪的问题别人也无法回答您,这时候您就需要自己动手动脑来研究解决了。最后建议您在LINUX自由论坛上公布您遇到的问题和解决方案,以方便别人在遇到同类问题的时候无需花费太多的精力来解决。
规则4:随时准备一本便于携带的LINUX系统用户参考手册,您在旅途中,在等公共汽车的时候,在任何空闲的时间来阅读。这可是国外一名资深的LINUX系统管理员的成功经验。他说他在学习LINUX的时候每天都要花上2-3个小时的空闲时间来仔细阅读各种LINUX命令,来研究LINUX的安全问题。毕竟LINUX是一个正在发展的 *** 作系统,如果没有足够的时间对它的方方面面进行研究的话,您很难成为一名优秀的LINUX系统管理员。
除了以上这些学习LINUX的门道之外,成为一名合格的LINUX系统管理员更重要的是要掌握很多技巧和专业知识。
技巧1:熟悉TCP/IP和LINUX提供的各种网络服务,如DNS,SMTP,UDP,HTTP,FTP,POP3等等。以及要知道LINUX程序, LINUX平台下软件的安装,调试和维护。总之,和LINUX有关的知识懂得越多越好。
技巧2:如果可以的话,最好能熟悉尽可能多的 *** 作系统。这一点很重要,很多朋友也许认为作为一名LINUX系统管理员只有精通LINUX就可以了。事实上LINUX提供了网络服务,很多其他的 *** 作系统都有可能作为客户端,所以作为LINUX系统管理员,有时候您不得不需要解决LINUX和其他的 *** 作系统之间的通讯,安全等问题。一般,熟悉微软的WINDOWS系列 *** 作系统不难,重要的是我们应该对Solaris,Linux,IRIX,HPUX,PPC等系统及其硬件平台都要有所了解。
技巧3:熟悉网络,网络理念和硬件。 *** 作系统是管理整个计算机硬件的最大的程序,LINUX也不例外。无论是台式PC还是笔记本电脑,甚至是大型的网络服务器,LINUX都能对其进行很好的管理。这就要求LINUX系统管理员要熟悉LINUX所控制的硬件平台,因为只有这样才能很好的发挥计算机硬件的最大优势。其实,如果LINUX不是用来提供网络服务,那就是极大的浪费了,大家都知道LINUX要比微软的 *** 作系统稳定、安全。要记住,LINUX能提供一整套很完整的网络服务,如果您在商业公司作一名LINUX系统管理员,那么您必须要对网络及其网络理念有清楚的认识,能够独立完成整个网络和网络服务的配置工作。
技巧4:备份系统和文件恢复。这是LINUX系统管理员最重要的工作之一。每天对LINUX系统和重要文件进行备份是一名有责任心的LINUX系统管理员必须做的工作。事实上,对LINUX系统和文件进行备份无论从硬件还是软件技术上目前都没有什么太大的问题,问题往往出现在系统管理员忘记备份文件或者抱着侥幸的心理,一旦您的LINUX服务器受到攻击,文件损失殆尽,那么您就无法恢复原有文件,一切损失的责任也只能由您负责了。选用LINUX中的定期备份软件和好的备份磁盘磁带都能为您节省不少备份的时间。只要您做到经常,定期备份数据,那么即使LINUX服务器出了再大的问题,一切都能恢复原样的。
技巧5:掌握好一门脚本语言。大家都知道很多LINUX软件的安装都是通过脚本语言来进行的。BASH和PERL是不错的选择。掌握脚本语言另外一个很大的优势就在于能读懂其他LINUX程序员的程序和开发构想,也能方便您在需要的时候修改别人的程序。PERL语言功能强大,学习起来也比较容易。
技巧6:注意LINUX的安全问题。这也是LINUX当中最复杂,最富有挑战性的话题了。同时,LINUX的安全问题也给LINUX系统管理员很大的压力。我认为,安全性实际上取决于用户遵循某种策略的自觉性,安全性措施在很多 *** 作系统上和许多公司中造成了冲突。用户需要完成他们的工作,系统管理员需要把不合理的请求拒之于系统之外;公司管理部门需要保守公司的机密,在许多方面,安全性是最难取得用户配合的领域,但是实际上这是最重要的领域。
对于LINUX系统管理员来说,我可以提供的一个忠告就是:“最好的用户也只是根据您所遵循的策略去做,如果您有忽视安全性的坏习惯,他们就只能更糟糕。”从另外一个方面来说,人们通常提出要求显示或者查看最底层的消息,这超出了系统管理员的职责范围,应友好的指出并做改进。与此同时,要极力阻止那些企图通过LINUX后门进入系统的黑客。由于LINUX的安全问题覆盖的范围很广泛,限于篇幅,在这里也就无法进行谈论了。
有人曾经说过,点滴知识就能获得长久的应用。这句话对于那些想成为或者已经成为了一名LINUX系统管理员是再合适不过的了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)