busybox的init初始化进程

摘要:
如果未创建这些设备文件,BusyBox将报告错误。inittab文件中每一行的格式如下:id:runlevel:action:process尽管这种格式与传统的SymVinit相似,但在BusyBox的init中id的含义不同。对于BusyBox,id用于指定启动进程的控制tty。操作结果sysinit为init提供初始化命令行respawn的路径。每当相应的进程终止执行时,它将首先重新启动askfirst。它类似于respawn,但其主要目的是减少在系统上执行的终端应用程序的数量。
busybox的init
   除了基本的命令之外,BusyBox还支持init功能,如同其它的init一样,busybox的init也是完成系统的初始化工作,关机前的工作等等,我们知道在Linux的内核被载入之后,机器就把控制权转交给内核,linux的内核启动之后,做了一些工作,然后找到根文件系统里面的init程序,并执行它,BusyBox的init进程会依次进行以下工作:(参考> p201)
1.       为init设置信号处理过程
2.       初始化控制台
3.       剖析/etc/inittab文件
4.       执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS
5.       执行所有导致init暂停的inittab命令(动作类型:wait)
6.       执行所有仅执行一次的inittab(动作类型:once)
一旦完成以上工作,init进程便会循环执行以下进程:
       1.  执行所有终止时必须重新启动的inittab命令(动作类型:once)
       2.  执行所有终止时必须重新启动但启动前必须询问用户的inittab命令(动作类型:askfirst)
       初始化控制台之后,BusyBox会检查/etc/inittab文件是否存在,如果此文件不存在,BusyBox会使用缺省的inittab配置,它主要为系统重引导,系统挂起以及init重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1到tty4)设置启动shell的动作。如果未建立这些设备文件,BusyBox会报错。
       inittab文件中每一行的格式如下所示:(busybox的根目录下的example文件夹下有详尽的inittab文件范例)      
       id:runlevel:action:process
尽管此格式与传统的Sytem V init类似,但是,id在BusyBox的init中具有不同的意义。对BusyBox而言,id用来指定启动进程的控制tty。如果所启动的进程并不是可以交互的shell,例如BusyBox的sh(ash),应该会有个控制tty,如果控制tty不存在,Busybox的sh会报错。BusyBox将会完全忽略runlevel字段,所以空着它就行了,你也许会问既然没用保留着它干吗,我想大概是为了和传统的Sytem V init保持一致的格式吧。process字段用来指定所执行程式的路径,包括命令行选项。action字段用来指定下面表中8个可应用到process的动作之一。
动作
结果
sysinit
为init提供初始化命令行的路径
respawn
每当相应的进程终止执行便会重新启动
askfirst
类似respawn,不过它的主要用途是减少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动之前等待用户按下enter键
wait
告诉init必须等到相应的进程完成之后才能继续执行
once
仅执行相应的进程一次,而且不会等待它完成
ctratldel
当按下Ctrl+Alt+Delete组合键时,执行相应的进程
shutdown
当系统关机时,执行相应的进程
restart
当init重新启动时,执行相应的进程,通常此处所执行的进程就是init本身

以下是我的usblinux的inittab文件
::sysinit:/etc/init.d/rcS 
::respawn:/sbin/getty  38400  tty1 
tty2::askfirst:-/bin/sh 
tty3::askfirst:-/bin/sh 
::restart:/sbin/init 
::ctrlaltdel:/bin/umount -a -r 
这个inittab执行下列动作
1.       将/etc/init.d/rcS设置成系统的初始化文件
2.       在38400 bps的虚拟终端tty1上启动一个登陆会话 (注意getty的用法)
3.       在虚拟终端tty2和tty3上启动askfirst动作的shell
4.       如果init重新启动,将/sbin/init设置成它会执行的程序
5.       告诉init,在系统关机的时候执行umount命令卸载所有文件系统,并且在卸载失败时用只读模式重新安装以保护文件系统。
5.6  系统的配置文件
5.6.1. /etc/init.d/rcS文件
配置文件一般放在/etc/目录下,5.5.3节说了init初始化命令行的文件是/etc/init.d/rcS,下面是我的rcS文件
       #!/bin/sh 
    /bin/mount -n -t proc  /proc  /proc 
    /bin/mount -n -o  remount,rw  / 
    /bin/mount -av 
    /bin/hostname usblinux 
    /etc/init.d/rc.nic 
    /etc/init.d/rc.network 
    /etc/init.d/rc.usb 
    /etc/init.d/rc.local 
