Linux-Android系统启动之INIT进程和system v init

Linux系统启动之INIT进程和system v init

一. Linux系统启动之INIT进程和system v init


1. 首先介绍一下INIT进程
   init进程在Start_kernel执行完毕之后,也就是Kernel初始化完毕之后启动,是系统所有进程的起点,内核在完成核内引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。
 如果是使用system v init启动的话,实际上system v init就是一个INIT进程. 


2. 接下来介绍一下/etc/inittab文件
 init程序需要读取/etc/inittab文件作为其行为指针,inittab是以行为单位的描述性(非执行性)文本,每一个指令行都具有以下格式: id:runlevel:action:process其中id为入口标识符,runlevel为运行级别,action为动作代号,process为具体的执行程序。
 id一般要求4个字符以内,对于getty或其他login程序项,要求id与tty的编号相同,否则getty程序将不能正常工作。
 runlevel 是init所处于的运行级别的标识,一般使用0-6以及S或s。0、1、6运行级别被系统保留,0作为shutdown动作,1作为重启至单用户模式,6 为重启;S和s意义相同,表示单用户模式,且无需inittab文件,因此也不在inittab中出现,实际上,进入单用户模式时,init直接在控制台(/dev/console)上运行/sbin/sulogin。
 在一般的系统实现中,都使用了2、3、4、5几个级别,在Redhat系统中,2表示无NFS支持的多用户模式,3表示完全多用户模式(也是最常用的级别),4保留给用户自定义,5表示XDM图形登录方式。7-9级别也是可以使用的,传统的unix系统没有定义这几个级别。runlevel可以是并列的多个值,以匹配多个运行级别,对大多数action来说,仅当runlevel与当前运行级别匹配成功才会执行。
  initdefault 是一个特殊的action值,用于标识缺省的启动级别;当init由核心激活以后,它将读取inittab中的initdefault项,取得其中的 runlevel,并作为当前的运行级别。如果没有inittab文件,或者其中没有initdefault项,init将在控制台上请求输入.


3. 分析一下system v init的流程   
>> 首先会执行/etc/rc.d/rc.sysinit,它主要完成启动交换分区/检查磁盘/配置主机名/检查并挂载文件系统/加载并初始化硬件模块等功能;
>> 然后执行缺省的运行级别模式(例如通过id:5:initdefault指定缺省的运行级别为5的话,则会到etc/rc.d/rc5.d目录下寻找并执行所有的配置文件,实际上该目录下的所有配置文件都是链接到/etc/rc.d/init.d目录下的文件,可以通过ls -l命令来查看具体的链接关系);
>> 接下来去执行/etc/rc.d/rc.local脚本文件(这是INIT执行的最后一个脚本文件,所以用户可以在这个文件中添加一些需要在登陆之前执行的命令,作用上和PC电脑windows或者dos系统中c盘根目录下的autoexec.bat作用完全一样);
>> 最后去执行/bin/login程序
 
 如果上述的初始化过程都能够正常结束的话,将为使用者进行初始化环境操作,并将控制权交给shell.


二. 由Linux系统启动之INIT进程和system v init想到的系统开机启动应用程序的调用


 通过上面的讲述可以看到,系统的启动过程中init进程会去etc/rc.d/rc*.d目录下寻找并执行默认运行级别的配置文件,显然在这个过程中可以通过添加配置文件来启动我们自己的应用程序.同时,我们也注意到system v init执行流程的第三步中会去检查并执行/etc/rc.d/rc.local脚本文件,可以通过该脚本文件来启动我们自己的应用程序.
 所以,我们得到如下的结论:
1. 在启动/etc/init.d下添加启动脚本,创建/etc/rc.d/.../目录下的链接
 实际上系统中绝大部分的应用程序都是通过这种方式来进行启动的。
 有关脚本的语法和写法不是这里描述的重点,网上资料一大把,去问BAIDU&GOOGLE吧.
2. 直接在/etc/rc.d/rc.local中添加命令,该脚本在启动过程中调用
 比如我机器F10上rc.local的内容如下:
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
 相应的在后面天加上自己要启动的应用程序就可以了,例如有些example中使用如下的方式启动nfs:/etc/rc.d/init.d/nfs restart (注释以下,restart为调用脚本时候的参数)

 通过查询资料,突然想起来可以通过u-boot或者类似的boot程序给kernel传递参数,通过参数来指定启动的应用程序名字及其路径,例如init=/passion's program(注释:这只是参数的一部分,完整的参数还有其它的内容,可以参照boot代码或者kernel参数的相关介绍).只不过,这个时候启动应用程序的时间和上面的两种方法不太一样,这个是在kernel初始化刚结束的时候启动的,就是在system v init还没有启动的时候调用的.当然了,上面的两种方法启动的应用程序的也不是在同一时刻进行调用.
 
 好了,收工.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习Zynq-7000的入门书单

根据选用的芯片型号和应用领域的不同,读者可以适当裁减。 Entrance Readings: 1. Zynq-7000 User Guides Zynq-7000 All Programmable SoC: Concepts, Tools, and Techniques http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_4/ug873-zynq-ctt.pd…

创建 vxlan 并部署 instance - 每天5分钟玩转 OpenStack(147)

上一节我们完成了 OVS VxLAN 的配置工作,今天创建 vxlan100_net 并部署 instance。 创建 vxlan100_net 打开菜单 Admin -> Networks,点击 “Create Network” 按钮。 显示创建页面。 Provider Network Type 选择 “VXLAN”。 Segmentation ID 即 VNI…

有限编码器电路

有限编码器电路 题目描述 timescale 1ns/1nsmodule encoder_0(input [8:0] I_n ,output reg [3:0] Y_n ); // always (*)begin // casex(I_n) // 9b111111111 : Y_n 4b1111; // 9b0xxxxxxxx : Y_n 4b0110; // 9b10xxx…

