作家
登录

Linux启动分析——init进程与app启动

作者: 来源: 2017-08-31 16:12:53 阅读 我要评论

action

  1. #if DEBUG_SEGV_HANDLER 
  2.     { 
  3.         struct sigaction sa; 
  4.         memset(&sa, 0, sizeof(sa)); 
  5.         sa.sa_sigaction = handle_sigsegv; 
  6.         sa.sa_flags = SA_SIGINFO; 
  7.         sigaction(SIGSEGV, &sa, NULL); 
  8.         ...... 
  9.     } 
  10. #endif 
  11. ...... 
  12. console_init(); 
  13. set_sane_term(); 
  14. ...... 
  15. /* Make sure environs is set to something sane */ 
  16. putenv((char *) "HOME=/"); 
  17. putenv((char *) bb_PATH_root_path); 
  18. putenv((char *) "SHELL=/bin/sh"); 
  19. putenv((char *) "USER=root"); /* needed? why? */  

action包含:sysinit、respawn、askfirst、wait、once、restart、ctrlaltdel、和shutdown共八种,

process

注释说的是启动shell到console口,不管,持续看

指定要运行的法度榜样和它的参数

然后还说了如不雅没有inittab文件,则运行以下内容

  1. ::sysinit:/etc/init.d/rcS 
  2. ::askfirst:/bin/sh 
  3. ::ctrlaltdel:/sbin/reboot 
  4. ::shutdown:/sbin/swapoff -a 
  5. ::shutdown:/bin/umount -a -r 
  6. ::restart:/sbin/init 
  7. tty2::askfirst:/bin/sh         
  8. tty3::askfirst:/bin/sh 
  9. tty4::askfirst:/bin/sh  

这应当就是代码中如不雅读不到inittab文件,则履行的一系列net_init_action的内容

再往下看,出现的第一条示例entry

是不是很熟悉,linux体系嵌入式设备里平日会有/etc/init.d/rcS这个文件,它是一个shell脚本,根据前面的格局,分析一下,id和runlevel为空,action为sysinit,process为/etc/init.d/rcS,所以第一件要干的工作是去履行rcS脚本,而rcS脚本里可以做本身想做的任何工作了

下一条示例是

  1. tty4::respawn:/sbin/getty 38400 tty5 
  2.  
  3. tty5::respawn:/sbin/getty 38400 tty6  

开启getty

  1. ::restart:/sbin/init 

指定init过程的重启地位

  1. ::ctrlaltdel:/sbin/reboot 
  2.  
  3. ::shutdown:/bin/umount -a -r 
  4.  
  5. ::shutdown:/sbin/swapoff -a  

在重启之前要做的工作

再回到代码上,这个while()轮回遍历了inittab文件的每一个entry,解析出entry的四个部分:id、runlevel、action和process,放到一个指针数组char *token[4]中,则token[2]和token[3]代表action和process,法度榜样里调用index_in_strings()函数将token[2]转成字符串,即“sysinit”等值,再调用net_init_action(),分析net_init_action()源码可以看出,其实只是把这些action和process添加到一个链表中,并没有做实际的处理,真正的处理在后续的代铝闼楝parse_inittab()函数返回,

  1. ...... 
  2.    /* Now run everything that needs to be run */ 

  3.   推荐阅读

      关于ES6的10个最佳特性

    ES6,正式名称是ECMAScript2015,然则ES6这个名称加倍简洁。ES6已经不再是JavaScript最新的标准,然则它已经广泛用于编程实践中。如不雅你还没用过ES6,如今还不算太晚...下面是10个ES6最>>>详细阅读


    本文标题:Linux启动分析——init进程与app启动

    地址:http://www.17bianji.com/lsqh/37057.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)