1.       安装proc文件系统,但是不写入/etc/mtab文件(mtab文件是df命令读取的文件)
2.       以读写模式重新挂载根文件系统(需要/etc/fstab文件)
3.       mount -av 挂载所有在/etc/fstab里面列出的文件系统
4.       主机名命名为usblinux
5.       依次执行rc.nic(自动检测网卡),rc.network(配置网络),rc.usb(加载usb模块),rc.local(执行本地的一些服务)
5.6.2. /etc/fstab
上面使用mount命令的时候已经涉及到了fstab文件,下面是我的fstab文件
/dev/ram0       /       ext2    defaults    0   0 
proc            /proc   proc    defaults    0   0 
关于fstab配置文件的语法可以man fstab
其实rcS里面的mount -av没有必要加上去。
5.6.3. /etc/mtab
这个文件里面的内容是动态变化的,当mount一个文件系统的时候,如果mount 没有加上-n参数,那么安装信息就会写入mtab文件,df命令读取的就是这个文件。
5.6.4. /etc/profile
这个文件是sh用的,当用户获得一个shell后,sh就会根据这个文件配置用户的登陆环境,下面是我的profile文件。
PATH=/bin:/sbin:/usr/bin:/usr/sbin 
PS1='[u@h W]$ ' 
HOSTNAME='/bin/hostname' 
export PATH HOSTNAME PS1 
alias l.='ls -d .[a-zA-Z]* --color=tty' 
alias rm='rm -i' 
alias cp='cp -i' 
alias mv='mv -i' 
export PATH=/usr/local/bin:$PATH 
export PATH=/usr/local/sbin:$PATH 
      
其中PATH环境变量指定当用户键入一个命令时,sh寻找这个命令的路径。
PS1指定sh提示符的格式

其它的export命令,alias命令不用说了吧,busybox里面的ash和bash非常相似,因此只要熟悉bash就会不成问题。



转载自:http://blog.chinaunix.net/uid-20321537-id-1966856.html

修改了原文中的一些错字。

免责声明:文章转载自《busybox的init初始化进程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇chrome浏览器控制台 console不打印信息问题解决办法。操作系统知识总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

接口测试小结

环境准备 1.JDK版本和Jar包确认,无特殊要求JDK安装后即可 2.数据库确认(通常使用dev),环境配置文件 ats-config.properties,数据库信息文件devdb.conf 3.在trunk流测试时需要查看基类是否有本地测试限制,有限制放开即可   1.session初始化 1.RPC接口写测试脚本时,往往需要初始化sessio...

solaris 命令

一.chmod 命令 chmod用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。 1. 文字设定法 语法:chmod [who] [+ | - | =] [mode] 文件名 命令中各选项的含义为: 操作对象who可是下述字母中的任一个或者它们的...

常见网页错误400/401/403/404/500网页错误代码表示的含义

转载:http://blog.csdn.net/yanchao315/article/details/76686827 HTTP 错误 400 400 请求出错 由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。 HTTP 错误 401 401.1 未授权:登录失败 此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。 请与...

迅为4412开发板入门准备

一、硬件连接 4412开发板的HDMI口,小HDMI口输出HDMI信号,大HDMI口用来连接各种屏(只是用了HMDI的线,并不是标准的HDMI)。 二、安装超级终端 首先需要安装USB转串口,可以是CH340驱动,或者是PL2303驱动。连接硬件时也要注意,精英版的调试串口是串口2。连接串口1没有信号。 然后安装hyperterminal(超级终端v2.4...

Delphi数据库处理

Delphi数据库处理 第一节 BDE、ADO、InterBase和dbExpress Delphi中处理数据库主要有两种方法,也就是BDE、ADO,从Delphi 6.0开始还加入了一种dbExpress方法。另外,Delphi还提供了专门处理Borland 公司自己的数据库产品InterBase 数据库的专门的方法。 BDE(Bor...

redis pipeline

redis是一个cs模式的tcp server,使用和http类似的请求响应协议。一个client可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常 会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client。基本的通信过程如下 Client: INCR XServer: 1Clien...