Linux-Android启动之zImage生成过程详解

可以看到,在顶层makefile的第278行,包含了scripts/Kbuild.include文件,在这里定义了大量的函数和变量,供顶层makefile和其他makefile文件使用。 在顶层makefile文件的第412行,包含了arch/arm/Makefile。这个是体系结…

行业发展的大势所趋 嵌入式机器视觉系统前景一片大好

机器视觉系统是一种非接触式的光学传感系统。它同时集成软硬件,能够自动地从所采集到的图像中获取信息或者产生控制动作。自起步发展到现在,主要经历了数字电路组成、PC机和输出设备组成、嵌入式三个阶段。 其中,嵌入式机器视觉系统依托专业计…

优先编码器

优先编码器 题目描述 8-3优先编码器的功能表 timescale 1ns/1nsmodule encoder_83(input [7:0] I ,input EI ,output wire [2:0] Y ,output wire GS ,output wire EO );reg [2:0]Y_reg;reg GS_reg;reg EO…

OVS vxlan 底层结构分析 - 每天5分钟玩转 OpenStack(148)

上一节创建了 vxlan100_net 并部署 instance,今天我们来分析底层网络结构。 控制节点 执行 ovs-vsctl show: br-int br-int 连接了如下 port: tap0d4cb13a-7a 是 vxlan100_net 的 DHCP 服务对应的 interface。 qvoa2ac3b9a-24 将 cirros-vm1 虚拟网卡连…

Linux-Android启动之Init进程前传

对Linux-Android系统的启动做了一些分析,下面的一篇文章侧重讲述Linux启动过程中函数Start_kernel()被调用之前的一些分析,同时也对函数Start_kernel()之后的代码流程作了概述,我希望关于Linux-Android系统的启动的专题能够继续地写下去&…

如何正确入门Windows系统下驱动开发领域?

[作者]猪头三作者网站: http://www.x86asm.com原文链接: http://blog.csdn.net/Code_GodFather/...0/5975901.aspx[贡献者]1> defddr 看雪学院2> StudyRush 看雪学院[序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大…

OVS VxLAN Flow 分析 - 每天5分钟玩转 OpenStack(149)

OVS 的数据流向都是由 Flow 规则控制的,今天我们就来分析 VxLAN 的 Flow 规则。 提个醒:这可能是本教程最烧脑的一节,lets rock it ! 下面分析控制节点上的 flow rule,计算节点类似。 br-int 的 flow rule br-int 的 rule 看上去虽…

制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)

这是 OpenStack 实施经验分享系列的第 1 篇。 OpenStack 的 instance 是通过 Glance 镜像部署的,所以准备镜像是必须要做的工作。本节介绍 Linux 镜像的制作方法,后面还会讨论 Windows 镜像。 下载clould 镜像 最简单的方法是使用标准镜像。主流的Linux发…

NDIS与WinSock关系之自我扫盲

起来真是雷人,最近几天纠结与一个最基本的概念,就是NDIS与WinSock关系,想来想去都没有想明白,真实汗Ing,赶紧找了篇精美的文章来扫盲一下。 原文如下: 文章转自http://www.cnblogs.com/sankye/articles/16…

WDF驱动中KMDF与UMDF区别

众所周知, 早期的Windows 95/98的设备驱动是VxD(Virtual Device Driver),其中x表示某一类设备。从Windows 2000开始,开发驱动程序必以WDM(Windows Driver Model)为基础的,但是,如果使用DDK来开发…

根据状态转移表实现时序电路

根据状态转移表实现时序电路 某同步时序电路转换表如下,请使用D触发器和必要的逻辑门实现此同步时序电路 电路的接口如下图所示 A表示输入,Y 表示输出 理解状态转移表,画成状态转移图 timescale 1ns/1nsmodule seq_circuit(input …

Facebook、LinkedIn、Airbnb、Google专家聚首QCon,他们会带来什么?

4月16日~18日,QCon北京2017将在北京国家会议中心举行。现已确认来自海外的Google、Facebook、Airbnb、LinkedIn、Confluent、AppDynamics等公司,国内的百度、阿里巴巴、腾讯、京东、滴滴出行、奇虎360、爱奇艺、微博、bilibili等公司的100余位技术专家担…

Devoxx 2017美国大会首日重要演讲一览

Devoxx美国大会今天开幕。\u0026#xD;\n\u0026#xD;\nDevoxx是北美版的欧洲软件大会(European Software Conference)。广受追捧的欧洲软件大会由Stephan Janssen在2001年创立,组织方是比利时Java用户组(BeJUG,Belgian Ja…

Linux-Android启动之Machine-Init函数

Linux/Android启动之Machine-Init函数 前言: 前面写过两篇Linux/Android的启动过程分析,这篇接着前两篇的知识点进行分析。 Linux/Android的启动过程包括了很多内容,其中有些需要了解,有些则需要在系统移植的时候进行修改。本篇文…

cache 是什么意思 它包括的L1,L2,L3分别是什么东西?

CPU缓存缓存大小也是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块&…

边沿检测—以脉冲形式给出信号

边沿检测—以脉冲形式给出信号 题目描述: 有一个缓慢变化的1bit信号a,编写一个程序检测a信号的上升沿给出指示信号rise,当a信号出现下降沿时给出指示信号down。 注:rise,down应为单脉冲信号,在相应边沿出现时的下一个…

贷款秒拒?你可能进了“灰名单”!

灰名单/GRAY LIST今天有客户向我反映,他的征信良好没有半点问题,只有一张信用卡备用,没有一次逾期,但是最近想申请贷款都是被秒拒。他觉得很郁闷,是不是办了假的贷款?他完全不知道被拒的理由,只…